Support protect information passed from use sapce, on direct io
is considered now.
Signed-off-by: Bob Liu <redacted>
---
fs/block_dev.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 69bf2fb..10e3299 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -348,6 +348,13 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
loff_t pos = iocb->ki_pos;
blk_qc_t qc = BLK_QC_T_NONE;
int ret = 0;
+ struct iovec *pi_iov;
+
+ if (iocb->ki_flags & IOCB_USE_PI) {
+ ret = iter_slice_protect_info(iter, nr_pages, &pi_iov);
+ if (ret)
+ return -EINVAL;
+ }
if ((pos | iov_iter_alignment(iter)) &
(bdev_logical_block_size(bdev) - 1))@@ -411,6 +418,16 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
polled = true;
}
+ /* Add protection information to bio */
+ if (iocb->ki_flags & IOCB_USE_PI) {
+ ret = bio_integrity_prep_from_iovec(bio, pi_iov);
+ if (ret) {
+ bio->bi_status = BLK_STS_IOERR;
+ bio_endio(bio);
+ break;
+ }
+ }
+
qc = submit_bio(bio);
if (polled)--
2.9.5