aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorEd L. Cashin <ecashin@coraid.com>2006-09-20 14:36:51 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2006-10-18 15:53:51 -0400
commita12c93f08b8fc83b7fcdabaf92b1adcea7489f5e (patch)
tree493fb94c32f45b5f1c8109c7ce170f653cb5c3d5 /drivers
parent086216db1435f44a58c18454acfa59f013510c95 (diff)
aoe: revert printk macros
This patch addresses the concern that the aoe driver should not introduce unecessary conventions that must be learned by the reader. It reverts patch 6. Signed-off-by: "Ed L. Cashin" <ecashin@coraid.com> Acked-by: Alan Cox <alan@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/block/aoe/aoe.h5
-rw-r--r--drivers/block/aoe/aoeblk.c11
-rw-r--r--drivers/block/aoe/aoechr.c11
-rw-r--r--drivers/block/aoe/aoecmd.c35
-rw-r--r--drivers/block/aoe/aoedev.c2
-rw-r--r--drivers/block/aoe/aoemain.c6
-rw-r--r--drivers/block/aoe/aoenet.c6
7 files changed, 39 insertions, 37 deletions
diff --git a/drivers/block/aoe/aoe.h b/drivers/block/aoe/aoe.h
index 188bf09876d9..6d111228cfac 100644
--- a/drivers/block/aoe/aoe.h
+++ b/drivers/block/aoe/aoe.h
@@ -10,11 +10,6 @@
10#define AOE_PARTITIONS (16) 10#define AOE_PARTITIONS (16)
11#endif 11#endif
12 12
13#define xprintk(L, fmt, arg...) printk(L "aoe: " "%s: " fmt, __func__, ## arg)
14#define iprintk(fmt, arg...) xprintk(KERN_INFO, fmt, ## arg)
15#define eprintk(fmt, arg...) xprintk(KERN_ERR, fmt, ## arg)
16#define dprintk(fmt, arg...) xprintk(KERN_DEBUG, fmt, ## arg)
17
18#define SYSMINOR(aoemajor, aoeminor) ((aoemajor) * NPERSHELF + (aoeminor)) 13#define SYSMINOR(aoemajor, aoeminor) ((aoemajor) * NPERSHELF + (aoeminor))
19#define AOEMAJOR(sysminor) ((sysminor) / NPERSHELF) 14#define AOEMAJOR(sysminor) ((sysminor) / NPERSHELF)
20#define AOEMINOR(sysminor) ((sysminor) % NPERSHELF) 15#define AOEMINOR(sysminor) ((sysminor) % NPERSHELF)
diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
index 088acf48ffa4..4259b52b01e2 100644
--- a/drivers/block/aoe/aoeblk.c
+++ b/drivers/block/aoe/aoeblk.c
@@ -131,7 +131,7 @@ aoeblk_make_request(request_queue_t *q, struct bio *bio)
131 d = bio->bi_bdev->bd_disk->private_data; 131 d = bio->bi_bdev->bd_disk->private_data;
132 buf = mempool_alloc(d->bufpool, GFP_NOIO); 132 buf = mempool_alloc(d->bufpool, GFP_NOIO);
133 if (buf == NULL) { 133 if (buf == NULL) {
134 iprintk("buf allocation failure\n"); 134 printk(KERN_INFO "aoe: buf allocation failure\n");
135 bio_endio(bio, bio->bi_size, -ENOMEM); 135 bio_endio(bio, bio->bi_size, -ENOMEM);
136 return 0; 136 return 0;
137 } 137 }
@@ -149,7 +149,8 @@ aoeblk_make_request(request_queue_t *q, struct bio *bio)
149 spin_lock_irqsave(&d->lock, flags); 149 spin_lock_irqsave(&d->lock, flags);
150 150
151 if ((d->flags & DEVFL_UP) == 0) { 151 if ((d->flags & DEVFL_UP) == 0) {
152 iprintk("device %ld.%ld is not up\n", d->aoemajor, d->aoeminor); 152 printk(KERN_INFO "aoe: device %ld.%ld is not up\n",
153 d->aoemajor, d->aoeminor);
153 spin_unlock_irqrestore(&d->lock, flags); 154 spin_unlock_irqrestore(&d->lock, flags);
154 mempool_free(buf, d->bufpool); 155 mempool_free(buf, d->bufpool);
155 bio_endio(bio, bio->bi_size, -ENXIO); 156 bio_endio(bio, bio->bi_size, -ENXIO);
@@ -174,7 +175,7 @@ aoeblk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
174 struct aoedev *d = bdev->bd_disk->private_data; 175 struct aoedev *d = bdev->bd_disk->private_data;
175 176
176 if ((d->flags & DEVFL_UP) == 0) { 177 if ((d->flags & DEVFL_UP) == 0) {
177 eprintk("disk not up\n"); 178 printk(KERN_ERR "aoe: disk not up\n");
178 return -ENODEV; 179 return -ENODEV;
179 } 180 }
180 181
@@ -201,7 +202,7 @@ aoeblk_gdalloc(void *vp)
201 202
202 gd = alloc_disk(AOE_PARTITIONS); 203 gd = alloc_disk(AOE_PARTITIONS);
203 if (gd == NULL) { 204 if (gd == NULL) {
204 eprintk("cannot allocate disk structure for %ld.%ld\n", 205 printk(KERN_ERR "aoe: cannot allocate disk structure for %ld.%ld\n",
205 d->aoemajor, d->aoeminor); 206 d->aoemajor, d->aoeminor);
206 spin_lock_irqsave(&d->lock, flags); 207 spin_lock_irqsave(&d->lock, flags);
207 d->flags &= ~DEVFL_GDALLOC; 208 d->flags &= ~DEVFL_GDALLOC;
@@ -211,7 +212,7 @@ aoeblk_gdalloc(void *vp)
211 212
212 d->bufpool = mempool_create_slab_pool(MIN_BUFS, buf_pool_cache); 213 d->bufpool = mempool_create_slab_pool(MIN_BUFS, buf_pool_cache);
213 if (d->bufpool == NULL) { 214 if (d->bufpool == NULL) {
214 eprintk("cannot allocate bufpool for %ld.%ld\n", 215 printk(KERN_ERR "aoe: cannot allocate bufpool for %ld.%ld\n",
215 d->aoemajor, d->aoeminor); 216 d->aoemajor, d->aoeminor);
216 put_disk(gd); 217 put_disk(gd);
217 spin_lock_irqsave(&d->lock, flags); 218 spin_lock_irqsave(&d->lock, flags);
diff --git a/drivers/block/aoe/aoechr.c b/drivers/block/aoe/aoechr.c
index f5cab69fbc91..e22b4c9520a9 100644
--- a/drivers/block/aoe/aoechr.c
+++ b/drivers/block/aoe/aoechr.c
@@ -55,7 +55,8 @@ static int
55interfaces(const char __user *str, size_t size) 55interfaces(const char __user *str, size_t size)
56{ 56{
57 if (set_aoe_iflist(str, size)) { 57 if (set_aoe_iflist(str, size)) {
58 eprintk("could not set interface list: too many interfaces\n"); 58 printk(KERN_ERR
59 "aoe: could not set interface list: too many interfaces\n");
59 return -EINVAL; 60 return -EINVAL;
60 } 61 }
61 return 0; 62 return 0;
@@ -78,7 +79,7 @@ revalidate(const char __user *str, size_t size)
78 /* should be e%d.%d format */ 79 /* should be e%d.%d format */
79 n = sscanf(buf, "e%d.%d", &major, &minor); 80 n = sscanf(buf, "e%d.%d", &major, &minor);
80 if (n != 2) { 81 if (n != 2) {
81 eprintk("invalid device specification\n"); 82 printk(KERN_ERR "aoe: invalid device specification\n");
82 return -EINVAL; 83 return -EINVAL;
83 } 84 }
84 d = aoedev_by_aoeaddr(major, minor); 85 d = aoedev_by_aoeaddr(major, minor);
@@ -113,7 +114,7 @@ bail: spin_unlock_irqrestore(&emsgs_lock, flags);
113 114
114 mp = kmalloc(n, GFP_ATOMIC); 115 mp = kmalloc(n, GFP_ATOMIC);
115 if (mp == NULL) { 116 if (mp == NULL) {
116 eprintk("allocation failure, len=%ld\n", n); 117 printk(KERN_ERR "aoe: allocation failure, len=%ld\n", n);
117 goto bail; 118 goto bail;
118 } 119 }
119 120
@@ -138,7 +139,7 @@ aoechr_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *offp
138 139
139 switch ((unsigned long) filp->private_data) { 140 switch ((unsigned long) filp->private_data) {
140 default: 141 default:
141 iprintk("can't write to that file.\n"); 142 printk(KERN_INFO "aoe: can't write to that file.\n");
142 break; 143 break;
143 case MINOR_DISCOVER: 144 case MINOR_DISCOVER:
144 ret = discover(); 145 ret = discover();
@@ -247,7 +248,7 @@ aoechr_init(void)
247 248
248 n = register_chrdev(AOE_MAJOR, "aoechr", &aoe_fops); 249 n = register_chrdev(AOE_MAJOR, "aoechr", &aoe_fops);
249 if (n < 0) { 250 if (n < 0) {
250 eprintk("can't register char device\n"); 251 printk(KERN_ERR "aoe: can't register char device\n");
251 return n; 252 return n;
252 } 253 }
253 sema_init(&emsgs_sema, 0); 254 sema_init(&emsgs_sema, 0);
diff --git a/drivers/block/aoe/aoecmd.c b/drivers/block/aoe/aoecmd.c
index 2d0bcdd96698..8a13b1af8bab 100644
--- a/drivers/block/aoe/aoecmd.c
+++ b/drivers/block/aoe/aoecmd.c
@@ -159,7 +159,7 @@ aoecmd_ata_rw(struct aoedev *d, struct frame *f)
159 buf->nframesout += 1; 159 buf->nframesout += 1;
160 buf->bufaddr += bcnt; 160 buf->bufaddr += bcnt;
161 buf->bv_resid -= bcnt; 161 buf->bv_resid -= bcnt;
162/* dprintk("bv_resid=%ld\n", buf->bv_resid); */ 162/* printk(KERN_DEBUG "aoe: bv_resid=%ld\n", buf->bv_resid); */
163 buf->resid -= bcnt; 163 buf->resid -= bcnt;
164 buf->sector += bcnt >> 9; 164 buf->sector += bcnt >> 9;
165 if (buf->resid == 0) { 165 if (buf->resid == 0) {
@@ -203,7 +203,7 @@ aoecmd_cfg_pkts(ushort aoemajor, unsigned char aoeminor, struct sk_buff **tail)
203 203
204 skb = new_skb(sizeof *h + sizeof *ch); 204 skb = new_skb(sizeof *h + sizeof *ch);
205 if (skb == NULL) { 205 if (skb == NULL) {
206 iprintk("skb alloc failure\n"); 206 printk(KERN_INFO "aoe: skb alloc failure\n");
207 continue; 207 continue;
208 } 208 }
209 skb->dev = ifp; 209 skb->dev = ifp;
@@ -276,7 +276,7 @@ loop:
276 return; 276 return;
277 buf = container_of(d->bufq.next, struct buf, bufs); 277 buf = container_of(d->bufq.next, struct buf, bufs);
278 list_del(d->bufq.next); 278 list_del(d->bufq.next);
279/*dprintk("bi_size=%ld\n", buf->bio->bi_size); */ 279/*printk(KERN_DEBUG "aoe: bi_size=%ld\n", buf->bio->bi_size); */
280 d->inprocess = buf; 280 d->inprocess = buf;
281 } 281 }
282 aoecmd_ata_rw(d, f); 282 aoecmd_ata_rw(d, f);
@@ -319,7 +319,7 @@ rexmit(struct aoedev *d, struct frame *f)
319 } 319 }
320 if (++d->lostjumbo > (d->nframes << 1)) 320 if (++d->lostjumbo > (d->nframes << 1))
321 if (d->maxbcnt != DEFAULTBCNT) { 321 if (d->maxbcnt != DEFAULTBCNT) {
322 iprintk("e%ld.%ld: too many lost jumbo on %s - using 1KB frames.\n", 322 printk(KERN_INFO "aoe: e%ld.%ld: too many lost jumbo on %s - using 1KB frames.\n",
323 d->aoemajor, d->aoeminor, d->ifp->name); 323 d->aoemajor, d->aoeminor, d->ifp->name);
324 d->maxbcnt = DEFAULTBCNT; 324 d->maxbcnt = DEFAULTBCNT;
325 d->flags |= DEVFL_MAXBCNT; 325 d->flags |= DEVFL_MAXBCNT;
@@ -472,7 +472,7 @@ ataid_complete(struct aoedev *d, unsigned char *id)
472 } 472 }
473 473
474 if (d->ssize != ssize) 474 if (d->ssize != ssize)
475 iprintk("%012llx e%lu.%lu v%04x has %llu sectors\n", 475 printk(KERN_INFO "aoe: %012llx e%lu.%lu v%04x has %llu sectors\n",
476 (unsigned long long)mac_addr(d->addr), 476 (unsigned long long)mac_addr(d->addr),
477 d->aoemajor, d->aoeminor, 477 d->aoemajor, d->aoeminor,
478 d->fw_ver, (long long)ssize); 478 d->fw_ver, (long long)ssize);
@@ -483,7 +483,7 @@ ataid_complete(struct aoedev *d, unsigned char *id)
483 d->flags |= DEVFL_NEWSIZE; 483 d->flags |= DEVFL_NEWSIZE;
484 } else { 484 } else {
485 if (d->flags & DEVFL_GDALLOC) { 485 if (d->flags & DEVFL_GDALLOC) {
486 eprintk("can't schedule work for e%lu.%lu, %s\n", 486 printk(KERN_ERR "aoe: can't schedule work for e%lu.%lu, %s\n",
487 d->aoemajor, d->aoeminor, 487 d->aoemajor, d->aoeminor,
488 "it's already on! This shouldn't happen.\n"); 488 "it's already on! This shouldn't happen.\n");
489 return; 489 return;
@@ -569,7 +569,8 @@ aoecmd_ata_rsp(struct sk_buff *skb)
569 if (ahout->cmdstat == WIN_IDENTIFY) 569 if (ahout->cmdstat == WIN_IDENTIFY)
570 d->flags &= ~DEVFL_PAUSE; 570 d->flags &= ~DEVFL_PAUSE;
571 if (ahin->cmdstat & 0xa9) { /* these bits cleared on success */ 571 if (ahin->cmdstat & 0xa9) { /* these bits cleared on success */
572 eprintk("ata error cmd=%2.2Xh stat=%2.2Xh from e%ld.%ld\n", 572 printk(KERN_ERR
573 "aoe: ata error cmd=%2.2Xh stat=%2.2Xh from e%ld.%ld\n",
573 ahout->cmdstat, ahin->cmdstat, 574 ahout->cmdstat, ahin->cmdstat,
574 d->aoemajor, d->aoeminor); 575 d->aoemajor, d->aoeminor);
575 if (buf) 576 if (buf)
@@ -580,7 +581,8 @@ aoecmd_ata_rsp(struct sk_buff *skb)
580 case WIN_READ: 581 case WIN_READ:
581 case WIN_READ_EXT: 582 case WIN_READ_EXT:
582 if (skb->len - sizeof *hin - sizeof *ahin < n) { 583 if (skb->len - sizeof *hin - sizeof *ahin < n) {
583 eprintk("runt data size in read. skb->len=%d\n", 584 printk(KERN_ERR
585 "aoe: runt data size in read. skb->len=%d\n",
584 skb->len); 586 skb->len);
585 /* fail frame f? just returning will rexmit. */ 587 /* fail frame f? just returning will rexmit. */
586 spin_unlock_irqrestore(&d->lock, flags); 588 spin_unlock_irqrestore(&d->lock, flags);
@@ -618,7 +620,8 @@ aoecmd_ata_rsp(struct sk_buff *skb)
618 break; 620 break;
619 case WIN_IDENTIFY: 621 case WIN_IDENTIFY:
620 if (skb->len - sizeof *hin - sizeof *ahin < 512) { 622 if (skb->len - sizeof *hin - sizeof *ahin < 512) {
621 iprintk("runt data size in ataid. skb->len=%d\n", 623 printk(KERN_INFO
624 "aoe: runt data size in ataid. skb->len=%d\n",
622 skb->len); 625 skb->len);
623 spin_unlock_irqrestore(&d->lock, flags); 626 spin_unlock_irqrestore(&d->lock, flags);
624 return; 627 return;
@@ -626,7 +629,8 @@ aoecmd_ata_rsp(struct sk_buff *skb)
626 ataid_complete(d, (char *) (ahin+1)); 629 ataid_complete(d, (char *) (ahin+1));
627 break; 630 break;
628 default: 631 default:
629 iprintk("unrecognized ata command %2.2Xh for %d.%d\n", 632 printk(KERN_INFO
633 "aoe: unrecognized ata command %2.2Xh for %d.%d\n",
630 ahout->cmdstat, 634 ahout->cmdstat,
631 be16_to_cpu(hin->major), 635 be16_to_cpu(hin->major),
632 hin->minor); 636 hin->minor);
@@ -686,7 +690,7 @@ aoecmd_ata_id(struct aoedev *d)
686 690
687 f = freeframe(d); 691 f = freeframe(d);
688 if (f == NULL) { 692 if (f == NULL) {
689 eprintk("can't get a frame. This shouldn't happen.\n"); 693 printk(KERN_ERR "aoe: can't get a frame. This shouldn't happen.\n");
690 return NULL; 694 return NULL;
691 } 695 }
692 696
@@ -732,14 +736,14 @@ aoecmd_cfg_rsp(struct sk_buff *skb)
732 */ 736 */
733 aoemajor = be16_to_cpu(h->major); 737 aoemajor = be16_to_cpu(h->major);
734 if (aoemajor == 0xfff) { 738 if (aoemajor == 0xfff) {
735 eprintk("Warning: shelf address is all ones. " 739 printk(KERN_ERR "aoe: Warning: shelf address is all ones. "
736 "Check shelf dip switches.\n"); 740 "Check shelf dip switches.\n");
737 return; 741 return;
738 } 742 }
739 743
740 sysminor = SYSMINOR(aoemajor, h->minor); 744 sysminor = SYSMINOR(aoemajor, h->minor);
741 if (sysminor * AOE_PARTITIONS + AOE_PARTITIONS > MINORMASK) { 745 if (sysminor * AOE_PARTITIONS + AOE_PARTITIONS > MINORMASK) {
742 iprintk("e%ld.%d: minor number too large\n", 746 printk(KERN_INFO "aoe: e%ld.%d: minor number too large\n",
743 aoemajor, (int) h->minor); 747 aoemajor, (int) h->minor);
744 return; 748 return;
745 } 749 }
@@ -750,7 +754,7 @@ aoecmd_cfg_rsp(struct sk_buff *skb)
750 754
751 d = aoedev_by_sysminor_m(sysminor, n); 755 d = aoedev_by_sysminor_m(sysminor, n);
752 if (d == NULL) { 756 if (d == NULL) {
753 iprintk("device sysminor_m failure\n"); 757 printk(KERN_INFO "aoe: device sysminor_m failure\n");
754 return; 758 return;
755 } 759 }
756 760
@@ -767,7 +771,8 @@ aoecmd_cfg_rsp(struct sk_buff *skb)
767 n = ch->scnt; 771 n = ch->scnt;
768 n = n ? n * 512 : DEFAULTBCNT; 772 n = n ? n * 512 : DEFAULTBCNT;
769 if (n != d->maxbcnt) { 773 if (n != d->maxbcnt) {
770 iprintk("e%ld.%ld: setting %d byte data frames on %s\n", 774 printk(KERN_INFO
775 "aoe: e%ld.%ld: setting %d byte data frames on %s\n",
771 d->aoemajor, d->aoeminor, n, d->ifp->name); 776 d->aoemajor, d->aoeminor, n, d->ifp->name);
772 d->maxbcnt = n; 777 d->maxbcnt = n;
773 } 778 }
diff --git a/drivers/block/aoe/aoedev.c b/drivers/block/aoe/aoedev.c
index 7fd63d4daf51..6125921bbec4 100644
--- a/drivers/block/aoe/aoedev.c
+++ b/drivers/block/aoe/aoedev.c
@@ -156,7 +156,7 @@ aoedev_by_sysminor_m(ulong sysminor, ulong bufcnt)
156 d = aoedev_newdev(bufcnt); 156 d = aoedev_newdev(bufcnt);
157 if (d == NULL) { 157 if (d == NULL) {
158 spin_unlock_irqrestore(&devlist_lock, flags); 158 spin_unlock_irqrestore(&devlist_lock, flags);
159 iprintk("aoedev_newdev failure.\n"); 159 printk(KERN_INFO "aoe: aoedev_newdev failure.\n");
160 return NULL; 160 return NULL;
161 } 161 }
162 d->sysminor = sysminor; 162 d->sysminor = sysminor;
diff --git a/drivers/block/aoe/aoemain.c b/drivers/block/aoe/aoemain.c
index 13e634db6fd4..a04b7d613299 100644
--- a/drivers/block/aoe/aoemain.c
+++ b/drivers/block/aoe/aoemain.c
@@ -84,11 +84,11 @@ aoe_init(void)
84 goto net_fail; 84 goto net_fail;
85 ret = register_blkdev(AOE_MAJOR, DEVICE_NAME); 85 ret = register_blkdev(AOE_MAJOR, DEVICE_NAME);
86 if (ret < 0) { 86 if (ret < 0) {
87 eprintk("can't register major\n"); 87 printk(KERN_ERR "aoe: can't register major\n");
88 goto blkreg_fail; 88 goto blkreg_fail;
89 } 89 }
90 90
91 iprintk("AoE v%s initialised.\n", VERSION); 91 printk(KERN_INFO "aoe: AoE v%s initialised.\n", VERSION);
92 discover_timer(TINIT); 92 discover_timer(TINIT);
93 return 0; 93 return 0;
94 94
@@ -101,7 +101,7 @@ aoe_init(void)
101 chr_fail: 101 chr_fail:
102 aoedev_exit(); 102 aoedev_exit();
103 103
104 iprintk("initialisation failure.\n"); 104 printk(KERN_INFO "aoe: initialisation failure.\n");
105 return ret; 105 return ret;
106} 106}
107 107
diff --git a/drivers/block/aoe/aoenet.c b/drivers/block/aoe/aoenet.c
index f1cf2666fc7d..9626e0f5da9d 100644
--- a/drivers/block/aoe/aoenet.c
+++ b/drivers/block/aoe/aoenet.c
@@ -74,7 +74,7 @@ set_aoe_iflist(const char __user *user_str, size_t size)
74 return -EINVAL; 74 return -EINVAL;
75 75
76 if (copy_from_user(aoe_iflist, user_str, size)) { 76 if (copy_from_user(aoe_iflist, user_str, size)) {
77 iprintk("copy from user failed\n"); 77 printk(KERN_INFO "aoe: copy from user failed\n");
78 return -EFAULT; 78 return -EFAULT;
79 } 79 }
80 aoe_iflist[size] = 0x00; 80 aoe_iflist[size] = 0x00;
@@ -132,7 +132,7 @@ aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt,
132 if (n > NECODES) 132 if (n > NECODES)
133 n = 0; 133 n = 0;
134 if (net_ratelimit()) 134 if (net_ratelimit())
135 eprintk("error packet from %d.%d; ecode=%d '%s'\n", 135 printk(KERN_ERR "aoe: error packet from %d.%d; ecode=%d '%s'\n",
136 be16_to_cpu(h->major), h->minor, 136 be16_to_cpu(h->major), h->minor,
137 h->err, aoe_errlist[n]); 137 h->err, aoe_errlist[n]);
138 goto exit; 138 goto exit;
@@ -146,7 +146,7 @@ aoenet_rcv(struct sk_buff *skb, struct net_device *ifp, struct packet_type *pt,
146 aoecmd_cfg_rsp(skb); 146 aoecmd_cfg_rsp(skb);
147 break; 147 break;
148 default: 148 default:
149 iprintk("unknown cmd %d\n", h->cmd); 149 printk(KERN_INFO "aoe: unknown cmd %d\n", h->cmd);
150 } 150 }
151exit: 151exit:
152 dev_kfree_skb(skb); 152 dev_kfree_skb(skb);