Lines Matching full:d

16 static void freetgt(struct aoedev *d, struct aoetgt *t);
17 static void skbpoolfree(struct aoedev *d);
25 struct aoedev *d; in aoedev_by_aoeaddr() local
30 for (d=devlist; d; d=d->next) in aoedev_by_aoeaddr()
31 if (d->aoemajor == maj && d->aoeminor == min) in aoedev_by_aoeaddr()
35 return d; in aoedev_by_aoeaddr()
41 struct aoedev *d; in dummy_timer() local
43 d = (struct aoedev *)vp; in dummy_timer()
44 if (d->flags & DEVFL_TKILL) in dummy_timer()
46 d->timer.expires = jiffies + HZ; in dummy_timer()
47 add_timer(&d->timer); in dummy_timer()
51 aoedev_downdev(struct aoedev *d) in aoedev_downdev() argument
58 t = d->targets; in aoedev_downdev()
69 && buf != d->inprocess) { in aoedev_downdev()
70 mempool_free(buf, d->bufpool); in aoedev_downdev()
77 buf = d->inprocess; in aoedev_downdev()
80 mempool_free(buf, d->bufpool); in aoedev_downdev()
83 d->inprocess = NULL; in aoedev_downdev()
84 d->htgt = NULL; in aoedev_downdev()
86 while (!list_empty(&d->bufq)) { in aoedev_downdev()
87 buf = container_of(d->bufq.next, struct buf, bufs); in aoedev_downdev()
88 list_del(d->bufq.next); in aoedev_downdev()
90 mempool_free(buf, d->bufpool); in aoedev_downdev()
94 if (d->gd) in aoedev_downdev()
95 set_capacity(d->gd, 0); in aoedev_downdev()
97 d->flags &= ~DEVFL_UP; in aoedev_downdev()
101 aoedev_freedev(struct aoedev *d) in aoedev_freedev() argument
105 cancel_work_sync(&d->work); in aoedev_freedev()
106 if (d->gd) { in aoedev_freedev()
107 aoedisk_rm_sysfs(d); in aoedev_freedev()
108 del_gendisk(d->gd); in aoedev_freedev()
109 put_disk(d->gd); in aoedev_freedev()
111 t = d->targets; in aoedev_freedev()
114 freetgt(d, *t); in aoedev_freedev()
115 if (d->bufpool) in aoedev_freedev()
116 mempool_destroy(d->bufpool); in aoedev_freedev()
117 skbpoolfree(d); in aoedev_freedev()
118 blk_cleanup_queue(d->blkq); in aoedev_freedev()
119 kfree(d); in aoedev_freedev()
126 struct aoedev *d, **dd; in aoedev_flush() local
141 while ((d = *dd)) { in aoedev_flush()
142 spin_lock(&d->lock); in aoedev_flush()
143 if ((!all && (d->flags & DEVFL_UP)) in aoedev_flush()
144 || (d->flags & (DEVFL_GDALLOC|DEVFL_NEWSIZE)) in aoedev_flush()
145 || d->nopen) { in aoedev_flush()
146 spin_unlock(&d->lock); in aoedev_flush()
147 dd = &d->next; in aoedev_flush()
150 *dd = d->next; in aoedev_flush()
151 aoedev_downdev(d); in aoedev_flush()
152 d->flags |= DEVFL_TKILL; in aoedev_flush()
153 spin_unlock(&d->lock); in aoedev_flush()
154 d->next = rmd; in aoedev_flush()
155 rmd = d; in aoedev_flush()
158 while ((d = rmd)) { in aoedev_flush()
159 rmd = d->next; in aoedev_flush()
160 del_timer_sync(&d->timer); in aoedev_flush()
161 aoedev_freedev(d); /* must be able to sleep */ in aoedev_flush()
191 skbpoolfree(struct aoedev *d) in skbpoolfree() argument
195 skb_queue_walk_safe(&d->skbpool, skb, tmp) in skbpoolfree()
198 __skb_queue_head_init(&d->skbpool); in skbpoolfree()
205 struct aoedev *d; in aoedev_by_sysminor_m() local
210 for (d=devlist; d; d=d->next) in aoedev_by_sysminor_m()
211 if (d->sysminor == sysminor) in aoedev_by_sysminor_m()
213 if (d) in aoedev_by_sysminor_m()
215 d = kcalloc(1, sizeof *d, GFP_ATOMIC); in aoedev_by_sysminor_m()
216 if (!d) in aoedev_by_sysminor_m()
218 INIT_WORK(&d->work, aoecmd_sleepwork); in aoedev_by_sysminor_m()
219 spin_lock_init(&d->lock); in aoedev_by_sysminor_m()
220 skb_queue_head_init(&d->sendq); in aoedev_by_sysminor_m()
221 skb_queue_head_init(&d->skbpool); in aoedev_by_sysminor_m()
222 init_timer(&d->timer); in aoedev_by_sysminor_m()
223 d->timer.data = (ulong) d; in aoedev_by_sysminor_m()
224 d->timer.function = dummy_timer; in aoedev_by_sysminor_m()
225 d->timer.expires = jiffies + HZ; in aoedev_by_sysminor_m()
226 add_timer(&d->timer); in aoedev_by_sysminor_m()
227 d->bufpool = NULL; /* defer to aoeblk_gdalloc */ in aoedev_by_sysminor_m()
228 d->tgt = d->targets; in aoedev_by_sysminor_m()
229 INIT_LIST_HEAD(&d->bufq); in aoedev_by_sysminor_m()
230 d->sysminor = sysminor; in aoedev_by_sysminor_m()
231 d->aoemajor = AOEMAJOR(sysminor); in aoedev_by_sysminor_m()
232 d->aoeminor = AOEMINOR(sysminor); in aoedev_by_sysminor_m()
233 d->mintimer = MINTIMER; in aoedev_by_sysminor_m()
234 d->next = devlist; in aoedev_by_sysminor_m()
235 devlist = d; in aoedev_by_sysminor_m()
238 return d; in aoedev_by_sysminor_m()
242 freetgt(struct aoedev *d, struct aoetgt *t) in freetgt() argument
257 struct aoedev *d; in aoedev_exit() local
260 while ((d = devlist)) { in aoedev_exit()
261 devlist = d->next; in aoedev_exit()
263 spin_lock_irqsave(&d->lock, flags); in aoedev_exit()
264 aoedev_downdev(d); in aoedev_exit()
265 d->flags |= DEVFL_TKILL; in aoedev_exit()
266 spin_unlock_irqrestore(&d->lock, flags); in aoedev_exit()
268 del_timer_sync(&d->timer); in aoedev_exit()
269 aoedev_freedev(d); in aoedev_exit()