aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/md/md.c36
1 files changed, 14 insertions, 22 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index dbbe5e6df24c..5438834bf54d 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2419,40 +2419,41 @@ state_show(struct md_rdev *rdev, char *page)
2419{ 2419{
2420 char *sep = ""; 2420 char *sep = "";
2421 size_t len = 0; 2421 size_t len = 0;
2422 unsigned long flags = ACCESS_ONCE(rdev->flags);
2422 2423
2423 if (test_bit(Faulty, &rdev->flags) || 2424 if (test_bit(Faulty, &flags) ||
2424 rdev->badblocks.unacked_exist) { 2425 rdev->badblocks.unacked_exist) {
2425 len+= sprintf(page+len, "%sfaulty",sep); 2426 len+= sprintf(page+len, "%sfaulty",sep);
2426 sep = ","; 2427 sep = ",";
2427 } 2428 }
2428 if (test_bit(In_sync, &rdev->flags)) { 2429 if (test_bit(In_sync, &flags)) {
2429 len += sprintf(page+len, "%sin_sync",sep); 2430 len += sprintf(page+len, "%sin_sync",sep);
2430 sep = ","; 2431 sep = ",";
2431 } 2432 }
2432 if (test_bit(WriteMostly, &rdev->flags)) { 2433 if (test_bit(WriteMostly, &flags)) {
2433 len += sprintf(page+len, "%swrite_mostly",sep); 2434 len += sprintf(page+len, "%swrite_mostly",sep);
2434 sep = ","; 2435 sep = ",";
2435 } 2436 }
2436 if (test_bit(Blocked, &rdev->flags) || 2437 if (test_bit(Blocked, &flags) ||
2437 (rdev->badblocks.unacked_exist 2438 (rdev->badblocks.unacked_exist
2438 && !test_bit(Faulty, &rdev->flags))) { 2439 && !test_bit(Faulty, &flags))) {
2439 len += sprintf(page+len, "%sblocked", sep); 2440 len += sprintf(page+len, "%sblocked", sep);
2440 sep = ","; 2441 sep = ",";
2441 } 2442 }
2442 if (!test_bit(Faulty, &rdev->flags) && 2443 if (!test_bit(Faulty, &flags) &&
2443 !test_bit(In_sync, &rdev->flags)) { 2444 !test_bit(In_sync, &flags)) {
2444 len += sprintf(page+len, "%sspare", sep); 2445 len += sprintf(page+len, "%sspare", sep);
2445 sep = ","; 2446 sep = ",";
2446 } 2447 }
2447 if (test_bit(WriteErrorSeen, &rdev->flags)) { 2448 if (test_bit(WriteErrorSeen, &flags)) {
2448 len += sprintf(page+len, "%swrite_error", sep); 2449 len += sprintf(page+len, "%swrite_error", sep);
2449 sep = ","; 2450 sep = ",";
2450 } 2451 }
2451 if (test_bit(WantReplacement, &rdev->flags)) { 2452 if (test_bit(WantReplacement, &flags)) {
2452 len += sprintf(page+len, "%swant_replacement", sep); 2453 len += sprintf(page+len, "%swant_replacement", sep);
2453 sep = ","; 2454 sep = ",";
2454 } 2455 }
2455 if (test_bit(Replacement, &rdev->flags)) { 2456 if (test_bit(Replacement, &flags)) {
2456 len += sprintf(page+len, "%sreplacement", sep); 2457 len += sprintf(page+len, "%sreplacement", sep);
2457 sep = ","; 2458 sep = ",";
2458 } 2459 }
@@ -2965,21 +2966,12 @@ rdev_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
2965{ 2966{
2966 struct rdev_sysfs_entry *entry = container_of(attr, struct rdev_sysfs_entry, attr); 2967 struct rdev_sysfs_entry *entry = container_of(attr, struct rdev_sysfs_entry, attr);
2967 struct md_rdev *rdev = container_of(kobj, struct md_rdev, kobj); 2968 struct md_rdev *rdev = container_of(kobj, struct md_rdev, kobj);
2968 struct mddev *mddev = rdev->mddev;
2969 ssize_t rv;
2970 2969
2971 if (!entry->show) 2970 if (!entry->show)
2972 return -EIO; 2971 return -EIO;
2973 2972 if (!rdev->mddev)
2974 rv = mddev ? mddev_lock(mddev) : -EBUSY; 2973 return -EBUSY;
2975 if (!rv) { 2974 return entry->show(rdev, page);
2976 if (rdev->mddev == NULL)
2977 rv = -EBUSY;
2978 else
2979 rv = entry->show(rdev, page);
2980 mddev_unlock(mddev);
2981 }
2982 return rv;
2983} 2975}
2984 2976
2985static ssize_t 2977static ssize_t