tree:
https://github.com/0day-ci/linux/commits/UPDATE-20200818-215429/Alessio-B...
head: db983424acd984ba063ea00211c5c1b8a9a85b22
commit: db983424acd984ba063ea00211c5c1b8a9a85b22 [2/2] fuse: Add support for passthrough
read/write
config: x86_64-randconfig-m001-20200818 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
Reported-by: Dan Carpenter <dan.carpenter(a)oracle.com>
smatch warnings:
fs/fuse/passthrough.c:140 fuse_passthrough_write_iter() warn: inconsistent returns
'fuse_inode->i_rwsem'.
#
https://github.com/0day-ci/linux/commit/db983424acd984ba063ea00211c5c1b8a...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review
UPDATE-20200818-215429/Alessio-Balsini/fuse-Add-support-for-passthrough-read-write/20200813-001731
git checkout db983424acd984ba063ea00211c5c1b8a9a85b22
vim +140 fs/fuse/passthrough.c
db983424acd984 Alessio Balsini 2020-08-18 92 ssize_t fuse_passthrough_write_iter(struct
kiocb *iocb_fuse,
db983424acd984 Alessio Balsini 2020-08-18 93 struct iov_iter *iter)
db983424acd984 Alessio Balsini 2020-08-18 94 {
db983424acd984 Alessio Balsini 2020-08-18 95 struct file *fuse_filp =
iocb_fuse->ki_filp;
db983424acd984 Alessio Balsini 2020-08-18 96 struct fuse_file *ff =
fuse_filp->private_data;
db983424acd984 Alessio Balsini 2020-08-18 97 struct file *passthrough_filp =
ff->passthrough_filp;
db983424acd984 Alessio Balsini 2020-08-18 98 struct inode *passthrough_inode =
file_inode(passthrough_filp);
db983424acd984 Alessio Balsini 2020-08-18 99 struct inode *fuse_inode =
file_inode(fuse_filp);
db983424acd984 Alessio Balsini 2020-08-18 100 ssize_t ret;
db983424acd984 Alessio Balsini 2020-08-18 101
db983424acd984 Alessio Balsini 2020-08-18 102 if (!iov_iter_count(iter))
db983424acd984 Alessio Balsini 2020-08-18 103 return 0;
db983424acd984 Alessio Balsini 2020-08-18 104
db983424acd984 Alessio Balsini 2020-08-18 105 inode_lock(fuse_inode);
^^^^^^^^^^^^^^^^^^^^^^
db983424acd984 Alessio Balsini 2020-08-18 106
db983424acd984 Alessio Balsini 2020-08-18 107 if (is_sync_kiocb(iocb_fuse)) {
db983424acd984 Alessio Balsini 2020-08-18 108 struct kiocb iocb;
db983424acd984 Alessio Balsini 2020-08-18 109
db983424acd984 Alessio Balsini 2020-08-18 110 kiocb_clone(&iocb, iocb_fuse,
passthrough_filp);
db983424acd984 Alessio Balsini 2020-08-18 111
db983424acd984 Alessio Balsini 2020-08-18 112 file_start_write(passthrough_filp);
db983424acd984 Alessio Balsini 2020-08-18 113 ret = call_write_iter(passthrough_filp,
&iocb, iter);
db983424acd984 Alessio Balsini 2020-08-18 114 file_end_write(passthrough_filp);
db983424acd984 Alessio Balsini 2020-08-18 115
db983424acd984 Alessio Balsini 2020-08-18 116 iocb_fuse->ki_pos = iocb.ki_pos;
db983424acd984 Alessio Balsini 2020-08-18 117 fuse_copyattr(fuse_filp,
passthrough_filp, true);
db983424acd984 Alessio Balsini 2020-08-18 118 } else {
db983424acd984 Alessio Balsini 2020-08-18 119 struct fuse_aio_req *aio_req;
db983424acd984 Alessio Balsini 2020-08-18 120
db983424acd984 Alessio Balsini 2020-08-18 121 aio_req =
db983424acd984 Alessio Balsini 2020-08-18 122
kmem_cache_zalloc(fuse_aio_request_cachep, GFP_KERNEL);
db983424acd984 Alessio Balsini 2020-08-18 123 if (!aio_req)
db983424acd984 Alessio Balsini 2020-08-18 124 return -ENOMEM;
Need to unlock.
db983424acd984 Alessio Balsini 2020-08-18 125
db983424acd984 Alessio Balsini 2020-08-18 126 file_start_write(passthrough_filp);
db983424acd984 Alessio Balsini 2020-08-18 127
__sb_writers_release(passthrough_inode->i_sb, SB_FREEZE_WRITE);
db983424acd984 Alessio Balsini 2020-08-18 128
db983424acd984 Alessio Balsini 2020-08-18 129 aio_req->iocb_fuse = iocb_fuse;
db983424acd984 Alessio Balsini 2020-08-18 130 kiocb_clone(&aio_req->iocb,
iocb_fuse, passthrough_filp);
db983424acd984 Alessio Balsini 2020-08-18 131 aio_req->iocb.ki_complete =
fuse_aio_rw_complete;
db983424acd984 Alessio Balsini 2020-08-18 132 ret =
vfs_iocb_iter_write(passthrough_filp, &aio_req->iocb,
db983424acd984 Alessio Balsini 2020-08-18 133 iter);
db983424acd984 Alessio Balsini 2020-08-18 134 if (ret != -EIOCBQUEUED)
db983424acd984 Alessio Balsini 2020-08-18 135 fuse_aio_cleanup_handler(aio_req);
db983424acd984 Alessio Balsini 2020-08-18 136 }
db983424acd984 Alessio Balsini 2020-08-18 137
db983424acd984 Alessio Balsini 2020-08-18 138 inode_unlock(fuse_inode);
^^^^^^^^^^^^^^^^^^^^^^^^
db983424acd984 Alessio Balsini 2020-08-18 139
db983424acd984 Alessio Balsini 2020-08-18 @140 return ret;
db983424acd984 Alessio Balsini 2020-08-18 141 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org