diff options
author | NeilBrown <neilb@suse.de> | 2014-12-15 02:56:58 +0100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2015-02-05 23:32:55 +0100 |
commit | 978a7a47cae79ae7a7b5a1e80bfcaef6ee700312 (patch) | |
tree | f9f479f5a662ddc9cd482d0e46c7e21e3ca3783b | |
parent | md: protect ->pers changes with mddev->lock (diff) | |
download | linux-978a7a47cae79ae7a7b5a1e80bfcaef6ee700312.tar.xz linux-978a7a47cae79ae7a7b5a1e80bfcaef6ee700312.zip |
md/bitmap: protect clearing of ->bitmap by mddev->lock
This makes it safe to inspect the struct while holding only
the spinlock.
Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r-- | drivers/md/bitmap.c | 2 | ||||
-rw-r--r-- | drivers/md/md.h | 1 |
2 files changed, 3 insertions, 0 deletions
diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c index 1695ee5f3ffc..3424b1915fc4 100644 --- a/drivers/md/bitmap.c +++ b/drivers/md/bitmap.c @@ -1619,7 +1619,9 @@ void bitmap_destroy(struct mddev *mddev) return; mutex_lock(&mddev->bitmap_info.mutex); + spin_lock(&mddev->lock); mddev->bitmap = NULL; /* disconnect from the md device */ + spin_unlock(&mddev->lock); mutex_unlock(&mddev->bitmap_info.mutex); if (mddev->thread) mddev->thread->timeout = MAX_SCHEDULE_TIMEOUT; diff --git a/drivers/md/md.h b/drivers/md/md.h index e41559dccdc9..8770308a8052 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h @@ -392,6 +392,7 @@ struct mddev { * clearing MD_CHANGE_* * in_sync - and related safemode and MD_CHANGE changes * pers (also protected by reconfig_mutex and pending IO). + * clearing ->bitmap */ spinlock_t lock; wait_queue_head_t sb_wait; /* for waiting on superblock updates */ |