提交 31399d9e 编写于 作者: N NeilBrown 提交者: Linus Torvalds

[PATCH] md: minor MD fixes

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: NNeil Brown <neilb@suse.de>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 9c791977
...@@ -698,6 +698,7 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev) ...@@ -698,6 +698,7 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
struct list_head *tmp; struct list_head *tmp;
mdk_rdev_t *rdev2; mdk_rdev_t *rdev2;
int next_spare = mddev->raid_disks; int next_spare = mddev->raid_disks;
char nm[20];
/* make rdev->sb match mddev data.. /* make rdev->sb match mddev data..
* *
...@@ -768,7 +769,6 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev) ...@@ -768,7 +769,6 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
fixdesc |= (1 << desc_nr); fixdesc |= (1 << desc_nr);
rdev2->desc_nr = desc_nr; rdev2->desc_nr = desc_nr;
if (rdev2->raid_disk >= 0) { if (rdev2->raid_disk >= 0) {
char nm[20];
sprintf(nm, "rd%d", rdev2->raid_disk); sprintf(nm, "rd%d", rdev2->raid_disk);
sysfs_remove_link(&mddev->kobj, nm); sysfs_remove_link(&mddev->kobj, nm);
} }
...@@ -814,7 +814,6 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev) ...@@ -814,7 +814,6 @@ static void super_90_sync(mddev_t *mddev, mdk_rdev_t *rdev)
&rdev2->bdev->bd_disk->kobj, &rdev2->bdev->bd_disk->kobj,
"block"); "block");
if (rdev2->raid_disk >= 0) { if (rdev2->raid_disk >= 0) {
char nm[20];
sprintf(nm, "rd%d", rdev2->raid_disk); sprintf(nm, "rd%d", rdev2->raid_disk);
sysfs_create_link(&mddev->kobj, sysfs_create_link(&mddev->kobj,
&rdev2->kobj, nm); &rdev2->kobj, nm);
...@@ -1722,9 +1721,9 @@ static ssize_t ...@@ -1722,9 +1721,9 @@ static ssize_t
md_show_scan(mddev_t *mddev, char *page) md_show_scan(mddev_t *mddev, char *page)
{ {
char *type = "none"; char *type = "none";
if (mddev->recovery & if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) ||
((1<<MD_RECOVERY_RUNNING) || (1<<MD_RECOVERY_NEEDED))) { test_bit(MD_RECOVERY_NEEDED, &mddev->recovery)) {
if (mddev->recovery & (1<<MD_RECOVERY_SYNC)) { if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
if (!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery)) if (!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
type = "resync"; type = "resync";
else if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery)) else if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery))
...@@ -1741,8 +1740,9 @@ static ssize_t ...@@ -1741,8 +1740,9 @@ static ssize_t
md_store_scan(mddev_t *mddev, const char *page, size_t len) md_store_scan(mddev_t *mddev, const char *page, size_t len)
{ {
int canscan=0; 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; return -EBUSY;
down(&mddev->reconfig_sem); down(&mddev->reconfig_sem);
if (mddev->pers && mddev->pers->sync_request) if (mddev->pers && mddev->pers->sync_request)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册