Hi Goldwyn,

url:    
https://github.com/0day-ci/linux/commits/Goldwyn-Rodrigues/btrfs-Make-btrfs_direct_write-atomic-with-respect-to-inode_lock/20201219-001114
 
base:   https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git  
for-next
config: x86_64-randconfig-m001-20201229 (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]>

New smatch warnings:
fs/btrfs/file.c:1980 btrfs_direct_write() error: uninitialized symbol 'dsync'.

Old smatch warnings:
fs/btrfs/file.c:1865 __btrfs_buffered_write() error: uninitialized symbol 'ret'.
fs/btrfs/file.c:2013 btrfs_direct_write() error: uninitialized symbol 'dsync'.

vim +/dsync +1980 fs/btrfs/file.c

4e4cabece9f9c6b Goldwyn Rodrigues  2020-09-24  1910  static ssize_t 
btrfs_direct_write(struct kiocb *iocb, struct iov_iter *from)
d0215f3e5ebb580 Josef Bacik        2011-01-25  1911  {
d0215f3e5ebb580 Josef Bacik        2011-01-25  1912     struct file *file = 
iocb->ki_filp;
728404dacfddb53 Filipe Manana      2014-10-10  1913     struct inode *inode = 
file_inode(file);
4e4cabece9f9c6b Goldwyn Rodrigues  2020-09-24  1914     struct btrfs_fs_info 
*fs_info = btrfs_sb(inode->i_sb);
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1915     loff_t pos;
4e4cabece9f9c6b Goldwyn Rodrigues  2020-09-24  1916     ssize_t written = 0;
d0215f3e5ebb580 Josef Bacik        2011-01-25  1917     ssize_t 
written_buffered;
d0215f3e5ebb580 Josef Bacik        2011-01-25  1918     loff_t endbyte;
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1919     ssize_t err;
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1920     unsigned int 
ilock_flags = 0;
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1921     struct iomap_dio *dio = 
NULL;
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1922     bool dsync;
                                                        ^^^^^^^^^^
This needs to be "bool dsync = false;"

c352370633400d1 Goldwyn Rodrigues  2020-09-24  1923  
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1924     if (iocb->ki_flags & 
IOCB_NOWAIT)
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1925             ilock_flags |= 
BTRFS_ILOCK_TRY;
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1926  
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1927     /* If the write DIO is 
within EOF, use a shared lock */
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1928     if (iocb->ki_pos + 
iov_iter_count(from) <= i_size_read(inode))
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1929             ilock_flags |= 
BTRFS_ILOCK_SHARED;
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1930  
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1931  relock:
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1932     err = 
btrfs_inode_lock(inode, ilock_flags);
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1933     if (err < 0)
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1934             return err;
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1935  
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1936     err = 
generic_write_checks(iocb, from);
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1937     if (err <= 0) {
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1938             
btrfs_inode_unlock(inode, ilock_flags);
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1939             return err;
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1940     }
d0215f3e5ebb580 Josef Bacik        2011-01-25  1941  
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1942     err = 
btrfs_write_check(iocb, from, err);
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1943     if (err < 0)
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1944             goto out;
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1945  
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1946     pos = iocb->ki_pos;
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1947     /*
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1948      * Re-check since file 
size may have changed just before taking the
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1949      * lock or pos may have 
changed because of O_APPEND in generic_write_check()
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1950      */
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1951     if ((ilock_flags & 
BTRFS_ILOCK_SHARED) &&
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1952         pos + 
iov_iter_count(from) > i_size_read(inode)) {
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1953             
btrfs_inode_unlock(inode, ilock_flags);
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1954             ilock_flags &= 
~BTRFS_ILOCK_SHARED;
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1955             goto relock;
e9adabb9712ef94 Goldwyn Rodrigues  2020-09-24  1956     }
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1957  
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1958     if 
(check_direct_IO(fs_info, from, pos))
4e4cabece9f9c6b Goldwyn Rodrigues  2020-09-24  1959             goto buffered;
4e4cabece9f9c6b Goldwyn Rodrigues  2020-09-24  1960  
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1961     dio = 
__iomap_dio_rw(iocb, from, &btrfs_dio_iomap_ops,
4e4cabece9f9c6b Goldwyn Rodrigues  2020-09-24  1962                          
&btrfs_dio_ops, is_sync_kiocb(iocb));
4e4cabece9f9c6b Goldwyn Rodrigues  2020-09-24  1963  
d0215f3e5ebb580 Josef Bacik        2011-01-25  1964  
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1965     if 
(IS_ERR_OR_NULL(dio)) {
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1966             err = 
PTR_ERR_OR_ZERO(dio);
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1967             if (err < 0 && 
err != -ENOTBLK)
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1968                     goto 
out;
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1969     } else {
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1970             /*
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1971              * Remove the 
DSYNC flag because iomap_dio_complete() calls
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1972              * 
generic_write_sync() which may deadlock with btrfs_sync()
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1973              * on 
inode->i_rwsem
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1974              */
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1975             if 
(iocb->ki_flags & IOCB_DSYNC) {
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1976                     dsync = 
true;
                                                                        
^^^^^^^^^^^^^

e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1977                     
iocb->ki_flags &= ~IOCB_DSYNC;
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1978             }
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1979             written = 
iomap_dio_complete(dio);
e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18 @1980             if (dsync)
                                                                    ^^^^^

e7a8dd2d9537a7e Goldwyn Rodrigues  2020-12-18  1981                     
iocb->ki_flags |= IOCB_DSYNC;
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1982     }
a42fa643169d232 Goldwyn Rodrigues  2020-09-24  1983  
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1984     if (written < 0 || 
!iov_iter_count(from)) {
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1985             err = written;
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1986             goto out;
c352370633400d1 Goldwyn Rodrigues  2020-09-24  1987     }
d0215f3e5ebb580 Josef Bacik        2011-01-25  1988  

---
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