• Dan Williams's avatar
    md/raid: only permit hot-add of compatible integrity profiles · 1501efad
    Dan Williams authored
    It is not safe for an integrity profile to be changed while i/o is
    in-flight in the queue.  Prevent adding new disks or otherwise online
    spares to an array if the device has an incompatible integrity profile.
    
    The original change to the blk_integrity_unregister implementation in
    md, commmit c7bfced9 "md: suspend i/o during runtime
    blk_integrity_unregister" introduced an immediate hang regression.
    
    This policy of disallowing changes the integrity profile once one has
    been established is shared with DM.
    
    Here is an abbreviated log from a test run that:
    1/ Creates a degraded raid1 with an integrity-enabled device (pmem0s) [   59.076127]
    2/ Tries to add an integrity-disabled device (pmem1m) [   90.489209]
    3/ Retries with an integrity-enabled device (pmem1s) [  205.671277]
    
    [   59.076127] md/raid1:md0: active with 1 out of 2 mirrors
    [   59.078302] md: data integrity enabled on md0
    [..]
    [   90.489209] md0: incompatible integrity profile for pmem1m
    [..]
    [  205.671277] md: super_written gets error=-5
    [  205.677386] md/raid1:md0: Disk failure on pmem1m, disabling device.
    [  205.677386] md/raid1:md0: Operation continuing on 1 devices.
    [  205.683037] RAID1 conf printout:
    [  205.684699]  --- wd:1 rd:2
    [  205.685972]  disk 0, wo:0, o:1, dev:pmem0s
    [  205.687562]  disk 1, wo:1, o:1, dev:pmem1s
    [  205.691717] md: recovery of RAID array md0
    
    Fixes: c7bfced9 ("md: suspend i/o during runtime blk_integrity_unregister")
    Cc: <stable@vger.kernel.org>
    Cc: Mike Snitzer <snitzer@redhat.com>
    Reported-by: default avatarNeilBrown <neilb@suse.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.com>
    1501efad
raid1.c 86.8 KB