diff --git a/drivers/block/aoe/aoe.h b/drivers/block/aoe/aoe.h index 7b694f7da2de2529a0032ebc3a67b906d3be2fa4..4ae2468b4a06a44395e503e67d131b40c1720d99 100644 --- a/drivers/block/aoe/aoe.h +++ b/drivers/block/aoe/aoe.h @@ -49,8 +49,6 @@ struct aoe_hdr { __be32 tag; }; -#define AOE_MAXSHELF (0xffff-1) /* one less than the broadcast shelf address */ - struct aoe_atahdr { unsigned char aflags; unsigned char errfeat; diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c index 94e810c36de1e46fea74c30d7427201d47f41380..3804a0af3ef192c441643eee425d06f747b86d97 100644 --- a/drivers/block/aoe/aoecmd.c +++ b/drivers/block/aoe/aoecmd.c @@ -1349,15 +1349,14 @@ aoecmd_cfg_rsp(struct sk_buff *skb) "Check shelf dip switches.\n"); return; } - if (aoemajor > AOE_MAXSHELF) { - pr_info("aoe: e%ld.%d: shelf number too large\n", + if (aoemajor == 0xffff) { + pr_info("aoe: e%ld.%d: broadcast shelf number invalid\n", aoemajor, (int) h->minor); return; } - - d = aoedev_by_aoeaddr(aoemajor, h->minor, 1); - if (d == NULL) { - pr_info("aoe: device allocation failure\n"); + if (h->minor == 0xff) { + pr_info("aoe: e%ld.%d: broadcast slot number invalid\n", + aoemajor, (int) h->minor); return; } @@ -1365,6 +1364,12 @@ aoecmd_cfg_rsp(struct sk_buff *skb) if (n > aoe_maxout) /* keep it reasonable */ n = aoe_maxout; + d = aoedev_by_aoeaddr(aoemajor, h->minor, 1); + if (d == NULL) { + pr_info("aoe: device allocation failure\n"); + return; + } + spin_lock_irqsave(&d->lock, flags); t = gettgt(d, h->src);