Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/dtor/input
[pandora-kernel.git] / drivers / block / aoe / aoecmd.c
index f2b8f55..8d17d8d 100644 (file)
@@ -30,8 +30,6 @@ new_skb(ulong len)
                skb->nh.raw = skb->mac.raw = skb->data;
                skb->protocol = __constant_htons(ETH_P_AOE);
                skb->priority = 0;
-               skb_put(skb, len);
-               memset(skb->head, 0, len);
                skb->next = skb->prev = NULL;
 
                /* tell the network layer not to perform IP checksums
@@ -122,8 +120,8 @@ aoecmd_ata_rw(struct aoedev *d, struct frame *f)
        skb = f->skb;
        h = (struct aoe_hdr *) skb->mac.raw;
        ah = (struct aoe_atahdr *) (h+1);
-       skb->len = sizeof *h + sizeof *ah;
-       memset(h, 0, ETH_ZLEN);
+       skb_put(skb, sizeof *h + sizeof *ah);
+       memset(h, 0, skb->len);
        f->tag = aoehdr_atainit(d, h);
        f->waited = 0;
        f->buf = buf;
@@ -149,7 +147,6 @@ aoecmd_ata_rw(struct aoedev *d, struct frame *f)
                skb->len += bcnt;
                skb->data_len = bcnt;
        } else {
-               skb->len = ETH_ZLEN;
                writebit = 0;
        }
 
@@ -159,13 +156,14 @@ aoecmd_ata_rw(struct aoedev *d, struct frame *f)
        buf->nframesout += 1;
        buf->bufaddr += bcnt;
        buf->bv_resid -= bcnt;
-/* dprintk("bv_resid=%ld\n", buf->bv_resid); */
+/* printk(KERN_DEBUG "aoe: bv_resid=%ld\n", buf->bv_resid); */
        buf->resid -= bcnt;
        buf->sector += bcnt >> 9;
        if (buf->resid == 0) {
                d->inprocess = NULL;
        } else if (buf->bv_resid == 0) {
                buf->bv++;
+               WARN_ON(buf->bv->bv_len == 0);
                buf->bv_resid = buf->bv->bv_len;
                buf->bufaddr = page_address(buf->bv->bv_page) + buf->bv->bv_offset;
        }
@@ -202,9 +200,10 @@ aoecmd_cfg_pkts(ushort aoemajor, unsigned char aoeminor, struct sk_buff **tail)
 
                skb = new_skb(sizeof *h + sizeof *ch);
                if (skb == NULL) {
-                       iprintk("skb alloc failure\n");
+                       printk(KERN_INFO "aoe: skb alloc failure\n");
                        continue;
                }
+               skb_put(skb, sizeof *h + sizeof *ch);
                skb->dev = ifp;
                if (sl_tail == NULL)
                        sl_tail = skb;
@@ -242,6 +241,7 @@ freeframe(struct aoedev *d)
                        continue;
                if (atomic_read(&skb_shinfo(f->skb)->dataref) == 1) {
                        skb_shinfo(f->skb)->nr_frags = f->skb->data_len = 0;
+                       skb_trim(f->skb, 0);
                        return f;
                }
                n++;
@@ -275,7 +275,7 @@ loop:
                        return;
                buf = container_of(d->bufq.next, struct buf, bufs);
                list_del(d->bufq.next);
-/*dprintk("bi_size=%ld\n", buf->bio->bi_size); */
+/*printk(KERN_DEBUG "aoe: bi_size=%ld\n", buf->bio->bi_size); */
                d->inprocess = buf;
        }
        aoecmd_ata_rw(d, f);
@@ -318,7 +318,7 @@ rexmit(struct aoedev *d, struct frame *f)
                }
                if (++d->lostjumbo > (d->nframes << 1))
                if (d->maxbcnt != DEFAULTBCNT) {
-                       iprintk("e%ld.%ld: too many lost jumbo on %s - using 1KB frames.\n",
+                       printk(KERN_INFO "aoe: e%ld.%ld: too many lost jumbo on %s - using 1KB frames.\n",
                                d->aoemajor, d->aoeminor, d->ifp->name);
                        d->maxbcnt = DEFAULTBCNT;
                        d->flags |= DEVFL_MAXBCNT;
@@ -407,9 +407,9 @@ rexmit_timer(ulong vp)
 /* this function performs work that has been deferred until sleeping is OK
  */
 void
-aoecmd_sleepwork(void *vp)
+aoecmd_sleepwork(struct work_struct *work)
 {
-       struct aoedev *d = (struct aoedev *) vp;
+       struct aoedev *d = container_of(work, struct aoedev, work);
 
        if (d->flags & DEVFL_GDALLOC)
                aoeblk_gdalloc(d);
@@ -471,7 +471,7 @@ ataid_complete(struct aoedev *d, unsigned char *id)
        }
 
        if (d->ssize != ssize)
-               iprintk("%012llx e%lu.%lu v%04x has %llu sectors\n",
+               printk(KERN_INFO "aoe: %012llx e%lu.%lu v%04x has %llu sectors\n",
                        (unsigned long long)mac_addr(d->addr),
                        d->aoemajor, d->aoeminor,
                        d->fw_ver, (long long)ssize);
@@ -482,7 +482,7 @@ ataid_complete(struct aoedev *d, unsigned char *id)
                d->flags |= DEVFL_NEWSIZE;
        } else {
                if (d->flags & DEVFL_GDALLOC) {
-                       eprintk("can't schedule work for e%lu.%lu, %s\n",
+                       printk(KERN_ERR "aoe: can't schedule work for e%lu.%lu, %s\n",
                               d->aoemajor, d->aoeminor,
                               "it's already on!  This shouldn't happen.\n");
                        return;
@@ -530,7 +530,7 @@ aoecmd_ata_rsp(struct sk_buff *skb)
        u16 aoemajor;
 
        hin = (struct aoe_hdr *) skb->mac.raw;
-       aoemajor = be16_to_cpu(hin->major);
+       aoemajor = be16_to_cpu(get_unaligned(&hin->major));
        d = aoedev_by_aoeaddr(aoemajor, hin->minor);
        if (d == NULL) {
                snprintf(ebuf, sizeof ebuf, "aoecmd_ata_rsp: ata response "
@@ -542,7 +542,7 @@ aoecmd_ata_rsp(struct sk_buff *skb)
 
        spin_lock_irqsave(&d->lock, flags);
 
-       n = be32_to_cpu(hin->tag);
+       n = be32_to_cpu(get_unaligned(&hin->tag));
        f = getframe(d, n);
        if (f == NULL) {
                calc_rttavg(d, -tsince(n));
@@ -550,9 +550,9 @@ aoecmd_ata_rsp(struct sk_buff *skb)
                snprintf(ebuf, sizeof ebuf,
                        "%15s e%d.%d    tag=%08x@%08lx\n",
                        "unexpected rsp",
-                       be16_to_cpu(hin->major),
+                       be16_to_cpu(get_unaligned(&hin->major)),
                        hin->minor,
-                       be32_to_cpu(hin->tag),
+                       be32_to_cpu(get_unaligned(&hin->tag)),
                        jiffies);
                aoechr_error(ebuf);
                return;
@@ -568,7 +568,8 @@ aoecmd_ata_rsp(struct sk_buff *skb)
        if (ahout->cmdstat == WIN_IDENTIFY)
                d->flags &= ~DEVFL_PAUSE;
        if (ahin->cmdstat & 0xa9) {     /* these bits cleared on success */
-               eprintk("ata error cmd=%2.2Xh stat=%2.2Xh from e%ld.%ld\n",
+               printk(KERN_ERR
+                       "aoe: ata error cmd=%2.2Xh stat=%2.2Xh from e%ld.%ld\n",
                        ahout->cmdstat, ahin->cmdstat,
                        d->aoemajor, d->aoeminor);
                if (buf)
@@ -579,7 +580,8 @@ aoecmd_ata_rsp(struct sk_buff *skb)
                case WIN_READ:
                case WIN_READ_EXT:
                        if (skb->len - sizeof *hin - sizeof *ahin < n) {
-                               eprintk("runt data size in read.  skb->len=%d\n",
+                               printk(KERN_ERR
+                                       "aoe: runt data size in read.  skb->len=%d\n",
                                        skb->len);
                                /* fail frame f?  just returning will rexmit. */
                                spin_unlock_irqrestore(&d->lock, flags);
@@ -617,7 +619,8 @@ aoecmd_ata_rsp(struct sk_buff *skb)
                        break;
                case WIN_IDENTIFY:
                        if (skb->len - sizeof *hin - sizeof *ahin < 512) {
-                               iprintk("runt data size in ataid.  skb->len=%d\n",
+                               printk(KERN_INFO
+                                       "aoe: runt data size in ataid.  skb->len=%d\n",
                                        skb->len);
                                spin_unlock_irqrestore(&d->lock, flags);
                                return;
@@ -625,9 +628,10 @@ aoecmd_ata_rsp(struct sk_buff *skb)
                        ataid_complete(d, (char *) (ahin+1));
                        break;
                default:
-                       iprintk("unrecognized ata command %2.2Xh for %d.%d\n",
+                       printk(KERN_INFO
+                               "aoe: unrecognized ata command %2.2Xh for %d.%d\n",
                                ahout->cmdstat,
-                               be16_to_cpu(hin->major),
+                               be16_to_cpu(get_unaligned(&hin->major)),
                                hin->minor);
                }
        }
@@ -685,7 +689,7 @@ aoecmd_ata_id(struct aoedev *d)
 
        f = freeframe(d);
        if (f == NULL) {
-               eprintk("can't get a frame. This shouldn't happen.\n");
+               printk(KERN_ERR "aoe: can't get a frame. This shouldn't happen.\n");
                return NULL;
        }
 
@@ -693,8 +697,8 @@ aoecmd_ata_id(struct aoedev *d)
        skb = f->skb;
        h = (struct aoe_hdr *) skb->mac.raw;
        ah = (struct aoe_atahdr *) (h+1);
-       skb->len = ETH_ZLEN;
-       memset(h, 0, ETH_ZLEN);
+       skb_put(skb, sizeof *h + sizeof *ah);
+       memset(h, 0, skb->len);
        f->tag = aoehdr_atainit(d, h);
        f->waited = 0;
 
@@ -729,16 +733,16 @@ aoecmd_cfg_rsp(struct sk_buff *skb)
         * Enough people have their dip switches set backwards to
         * warrant a loud message for this special case.
         */
-       aoemajor = be16_to_cpu(h->major);
+       aoemajor = be16_to_cpu(get_unaligned(&h->major));
        if (aoemajor == 0xfff) {
-               eprintk("Warning: shelf address is all ones.  "
+               printk(KERN_ERR "aoe: Warning: shelf address is all ones.  "
                        "Check shelf dip switches.\n");
                return;
        }
 
        sysminor = SYSMINOR(aoemajor, h->minor);
        if (sysminor * AOE_PARTITIONS + AOE_PARTITIONS > MINORMASK) {
-               iprintk("e%ld.%d: minor number too large\n",
+               printk(KERN_INFO "aoe: e%ld.%d: minor number too large\n",
                        aoemajor, (int) h->minor);
                return;
        }
@@ -749,7 +753,7 @@ aoecmd_cfg_rsp(struct sk_buff *skb)
 
        d = aoedev_by_sysminor_m(sysminor, n);
        if (d == NULL) {
-               iprintk("device sysminor_m failure\n");
+               printk(KERN_INFO "aoe: device sysminor_m failure\n");
                return;
        }
 
@@ -766,7 +770,8 @@ aoecmd_cfg_rsp(struct sk_buff *skb)
                        n = ch->scnt;
                n = n ? n * 512 : DEFAULTBCNT;
                if (n != d->maxbcnt) {
-                       iprintk("e%ld.%ld: setting %d byte data frames on %s\n",
+                       printk(KERN_INFO
+                               "aoe: e%ld.%ld: setting %d byte data frames on %s\n",
                                d->aoemajor, d->aoeminor, n, d->ifp->name);
                        d->maxbcnt = n;
                }