[PATCH] md: minor MD fixes
authorNeilBrown <neilb@suse.de>
Wed, 9 Nov 2005 05:39:29 +0000 (21:39 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 9 Nov 2005 15:56:37 +0000 (07:56 -0800)
1/ Use reduce stack usage, because 'gcc' apparently doesn't overlay
   different variables  that are in separate scopes...

2/ Use test_bit instead of ( .. & 1<< ..) which in this case is buggy.

Thanks to Andrew Morton

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/md/md.c

index fe0137a5b002e02940e718093daaf3e9c1ac2c44..013f2f27589c8f09599371d54f2a163be8277416 100644 (file)
@@ -698,6 +698,7 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
        struct list_head *tmp;
        mdk_rdev_t *rdev2;
        int next_spare = mddev->raid_disks;
+       char nm[20];
 
        /* make rdev->sb match mddev data..
         *
@@ -768,7 +769,6 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
                        fixdesc |= (1 << desc_nr);
                        rdev2->desc_nr = desc_nr;
                        if (rdev2->raid_disk >= 0) {
-                               char nm[20];
                                sprintf(nm, "rd%d", rdev2->raid_disk);
                                sysfs_remove_link(&mddev->kobj, nm);
                        }
@@ -814,7 +814,6 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
                                                  &rdev2->bdev->bd_disk->kobj,
                                                  "block");
                                if (rdev2->raid_disk >= 0) {
-                                       char nm[20];
                                        sprintf(nm, "rd%d", rdev2->raid_disk);
                                        sysfs_create_link(&mddev->kobj,
                                                          &rdev2->kobj, nm);
@@ -1722,9 +1721,9 @@ static ssize_t
 md_show_scan(mddev_t *mddev, char *page)
 {
        char *type = "none";
-       if (mddev->recovery &
-           ((1<<MD_RECOVERY_RUNNING) || (1<<MD_RECOVERY_NEEDED))) {
-               if (mddev->recovery & (1<<MD_RECOVERY_SYNC)) {
+       if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) ||
+           test_bit(MD_RECOVERY_NEEDED, &mddev->recovery)) {
+               if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
                        if (!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
                                type = "resync";
                        else if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery))
@@ -1741,8 +1740,9 @@ static ssize_t
 md_store_scan(mddev_t *mddev, const char *page, size_t len)
 {
        int canscan=0;
-       if (mddev->recovery &
-           ((1<<MD_RECOVERY_RUNNING) || (1<<MD_RECOVERY_NEEDED)))
+
+       if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) ||
+           test_bit(MD_RECOVERY_NEEDED, &mddev->recovery))
                return -EBUSY;
        down(&mddev->reconfig_sem);
        if (mddev->pers && mddev->pers->sync_request)