diff options
author | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2015-10-01 13:20:27 -0500 |
---|---|---|
committer | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2015-10-12 03:35:30 -0500 |
commit | dbb64f8635f5d68192108b88759a34633a4bd558 (patch) | |
tree | 1159afed1de7314ce0d412469031832d0295c905 /drivers/md/md-cluster.h | |
parent | c186b128cda5a246da25f474e4689cb2bfacfcac (diff) | |
download | linux-stable-dbb64f8635f5d68192108b88759a34633a4bd558.tar.gz linux-stable-dbb64f8635f5d68192108b88759a34633a4bd558.tar.bz2 linux-stable-dbb64f8635f5d68192108b88759a34633a4bd558.zip |
md-cluster: Fix adding of new disk with new reload code
Adding the disk worked incorrectly with the new reload code. Fix it:
- No operation should be performed on rdev marked as Candidate
- After a metadata update operation, kick disk if role is 0xfffe
else clear Candidate bit and continue with the regular change check.
- Saving the mode of the lock resource to check if token lock is already
locked, because it can be called twice while adding a disk. However,
unlock_comm() must be called only once.
- add_new_disk() is called by the node initiating the --add operation.
If it needs to be canceled, call add_new_disk_cancel(). The operation
is completed by md_update_sb() which will write and unlock the
communication.
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Diffstat (limited to 'drivers/md/md-cluster.h')
-rw-r--r-- | drivers/md/md-cluster.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/md/md-cluster.h b/drivers/md/md-cluster.h index c94172673599..e75ea2613184 100644 --- a/drivers/md/md-cluster.h +++ b/drivers/md/md-cluster.h @@ -15,12 +15,12 @@ struct md_cluster_operations { int (*resync_info_update)(struct mddev *mddev, sector_t lo, sector_t hi); int (*metadata_update_start)(struct mddev *mddev); int (*metadata_update_finish)(struct mddev *mddev); - int (*metadata_update_cancel)(struct mddev *mddev); + void (*metadata_update_cancel)(struct mddev *mddev); int (*resync_start)(struct mddev *mddev); int (*resync_finish)(struct mddev *mddev); int (*area_resyncing)(struct mddev *mddev, int direction, sector_t lo, sector_t hi); - int (*add_new_disk_start)(struct mddev *mddev, struct md_rdev *rdev); - int (*add_new_disk_finish)(struct mddev *mddev); + int (*add_new_disk)(struct mddev *mddev, struct md_rdev *rdev); + void (*add_new_disk_cancel)(struct mddev *mddev); int (*new_disk_ack)(struct mddev *mddev, bool ack); int (*remove_disk)(struct mddev *mddev, struct md_rdev *rdev); int (*gather_bitmaps)(struct md_rdev *rdev); |