Lines Matching +full:- +full:d +full:-

8 #include <linux/blk-mq.h>
18 static void freetgt(struct aoedev *d, struct aoetgt *t);
19 static void skbpoolfree(struct aoedev *d);
29 * - partitions,
30 * - slots per shelf,
31 * - or shelves,
52 error = -1;
72 pr_err("aoe: %s %d slots per shelf\n",
75 error = -1;
81 pr_err("aoe: %s with e%ld.%d\n",
84 error = -1;
93 error = -1;
138 aoedev_put(struct aoedev *d)
143 d->ref--;
150 struct aoedev *d;
152 d = from_timer(d, t, timer);
153 if (d->flags & DEVFL_TKILL)
155 d->timer.expires = jiffies + HZ;
156 add_timer(&d->timer);
160 aoe_failip(struct aoedev *d)
166 aoe_failbuf(d, d->ip.buf);
167 rq = d->ip.rq;
172 while ((bio = d->ip.nxbio)) {
173 bio->bi_status = BLK_STS_IOERR;
174 d->ip.nxbio = bio->bi_next;
175 req->nr_bios--;
178 if (!req->nr_bios)
179 aoe_end_request(d, rq, 0);
189 if (f->buf) {
190 f->buf->nframesout--;
191 aoe_failbuf(f->t->d, f->buf);
197 aoedev_downdev(struct aoedev *d)
203 d->flags &= ~DEVFL_UP;
205 /* clean out active and to-be-retransmitted buffers */
207 head = &d->factive[i];
211 head = &d->rexmitq;
216 tt = d->targets;
217 te = tt + d->ntargets;
220 t->nout = 0;
223 /* clean out the in-process request (if any) */
224 aoe_failip(d);
227 if (d->blkq) {
229 unsigned int memflags = blk_mq_freeze_queue(d->blkq);
231 blk_mq_quiesce_queue(d->blkq);
232 blk_mq_unquiesce_queue(d->blkq);
233 blk_mq_unfreeze_queue(d->blkq, memflags);
236 if (d->gd)
237 set_capacity(d->gd, 0);
244 user_req(char *s, size_t slen, struct aoedev *d)
249 if (!d->gd)
251 p = kbasename(d->gd->disk_name);
252 lim = sizeof(d->gd->disk_name);
253 lim -= p - d->gd->disk_name;
261 freedev(struct aoedev *d)
267 spin_lock_irqsave(&d->lock, flags);
268 if (d->flags & DEVFL_TKILL
269 && !(d->flags & DEVFL_FREEING)) {
270 d->flags |= DEVFL_FREEING;
273 spin_unlock_irqrestore(&d->lock, flags);
277 del_timer_sync(&d->timer);
278 if (d->gd) {
279 aoedisk_rm_debugfs(d);
280 del_gendisk(d->gd);
281 put_disk(d->gd);
282 blk_mq_free_tag_set(&d->tag_set);
284 t = d->targets;
285 e = t + d->ntargets;
287 freetgt(d, *t);
289 mempool_destroy(d->bufpool);
290 skbpoolfree(d);
291 minor_free(d->sysminor);
293 spin_lock_irqsave(&d->lock, flags);
294 d->flags |= DEVFL_FREED;
295 spin_unlock_irqrestore(&d->lock, flags);
307 struct aoedev *d, **dd;
319 return -EFAULT;
329 for (d = devlist; d; d = d->next) {
330 spin_lock(&d->lock);
331 if (d->flags & DEVFL_TKILL)
337 if (!user_req(buf, cnt, d))
339 } else if ((!all && (d->flags & DEVFL_UP))
340 || d->flags & skipflags
341 || d->nopen
342 || d->ref)
345 spin_unlock(&d->lock);
347 aoedev_downdev(d);
348 d->flags |= DEVFL_TKILL;
351 spin_unlock(&d->lock);
360 for (d = devlist; d; d = d->next) {
361 spin_lock(&d->lock);
362 if (d->flags & DEVFL_TKILL
363 && !(d->flags & DEVFL_FREEING)) {
364 spin_unlock(&d->lock);
366 freedev(d);
369 spin_unlock(&d->lock);
373 for (dd = &devlist, d = *dd; d; d = *dd) {
376 spin_lock(&d->lock);
377 if (d->flags & DEVFL_FREED) {
378 *dd = d->next;
379 doomed = d;
381 dd = &d->next;
383 spin_unlock(&d->lock);
385 kfree(doomed->targets);
412 while (atomic_read(&skb_shinfo(skb)->dataref) != 1 && i-- > 0)
417 skb->dev ? skb->dev->name : "netif",
418 "cannot free skb -- memory leaked.");
421 skb->truesize -= skb->data_len;
422 skb_shinfo(skb)->nr_frags = skb->data_len = 0;
428 skbpoolfree(struct aoedev *d)
432 skb_queue_walk_safe(&d->skbpool, skb, tmp)
435 __skb_queue_head_init(&d->skbpool);
442 struct aoedev *d;
449 for (d=devlist; d; d=d->next)
450 if (d->aoemajor == maj && d->aoeminor == min) {
451 spin_lock(&d->lock);
452 if (d->flags & DEVFL_TKILL) {
453 spin_unlock(&d->lock);
454 d = NULL;
457 d->ref++;
458 spin_unlock(&d->lock);
461 if (d || !do_alloc || minor_get(&sysminor, maj, min) < 0)
463 d = kcalloc(1, sizeof *d, GFP_ATOMIC);
464 if (!d)
466 d->targets = kcalloc(NTARGETS, sizeof(*d->targets), GFP_ATOMIC);
467 if (!d->targets) {
468 kfree(d);
469 d = NULL;
472 d->ntargets = NTARGETS;
473 INIT_WORK(&d->work, aoecmd_sleepwork);
474 spin_lock_init(&d->lock);
475 INIT_LIST_HEAD(&d->rq_list);
476 skb_queue_head_init(&d->skbpool);
477 timer_setup(&d->timer, dummy_timer, 0);
478 d->timer.expires = jiffies + HZ;
479 add_timer(&d->timer);
480 d->bufpool = NULL; /* defer to aoeblk_gdalloc */
481 d->tgt = d->targets;
482 d->ref = 1;
484 INIT_LIST_HEAD(&d->factive[i]);
485 INIT_LIST_HEAD(&d->rexmitq);
486 d->sysminor = sysminor;
487 d->aoemajor = maj;
488 d->aoeminor = min;
489 d->rttavg = RTTAVG_INIT;
490 d->rttdev = RTTDEV_INIT;
491 d->next = devlist;
492 devlist = d;
495 return d;
499 freetgt(struct aoedev *d, struct aoetgt *t)
505 for (ifp = t->ifs; ifp < &t->ifs[NAOEIFS]; ++ifp) {
506 if (!ifp->nd)
508 dev_put(ifp->nd);
511 head = &t->ffree;
515 skbfree(f->skb);