Lines Matching full:d
70 aoehdr_atainit(struct aoedev *d, struct aoetgt *t, struct aoe_hdr *h) in aoehdr_atainit() argument
78 h->major = cpu_to_be16(d->aoemajor); in aoehdr_atainit()
79 h->minor = d->aoeminor; in aoehdr_atainit()
110 skb_pool_put(struct aoedev *d, struct sk_buff *skb) in skb_pool_put() argument
112 __skb_queue_tail(&d->skbpool, skb); in skb_pool_put()
116 skb_pool_get(struct aoedev *d) in skb_pool_get() argument
118 struct sk_buff *skb = skb_peek(&d->skbpool); in skb_pool_get()
121 __skb_unlink(skb, &d->skbpool); in skb_pool_get()
124 if (skb_queue_len(&d->skbpool) < NSKBPOOLMAX && in skb_pool_get()
133 freeframe(struct aoedev *d) in freeframe() argument
139 if (d->targets[0] == NULL) { /* shouldn't happen, but I'm paranoid */ in freeframe()
143 t = d->tgt; in freeframe()
145 if (t >= &d->targets[NTARGETS] || !*t) in freeframe()
146 t = d->targets; in freeframe()
149 && t != d->htgt in freeframe()
169 d->tgt = t; in freeframe()
181 d->flags |= DEVFL_KICKME; in freeframe()
184 skb = skb_pool_get(d); in freeframe()
186 skb_pool_put(d, f->skb); in freeframe()
192 d->flags |= DEVFL_KICKME; in freeframe()
194 if (t == d->tgt) /* we've looped and found nada */ in freeframe()
197 if (t >= &d->targets[NTARGETS] || !*t) in freeframe()
198 t = d->targets; in freeframe()
204 aoecmd_ata_rw(struct aoedev *d) in aoecmd_ata_rw() argument
219 f = freeframe(d); in aoecmd_ata_rw()
222 t = *d->tgt; in aoecmd_ata_rw()
223 buf = d->inprocess; in aoecmd_ata_rw()
236 f->tag = aoehdr_atainit(d, t, h); in aoecmd_ata_rw()
247 if (d->flags & DEVFL_EXT) { in aoecmd_ata_rw()
274 d->inprocess = NULL; in aoecmd_ata_rw()
285 __skb_queue_tail(&d->sendq, skb); in aoecmd_ata_rw()
332 resend(struct aoedev *d, struct aoetgt *t, struct frame *f) in resend() argument
347 "%15s e%ld.%d oldtag=%08x@%08lx newtag=%08x s=%pm d=%pm nout=%d\n", in resend()
348 "retransmit", d->aoemajor, d->aoeminor, f->tag, jiffies, n, in resend()
381 __skb_queue_tail(&d->sendq, skb); in resend()
437 sthtith(struct aoedev *d) in sthtith() argument
441 struct aoetgt *ht = *d->htgt; in sthtith()
448 nf = freeframe(d); in sthtith()
457 (*d->tgt)->nout++; in sthtith()
458 resend(d, *d->tgt, nf); in sthtith()
462 d->htgt = NULL; in sthtith()
480 struct aoedev *d; in rexmit_timer() local
487 d = (struct aoedev *) vp; in rexmit_timer()
490 timeout = d->rttavg; in rexmit_timer()
493 spin_lock_irqsave(&d->lock, flags); in rexmit_timer()
495 if (d->flags & DEVFL_TKILL) { in rexmit_timer()
496 spin_unlock_irqrestore(&d->lock, flags); in rexmit_timer()
499 tt = d->targets; in rexmit_timer()
513 aoedev_downdev(d); in rexmit_timer()
518 && (tt != d->targets || d->targets[1])) in rexmit_timer()
519 d->htgt = tt; in rexmit_timer()
538 "aoe: e%ld.%d: " in rexmit_timer()
541 "falling back to %d frames.\n", in rexmit_timer()
542 d->aoemajor, d->aoeminor, in rexmit_timer()
547 resend(d, t, f); in rexmit_timer()
559 if (!skb_queue_empty(&d->sendq)) { in rexmit_timer()
560 n = d->rttavg <<= 1; in rexmit_timer()
562 d->rttavg = MAXTIMER; in rexmit_timer()
565 if (d->flags & DEVFL_KICKME || d->htgt) { in rexmit_timer()
566 d->flags &= ~DEVFL_KICKME; in rexmit_timer()
567 aoecmd_work(d); in rexmit_timer()
571 skb_queue_splice_init(&d->sendq, &queue); in rexmit_timer()
573 d->timer.expires = jiffies + TIMERTICK; in rexmit_timer()
574 add_timer(&d->timer); in rexmit_timer()
576 spin_unlock_irqrestore(&d->lock, flags); in rexmit_timer()
581 /* enters with d->lock held */
583 aoecmd_work(struct aoedev *d) in aoecmd_work() argument
587 if (d->htgt && !sthtith(d)) in aoecmd_work()
589 if (d->inprocess == NULL) { in aoecmd_work()
590 if (list_empty(&d->bufq)) in aoecmd_work()
592 buf = container_of(d->bufq.next, struct buf, bufs); in aoecmd_work()
593 list_del(d->bufq.next); in aoecmd_work()
594 d->inprocess = buf; in aoecmd_work()
596 if (aoecmd_ata_rw(d)) in aoecmd_work()
605 struct aoedev *d = container_of(work, struct aoedev, work); in aoecmd_sleepwork() local
607 if (d->flags & DEVFL_GDALLOC) in aoecmd_sleepwork()
608 aoeblk_gdalloc(d); in aoecmd_sleepwork()
610 if (d->flags & DEVFL_NEWSIZE) { in aoecmd_sleepwork()
615 ssize = get_capacity(d->gd); in aoecmd_sleepwork()
616 bd = bdget_disk(d->gd, 0); in aoecmd_sleepwork()
624 spin_lock_irqsave(&d->lock, flags); in aoecmd_sleepwork()
625 d->flags |= DEVFL_UP; in aoecmd_sleepwork()
626 d->flags &= ~DEVFL_NEWSIZE; in aoecmd_sleepwork()
627 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_sleepwork()
632 ataid_complete(struct aoedev *d, struct aoetgt *t, unsigned char *id) in ataid_complete() argument
644 d->flags |= DEVFL_EXT; in ataid_complete()
650 d->geo.cylinders = ssize; in ataid_complete()
651 d->geo.cylinders /= (255 * 63); in ataid_complete()
652 d->geo.heads = 255; in ataid_complete()
653 d->geo.sectors = 63; in ataid_complete()
655 d->flags &= ~DEVFL_EXT; in ataid_complete()
661 d->geo.cylinders = get_unaligned_le16(&id[54 << 1]); in ataid_complete()
662 d->geo.heads = get_unaligned_le16(&id[55 << 1]); in ataid_complete()
663 d->geo.sectors = get_unaligned_le16(&id[56 << 1]); in ataid_complete()
666 if (d->ssize != ssize) in ataid_complete()
668 "aoe: %pm e%ld.%d v%04x has %llu sectors\n", in ataid_complete()
670 d->aoemajor, d->aoeminor, in ataid_complete()
671 d->fw_ver, (long long)ssize); in ataid_complete()
672 d->ssize = ssize; in ataid_complete()
673 d->geo.start = 0; in ataid_complete()
674 if (d->flags & (DEVFL_GDALLOC|DEVFL_NEWSIZE)) in ataid_complete()
676 if (d->gd != NULL) { in ataid_complete()
677 set_capacity(d->gd, ssize); in ataid_complete()
678 d->flags |= DEVFL_NEWSIZE; in ataid_complete()
680 d->flags |= DEVFL_GDALLOC; in ataid_complete()
681 schedule_work(&d->work); in ataid_complete()
685 calc_rttavg(struct aoedev *d, int rtt) in calc_rttavg() argument
696 d->mintimer += (n - d->mintimer) >> 1; in calc_rttavg()
697 } else if (n < d->mintimer) in calc_rttavg()
698 n = d->mintimer; in calc_rttavg()
703 n -= d->rttavg; in calc_rttavg()
704 d->rttavg += n >> 2; in calc_rttavg()
708 gettgt(struct aoedev *d, char *addr) in gettgt() argument
712 t = d->targets; in gettgt()
743 struct aoedev *d; in aoecmd_ata_rsp() local
757 d = aoedev_by_aoeaddr(aoemajor, hin->minor); in aoecmd_ata_rsp()
758 if (d == NULL) { in aoecmd_ata_rsp()
760 "for unknown device %d.%d\n", in aoecmd_ata_rsp()
766 spin_lock_irqsave(&d->lock, flags); in aoecmd_ata_rsp()
769 t = gettgt(d, hin->src); in aoecmd_ata_rsp()
771 printk(KERN_INFO "aoe: can't find target e%ld.%d:%pm\n", in aoecmd_ata_rsp()
772 d->aoemajor, d->aoeminor, hin->src); in aoecmd_ata_rsp()
773 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_ata_rsp()
778 calc_rttavg(d, -tsince(n)); in aoecmd_ata_rsp()
779 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_ata_rsp()
781 "%15s e%d.%d tag=%08x@%08lx\n", in aoecmd_ata_rsp()
791 calc_rttavg(d, tsince(f->tag)); in aoecmd_ata_rsp()
800 "aoe: ata error cmd=%2.2Xh stat=%2.2Xh from e%ld.%d\n", in aoecmd_ata_rsp()
802 d->aoemajor, d->aoeminor); in aoecmd_ata_rsp()
806 if (d->htgt && t == *d->htgt) /* I'll help myself, thank you. */ in aoecmd_ata_rsp()
807 d->htgt = NULL; in aoecmd_ata_rsp()
814 "aoe: %s. skb->len=%d need=%ld\n", in aoecmd_ata_rsp()
817 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_ata_rsp()
832 resend(d, t, f); in aoecmd_ata_rsp()
839 "aoe: runt data size in ataid. skb->len=%d\n", in aoecmd_ata_rsp()
841 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_ata_rsp()
844 ataid_complete(d, t, (char *) (ahin+1)); in aoecmd_ata_rsp()
848 "aoe: unrecognized ata command %2.2Xh for %d.%d\n", in aoecmd_ata_rsp()
856 diskstats(d->gd, buf->bio, jiffies - buf->stime, buf->sector); in aoecmd_ata_rsp()
863 mempool_free(buf, d->bufpool); in aoecmd_ata_rsp()
870 aoecmd_work(d); in aoecmd_ata_rsp()
873 skb_queue_splice_init(&d->sendq, &queue); in aoecmd_ata_rsp()
875 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_ata_rsp()
890 aoecmd_ata_id(struct aoedev *d) in aoecmd_ata_id() argument
898 f = freeframe(d); in aoecmd_ata_id()
902 t = *d->tgt; in aoecmd_ata_id()
910 f->tag = aoehdr_atainit(d, t, h); in aoecmd_ata_id()
921 d->rttavg = MAXTIMER; in aoecmd_ata_id()
922 d->timer.function = rexmit_timer; in aoecmd_ata_id()
928 addtgt(struct aoedev *d, char *addr, ulong nframes) in addtgt() argument
933 tt = d->targets; in addtgt()
966 struct aoedev *d; in aoecmd_cfg_rsp() local
991 printk(KERN_INFO "aoe: e%ld.%d: minor number too large\n", in aoecmd_cfg_rsp()
1000 d = aoedev_by_sysminor_m(sysminor); in aoecmd_cfg_rsp()
1001 if (d == NULL) { in aoecmd_cfg_rsp()
1006 spin_lock_irqsave(&d->lock, flags); in aoecmd_cfg_rsp()
1008 t = gettgt(d, h->src); in aoecmd_cfg_rsp()
1010 t = addtgt(d, h->src, n); in aoecmd_cfg_rsp()
1012 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_cfg_rsp()
1023 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_cfg_rsp()
1036 "aoe: e%ld.%d: setting %d%s%s:%pm\n", in aoecmd_cfg_rsp()
1037 d->aoemajor, d->aoeminor, n, in aoecmd_cfg_rsp()
1045 if (d->nopen) { in aoecmd_cfg_rsp()
1046 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_cfg_rsp()
1049 d->fw_ver = be16_to_cpu(ch->fwver); in aoecmd_cfg_rsp()
1051 sl = aoecmd_ata_id(d); in aoecmd_cfg_rsp()
1053 spin_unlock_irqrestore(&d->lock, flags); in aoecmd_cfg_rsp()
1064 aoecmd_cleanslate(struct aoedev *d) in aoecmd_cleanslate() argument
1069 d->mintimer = MINTIMER; in aoecmd_cleanslate()
1071 t = d->targets; in aoecmd_cleanslate()