md: remove mddev_lock() from md_attr_show()
Most attributes can be read safely without any locking. A race might lead to a slightly out-dated value, but nothing wrong. We already have locking in some places where needed. All that remains is can_clear_show(), behind_writes_used_show() and action_show() which are easily fixed. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
7b1485bab9
commit
b7b17c9b67
2 changed files with 20 additions and 16 deletions
|
@ -2211,11 +2211,13 @@ __ATTR(metadata, S_IRUGO|S_IWUSR, metadata_show, metadata_store);
|
||||||
static ssize_t can_clear_show(struct mddev *mddev, char *page)
|
static ssize_t can_clear_show(struct mddev *mddev, char *page)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
spin_lock(&mddev->lock);
|
||||||
if (mddev->bitmap)
|
if (mddev->bitmap)
|
||||||
len = sprintf(page, "%s\n", (mddev->bitmap->need_sync ?
|
len = sprintf(page, "%s\n", (mddev->bitmap->need_sync ?
|
||||||
"false" : "true"));
|
"false" : "true"));
|
||||||
else
|
else
|
||||||
len = sprintf(page, "\n");
|
len = sprintf(page, "\n");
|
||||||
|
spin_unlock(&mddev->lock);
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2240,10 +2242,15 @@ __ATTR(can_clear, S_IRUGO|S_IWUSR, can_clear_show, can_clear_store);
|
||||||
static ssize_t
|
static ssize_t
|
||||||
behind_writes_used_show(struct mddev *mddev, char *page)
|
behind_writes_used_show(struct mddev *mddev, char *page)
|
||||||
{
|
{
|
||||||
|
ssize_t ret;
|
||||||
|
spin_lock(&mddev->lock);
|
||||||
if (mddev->bitmap == NULL)
|
if (mddev->bitmap == NULL)
|
||||||
return sprintf(page, "0\n");
|
ret = sprintf(page, "0\n");
|
||||||
return sprintf(page, "%lu\n",
|
else
|
||||||
|
ret = sprintf(page, "%lu\n",
|
||||||
mddev->bitmap->behind_writes_used);
|
mddev->bitmap->behind_writes_used);
|
||||||
|
spin_unlock(&mddev->lock);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
|
|
|
@ -4042,20 +4042,21 @@ static ssize_t
|
||||||
action_show(struct mddev *mddev, char *page)
|
action_show(struct mddev *mddev, char *page)
|
||||||
{
|
{
|
||||||
char *type = "idle";
|
char *type = "idle";
|
||||||
if (test_bit(MD_RECOVERY_FROZEN, &mddev->recovery))
|
unsigned long recovery = mddev->recovery;
|
||||||
|
if (test_bit(MD_RECOVERY_FROZEN, &recovery))
|
||||||
type = "frozen";
|
type = "frozen";
|
||||||
else if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) ||
|
else if (test_bit(MD_RECOVERY_RUNNING, &recovery) ||
|
||||||
(!mddev->ro && test_bit(MD_RECOVERY_NEEDED, &mddev->recovery))) {
|
(!mddev->ro && test_bit(MD_RECOVERY_NEEDED, &recovery))) {
|
||||||
if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
|
if (test_bit(MD_RECOVERY_RESHAPE, &recovery))
|
||||||
type = "reshape";
|
type = "reshape";
|
||||||
else if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
|
else if (test_bit(MD_RECOVERY_SYNC, &recovery)) {
|
||||||
if (!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
|
if (!test_bit(MD_RECOVERY_REQUESTED, &recovery))
|
||||||
type = "resync";
|
type = "resync";
|
||||||
else if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery))
|
else if (test_bit(MD_RECOVERY_CHECK, &recovery))
|
||||||
type = "check";
|
type = "check";
|
||||||
else
|
else
|
||||||
type = "repair";
|
type = "repair";
|
||||||
} else if (test_bit(MD_RECOVERY_RECOVER, &mddev->recovery))
|
} else if (test_bit(MD_RECOVERY_RECOVER, &recovery))
|
||||||
type = "recover";
|
type = "recover";
|
||||||
}
|
}
|
||||||
return sprintf(page, "%s\n", type);
|
return sprintf(page, "%s\n", type);
|
||||||
|
@ -4572,11 +4573,7 @@ md_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
|
||||||
mddev_get(mddev);
|
mddev_get(mddev);
|
||||||
spin_unlock(&all_mddevs_lock);
|
spin_unlock(&all_mddevs_lock);
|
||||||
|
|
||||||
rv = mddev_lock(mddev);
|
|
||||||
if (!rv) {
|
|
||||||
rv = entry->show(mddev, page);
|
rv = entry->show(mddev, page);
|
||||||
mddev_unlock(mddev);
|
|
||||||
}
|
|
||||||
mddev_put(mddev);
|
mddev_put(mddev);
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue