dm: improve block integrity support
authorMike Snitzer <snitzer@redhat.com>
Fri, 1 Apr 2011 19:02:31 +0000 (21:02 +0200)
committerJens Axboe <jaxboe@fusionio.com>
Tue, 5 Apr 2011 21:52:43 +0000 (23:52 +0200)
commita63a5cf84dac7a23a57c800eea5734701e7d3c04
tree965552b96d7eacc21206a4f28672efd24a04d913
parent7dcda1c96d7c643101d4a05579ef4512a4baa7ef
dm: improve block integrity support

The current block integrity (DIF/DIX) support in DM is verifying that
all devices' integrity profiles match during DM device resume (which
is past the point of no return).  To some degree that is unavoidable
(stacked DM devices force this late checking).  But for most DM
devices (which aren't stacking on other DM devices) the ideal time to
verify all integrity profiles match is during table load.

Introduce the notion of an "initialized" integrity profile: a profile
that was blk_integrity_register()'d with a non-NULL 'blk_integrity'
template.  Add blk_integrity_is_initialized() to allow checking if a
profile was initialized.

Update DM integrity support to:
- check all devices with _initialized_ integrity profiles match
  during table load; uninitialized profiles (e.g. for underlying DM
  device(s) of a stacked DM device) are ignored.
- disallow a table load that would result in an integrity profile that
  conflicts with a DM device's existing (in-use) integrity profile
- avoid clearing an existing integrity profile
- validate all integrity profiles match during resume; but if they
  don't all we can do is report the mismatch (during resume we're past
  the point of no return)

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
block/blk-integrity.c
drivers/md/dm-table.c
include/linux/blkdev.h