Re: [PATCH 3/4] block_dev: support protect information passthrough
From: Darrick J. Wong <hidden>
Date: 2020-02-26 16:05:04
Also in:
io-uring, linux-fsdevel
On Wed, Feb 26, 2020 at 04:37:18PM +0800, Bob Liu wrote:
quoted hunk ↗ jump to hunk
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);
If you're just going to mash all the error codes into IOERR, then this could very well become bio_io_error() ? --D
+ break; + } + } + qc = submit_bio(bio); if (polled) -- 2.9.5