tree:   
https://github.com/0day-ci/linux/commits/UPDATE-20200818-215429/Alessio-Balsini/fuse-Add-support-for-passthrough-read-write/20200813-001731
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 <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

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/db983424acd984ba063ea00211c5c1b8a9a85b22
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/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to