From: Vishal Verma Date: Tue, 12 May 2015 17:48:53 +0000 (-0400) Subject: fs/block_dev.c: skip rw_page if bdev has integrity X-Git-Tag: v4.1.12-92~18^2^2~195 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=7796683a5cca78b2b4f471166dc22e428bb884cb;p=users%2Fjedix%2Flinux-maple.git fs/block_dev.c: skip rw_page if bdev has integrity Orabug: 22913653 If a block device has bio integrity enabled, rw_page will bypass the integrity payload, which is undesirable. Skip rw_page if this is the case. Currently brd and zram provide rw_page, and the proposed 'nd' drivers will too. Cc: Jens Axboe Cc: Martin K. Petersen Suggested-by: Matthew Wilcox Signed-off-by: Vishal Verma Signed-off-by: Dan Williams (cherry picked from commit f68eb1e71a92765ffd8eb68466a41b48f2fbba04) Signed-off-by: Dan Duval --- diff --git a/fs/block_dev.c b/fs/block_dev.c index ccfd31f1df3a4..d88ad7e8ae6a8 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -376,7 +376,7 @@ int bdev_read_page(struct block_device *bdev, sector_t sector, struct page *page) { const struct block_device_operations *ops = bdev->bd_disk->fops; - if (!ops->rw_page) + if (!ops->rw_page || bdev_get_integrity(bdev)) return -EOPNOTSUPP; return ops->rw_page(bdev, sector + get_start_sect(bdev), page, READ); } @@ -407,7 +407,7 @@ int bdev_write_page(struct block_device *bdev, sector_t sector, int result; int rw = (wbc->sync_mode == WB_SYNC_ALL) ? WRITE_SYNC : WRITE; const struct block_device_operations *ops = bdev->bd_disk->fops; - if (!ops->rw_page) + if (!ops->rw_page || bdev_get_integrity(bdev)) return -EOPNOTSUPP; set_page_writeback(page); result = ops->rw_page(bdev, sector + get_start_sect(bdev), page, rw);