[PATCH 4/5] io_uring: add support for dma pre-mapping
Al Viro
viro at zeniv.linux.org.uk
Wed Jul 27 07:11:05 PDT 2022
On Tue, Jul 26, 2022 at 10:38:13AM -0700, Keith Busch wrote:
> + file = fget(map.fd);
> + if (!file)
> + return -EBADF;
> +
> + if (S_ISBLK(file_inode(file)->i_mode))
> + bdev = I_BDEV(file->f_mapping->host);
> + else if (S_ISREG(file_inode(file)->i_mode))
> + bdev = file->f_inode->i_sb->s_bdev;
> + else
> + return -EOPNOTSUPP;
> +
> + for (i = map.buf_start; i < map.buf_end; i++) {
> + struct io_mapped_ubuf *imu = ctx->user_bufs[i];
> + void *tag;
> +
> + if (imu->dma_tag) {
> + ret = -EBUSY;
> + goto err;
> + }
> +
> + tag = block_dma_map(bdev, imu->bvec, imu->nr_bvecs);
> + if (IS_ERR(tag)) {
> + ret = PTR_ERR(tag);
> + goto err;
> + }
> +
> + imu->dma_tag = tag;
> + imu->dma_file = file;
> + imu->bdev = bdev;
> + }
> +
> + fput(file);
This, BTW, is completely insane - what happens if you follow that
with close(map.fd)? A bunch of dangling struct file references?
I really don't understand what you are trying to do here.
More information about the Linux-nvme
mailing list