path: root/block/partition-generic.c
diff options
authorIlya Dryomov <>2017-04-18 18:43:20 +0200
committerJens Axboe <>2017-04-21 14:17:27 -0600
commit19b7ccf8651df09d274671b53039c672a52ad84d (patch)
treee4190d4d1bede0fdccd797e6dc3eb1ae3659bd4a /block/partition-generic.c
parent8d77bb8276062ff2d991bec71389520dd0156cc3 (diff)
block: get rid of blk_integrity_revalidate()
Commit 25520d55cdb6 ("block: Inline blk_integrity in struct gendisk") introduced blk_integrity_revalidate(), which seems to assume ownership of the stable pages flag and unilaterally clears it if no blk_integrity profile is registered: if (bi->profile) disk->queue->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES; else disk->queue->backing_dev_info->capabilities &= ~BDI_CAP_STABLE_WRITES; It's called from revalidate_disk() and rescan_partitions(), making it impossible to enable stable pages for drivers that support partitions and don't use blk_integrity: while the call in revalidate_disk() can be trivially worked around (see zram, which doesn't support partitions and hence gets away with zram_revalidate_disk()), rescan_partitions() can be triggered from userspace at any time. This breaks rbd, where the ceph messenger is responsible for generating/verifying CRCs. Since blk_integrity_{un,}register() "must" be used for (un)registering the integrity profile with the block layer, move BDI_CAP_STABLE_WRITES setting there. This way drivers that call blk_integrity_register() and use integrity infrastructure won't interfere with drivers that don't but still want stable pages. Fixes: 25520d55cdb6 ("block: Inline blk_integrity in struct gendisk") Cc: "Martin K. Petersen" <> Cc: Christoph Hellwig <> Cc: Mike Snitzer <> Cc: # 4.4+, needs backporting Tested-by: Dan Williams <> Signed-off-by: Ilya Dryomov <> Signed-off-by: Jens Axboe <>
Diffstat (limited to 'block/partition-generic.c')
1 files changed, 0 insertions, 1 deletions
diff --git a/block/partition-generic.c b/block/partition-generic.c
index 7afb990..0171a2f 100644
--- a/block/partition-generic.c
+++ b/block/partition-generic.c
@@ -497,7 +497,6 @@ rescan:
if (disk->fops->revalidate_disk)
- blk_integrity_revalidate(disk);
check_disk_size_change(disk, bdev);
bdev->bd_invalidated = 0;
if (!get_capacity(disk) || !(state = check_partition(disk, bdev)))