diff options
author | James Morris <james.morris@microsoft.com> | 2018-03-23 08:26:16 +1100 |
---|---|---|
committer | James Morris <james.morris@microsoft.com> | 2018-03-23 08:26:16 +1100 |
commit | 5893ed18a26d1f56b97c0290b0cbbc2d49d6de28 (patch) | |
tree | 97aa931519fca28a0a12fad7485347198f8267cc /drivers/md/raid1.h | |
parent | 7bd698b3c04e61ee9e03d4c2a55003f75df14dca (diff) | |
parent | c698ca5278934c0ae32297a8725ced2e27585d7f (diff) |
Merge tag 'v4.16-rc6' into next-general
Merge to Linux 4.16-rc6 at the request of Jarkko, for his TPM updates.
Diffstat (limited to 'drivers/md/raid1.h')
-rw-r--r-- | drivers/md/raid1.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/md/raid1.h b/drivers/md/raid1.h index c7294e7557e0..eb84bc68e2fd 100644 --- a/drivers/md/raid1.h +++ b/drivers/md/raid1.h @@ -26,6 +26,18 @@ #define BARRIER_BUCKETS_NR_BITS (PAGE_SHIFT - ilog2(sizeof(atomic_t))) #define BARRIER_BUCKETS_NR (1<<BARRIER_BUCKETS_NR_BITS) +/* Note: raid1_info.rdev can be set to NULL asynchronously by raid1_remove_disk. + * There are three safe ways to access raid1_info.rdev. + * 1/ when holding mddev->reconfig_mutex + * 2/ when resync/recovery is known to be happening - i.e. in code that is + * called as part of performing resync/recovery. + * 3/ while holding rcu_read_lock(), use rcu_dereference to get the pointer + * and if it is non-NULL, increment rdev->nr_pending before dropping the + * RCU lock. + * When .rdev is set to NULL, the nr_pending count checked again and if it has + * been incremented, the pointer is put back in .rdev. + */ + struct raid1_info { struct md_rdev *rdev; sector_t head_position; |