diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2014-02-05 00:17:01 -0500 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2014-07-10 12:34:52 -0400 |
commit | 66ce6dbce2efa31d038a3148fa99bd86abd2203f (patch) | |
tree | 30d150a3f103d1d3020e7e7987e1784777c77610 /drivers/block | |
parent | fcb096740a13c839e16e6735ba486879b54bc861 (diff) |
drbd: re-add lost conf_mutex protection in drbd_set_role
The conf_update mutex used to be held while clearing the
net_conf->discard_my_data flag inside drbd_set_role.
It was moved into drbd_adm_set_role with
drbd: allow parallel promote/demote actions
but then replaced at that location by the newly introduced adm_mutex with
drbd: Fix a potential deadlock in drbdsetup, introduce resource->adm_mutex
And I simply forgot to put it back in at the original location.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/drbd/drbd_nl.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 133e9b37c6c2..23670d81ec32 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c | |||
@@ -661,11 +661,11 @@ drbd_set_role(struct drbd_device *const device, enum drbd_role new_role, int for | |||
661 | put_ldev(device); | 661 | put_ldev(device); |
662 | } | 662 | } |
663 | } else { | 663 | } else { |
664 | /* Called from drbd_adm_set_role only. | 664 | mutex_lock(&device->resource->conf_update); |
665 | * We are still holding the conf_update mutex. */ | ||
666 | nc = connection->net_conf; | 665 | nc = connection->net_conf; |
667 | if (nc) | 666 | if (nc) |
668 | nc->discard_my_data = 0; /* without copy; single bit op is atomic */ | 667 | nc->discard_my_data = 0; /* without copy; single bit op is atomic */ |
668 | mutex_unlock(&device->resource->conf_update); | ||
669 | 669 | ||
670 | set_disk_ro(device->vdisk, false); | 670 | set_disk_ro(device->vdisk, false); |
671 | if (get_ldev(device)) { | 671 | if (get_ldev(device)) { |