Re: [PATCH] fuse: Track process write operations in both direct and writethrough modes

From: Dan Carpenter
Date: Mon Nov 06 2023 - 23:28:01 EST


Hi Zhou,

kernel test robot noticed the following build warnings:

https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Zhou-Jifeng/fuse-Track-process-write-operations-in-both-direct-and-writethrough-modes/20231028-150119
base: https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next
patch link: https://lore.kernel.org/r/20231028065912.6084-1-zhoujifeng%40kylinos.com.cn
patch subject: [PATCH] fuse: Track process write operations in both direct and writethrough modes
config: x86_64-randconfig-161-20231103 (https://download.01.org/0day-ci/archive/20231107/202311070338.uJNMq6Sh-lkp@xxxxxxxxx/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231107/202311070338.uJNMq6Sh-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
| Closes: https://lore.kernel.org/r/202311070338.uJNMq6Sh-lkp@xxxxxxxxx/

smatch warnings:
fs/fuse/file.c:1359 fuse_cache_write_iter() error: uninitialized symbol 'err'.

vim +/err +1359 fs/fuse/file.c

55752a3aba1387 Miklos Szeredi 2019-01-24 1302 static ssize_t fuse_cache_write_iter(struct kiocb *iocb, struct iov_iter *from)
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1303 {
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1304 struct file *file = iocb->ki_filp;
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1305 struct address_space *mapping = file->f_mapping;
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1306 ssize_t written = 0;
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1307 struct inode *inode = mapping->host;
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1308 ssize_t err;
56597c4ddc107c Zhou Jifeng 2023-10-28 1309 ssize_t count;
8981bdfda7445a Vivek Goyal 2020-10-09 1310 struct fuse_conn *fc = get_fuse_conn(inode);
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1311
8981bdfda7445a Vivek Goyal 2020-10-09 1312 if (fc->writeback_cache) {
4d99ff8f12eb20 Pavel Emelyanov 2013-10-10 1313 /* Update size (EOF optimization) and mode (SUID clearing) */
c6c745b81033a4 Miklos Szeredi 2021-10-22 1314 err = fuse_update_attributes(mapping->host, file,
c6c745b81033a4 Miklos Szeredi 2021-10-22 1315 STATX_SIZE | STATX_MODE);
4d99ff8f12eb20 Pavel Emelyanov 2013-10-10 1316 if (err)
4d99ff8f12eb20 Pavel Emelyanov 2013-10-10 1317 return err;
4d99ff8f12eb20 Pavel Emelyanov 2013-10-10 1318
8981bdfda7445a Vivek Goyal 2020-10-09 1319 if (fc->handle_killpriv_v2 &&
9452e93e6dae86 Christian Brauner 2023-01-13 1320 setattr_should_drop_suidgid(&nop_mnt_idmap,
9452e93e6dae86 Christian Brauner 2023-01-13 1321 file_inode(file))) {
8981bdfda7445a Vivek Goyal 2020-10-09 1322 goto writethrough;
8981bdfda7445a Vivek Goyal 2020-10-09 1323 }
8981bdfda7445a Vivek Goyal 2020-10-09 1324
84c3d55cc474f9 Al Viro 2014-04-03 1325 return generic_file_write_iter(iocb, from);
4d99ff8f12eb20 Pavel Emelyanov 2013-10-10 1326 }
4d99ff8f12eb20 Pavel Emelyanov 2013-10-10 1327
8981bdfda7445a Vivek Goyal 2020-10-09 1328 writethrough:
5955102c9984fa Al Viro 2016-01-22 1329 inode_lock(inode);
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1330
56597c4ddc107c Zhou Jifeng 2023-10-28 1331 count = generic_write_checks(iocb, from);
56597c4ddc107c Zhou Jifeng 2023-10-28 1332 if (count <= 0)
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1333 goto out;

Missing error code?

ea9b9907b82a09 Nicholas Piggin 2008-04-30 1334
56597c4ddc107c Zhou Jifeng 2023-10-28 1335 task_io_account_write(count);
56597c4ddc107c Zhou Jifeng 2023-10-28 1336
5fa8e0a1c6a762 Jan Kara 2015-05-21 1337 err = file_remove_privs(file);
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1338 if (err)
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1339 goto out;
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1340
c3b2da31483449 Josef Bacik 2012-03-26 1341 err = file_update_time(file);
c3b2da31483449 Josef Bacik 2012-03-26 1342 if (err)
c3b2da31483449 Josef Bacik 2012-03-26 1343 goto out;
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1344
2ba48ce513c4e5 Al Viro 2015-04-09 1345 if (iocb->ki_flags & IOCB_DIRECT) {
1af5bb491fbb41 Christoph Hellwig 2016-04-07 1346 written = generic_file_direct_write(iocb, from);
84c3d55cc474f9 Al Viro 2014-04-03 1347 if (written < 0 || !iov_iter_count(from))
4273b793ec6875 Anand Avati 2012-02-17 1348 goto out;
64d1b4dd826d88 Christoph Hellwig 2023-06-01 1349 written = direct_write_fallback(iocb, from, written,
64d1b4dd826d88 Christoph Hellwig 2023-06-01 1350 fuse_perform_write(iocb, from));
4273b793ec6875 Anand Avati 2012-02-17 1351 } else {
596df33d673d9d Christoph Hellwig 2023-06-01 1352 written = fuse_perform_write(iocb, from);
4273b793ec6875 Anand Avati 2012-02-17 1353 }
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1354 out:
5955102c9984fa Al Viro 2016-01-22 1355 inode_unlock(inode);
e1c0eecba1a415 Miklos Szeredi 2017-09-12 1356 if (written > 0)
e1c0eecba1a415 Miklos Szeredi 2017-09-12 1357 written = generic_write_sync(iocb, written);
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1358
ea9b9907b82a09 Nicholas Piggin 2008-04-30 @1359 return written ? written : err;
ea9b9907b82a09 Nicholas Piggin 2008-04-30 1360 }

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki