CC: [email protected]
TO: [email protected]

tree:   https://android.googlesource.com/kernel/common android-3.18
head:   ab8794a9fb6d3ba8ed9279d2ab30768e39f674b2
commit: 1bddce501380b4736d4231b436951f489d224849 [62/299] ext4: correct error 
label in ext4_rename()
:::::: branch date: 2 days ago
:::::: commit date: 7 weeks ago
config: i386-randconfig-m021-20210709 (attached as .config)
compiler: gcc-5 (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010

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/ext4/namei.c:3763 ext4_cross_rename() warn: Function too hairy.  No more 
merges.

Old smatch warnings:
fs/ext4/namei.c:1538 ext4_lookup() warn: inconsistent indenting

vim +3763 fs/ext4/namei.c

ac27a0ec112a08 Dave Kleikamp         2006-10-11  3679  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3680  static int 
ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3681                        
struct inode *new_dir, struct dentry *new_dentry)
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3682  {
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3683   handle_t *handle = NULL;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3684   struct ext4_renament 
old = {
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3685           .dir = old_dir,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3686           .dentry = 
old_dentry,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3687           .inode = 
old_dentry->d_inode,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3688   };
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3689   struct ext4_renament 
new = {
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3690           .dir = new_dir,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3691           .dentry = 
new_dentry,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3692           .inode = 
new_dentry->d_inode,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3693   };
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3694   u8 new_file_type;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3695   int retval;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3696  
de575945ac67e3 Theodore Ts'o         2016-12-28  3697   if 
((ext4_encrypted_inode(old_dir) &&
de575945ac67e3 Theodore Ts'o         2016-12-28  3698        
!ext4_has_encryption_key(old_dir)) ||
de575945ac67e3 Theodore Ts'o         2016-12-28  3699       
(ext4_encrypted_inode(new_dir) &&
de575945ac67e3 Theodore Ts'o         2016-12-28  3700        
!ext4_has_encryption_key(new_dir)))
de575945ac67e3 Theodore Ts'o         2016-12-28  3701           return -ENOKEY;
de575945ac67e3 Theodore Ts'o         2016-12-28  3702  
9aa70fa937082d Theodore Ts'o         2015-09-17  3703   if 
((ext4_encrypted_inode(old_dir) ||
9aa70fa937082d Theodore Ts'o         2015-09-17  3704        
ext4_encrypted_inode(new_dir)) &&
9aa70fa937082d Theodore Ts'o         2015-09-17  3705       (old_dir != 
new_dir) &&
9aa70fa937082d Theodore Ts'o         2015-09-17  3706       
(!ext4_is_child_context_consistent_with_parent(new_dir,
9aa70fa937082d Theodore Ts'o         2015-09-17  3707                           
                           old.inode) ||
9aa70fa937082d Theodore Ts'o         2015-09-17  3708        
!ext4_is_child_context_consistent_with_parent(old_dir,
9aa70fa937082d Theodore Ts'o         2015-09-17  3709                           
                           new.inode)))
9aa70fa937082d Theodore Ts'o         2015-09-17  3710           return -EPERM;
9aa70fa937082d Theodore Ts'o         2015-09-17  3711  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3712   
dquot_initialize(old.dir);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3713   
dquot_initialize(new.dir);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3714  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3715   old.bh = 
ext4_find_entry(old.dir, &old.dentry->d_name,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3716                           
 &old.de, &old.inlined);
36de928641ee48 Theodore Ts'o         2014-08-23  3717   if (IS_ERR(old.bh))
36de928641ee48 Theodore Ts'o         2014-08-23  3718           return 
PTR_ERR(old.bh);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3719   /*
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3720    *  Check for inode 
number is _not_ due to possible IO errors.
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3721    *  We might rmdir the 
source, keep it as pwd of some process
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3722    *  and merrily kill 
the link to whatever was created under the
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3723    *  same name. Goodbye 
sticky bit ;-<
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3724    */
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3725   retval = -ENOENT;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3726   if (!old.bh || 
le32_to_cpu(old.de->inode) != old.inode->i_ino)
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3727           goto end_rename;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3728  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3729   new.bh = 
ext4_find_entry(new.dir, &new.dentry->d_name,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3730                           
 &new.de, &new.inlined);
36de928641ee48 Theodore Ts'o         2014-08-23  3731   if (IS_ERR(new.bh)) {
36de928641ee48 Theodore Ts'o         2014-08-23  3732           retval = 
PTR_ERR(new.bh);
a9cfcd63e8d206 Theodore Ts'o         2014-09-03  3733           new.bh = NULL;
36de928641ee48 Theodore Ts'o         2014-08-23  3734           goto end_rename;
36de928641ee48 Theodore Ts'o         2014-08-23  3735   }
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3736  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3737   /* RENAME_EXCHANGE 
case: old *and* new must both exist */
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3738   if (!new.bh || 
le32_to_cpu(new.de->inode) != new.inode->i_ino)
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3739           goto end_rename;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3740  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3741   handle = 
ext4_journal_start(old.dir, EXT4_HT_DIR,
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3742           (2 * 
EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) +
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3743            2 * 
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 2));
b233a8cbeabd95 Konstantin Khlebnikov 2015-04-02  3744   if (IS_ERR(handle)) {
b233a8cbeabd95 Konstantin Khlebnikov 2015-04-02  3745           retval = 
PTR_ERR(handle);
b233a8cbeabd95 Konstantin Khlebnikov 2015-04-02  3746           handle = NULL;
b233a8cbeabd95 Konstantin Khlebnikov 2015-04-02  3747           goto end_rename;
b233a8cbeabd95 Konstantin Khlebnikov 2015-04-02  3748   }
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3749  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3750   if (IS_DIRSYNC(old.dir) 
|| IS_DIRSYNC(new.dir))
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3751           
ext4_handle_sync(handle);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3752  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3753   if 
(S_ISDIR(old.inode->i_mode)) {
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3754           old.is_dir = 
true;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3755           retval = 
ext4_rename_dir_prepare(handle, &old);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3756           if (retval)
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3757                   goto 
end_rename;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3758   }
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3759   if 
(S_ISDIR(new.inode->i_mode)) {
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3760           new.is_dir = 
true;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3761           retval = 
ext4_rename_dir_prepare(handle, &new);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3762           if (retval)
bd42998a6bcb9b Miklos Szeredi        2014-04-01 @3763                   goto 
end_rename;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3764   }
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3765  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3766   /*
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3767    * Other than the 
special case of overwriting a directory, parents'
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3768    * nlink only needs to 
be modified if this is a cross directory rename.
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3769    */
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3770   if (old.dir != new.dir 
&& old.is_dir != new.is_dir) {
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3771           
old.dir_nlink_delta = old.is_dir ? -1 : 1;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3772           
new.dir_nlink_delta = -old.dir_nlink_delta;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3773           retval = 
-EMLINK;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3774           if 
((old.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(old.dir)) ||
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3775               
(new.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(new.dir)))
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3776                   goto 
end_rename;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3777   }
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3778  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3779   new_file_type = 
new.de->file_type;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3780   retval = 
ext4_setent(handle, &new, old.inode->i_ino, old.de->file_type);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3781   if (retval)
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3782           goto end_rename;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3783  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3784   retval = 
ext4_setent(handle, &old, new.inode->i_ino, new_file_type);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3785   if (retval)
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3786           goto end_rename;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3787  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3788   /*
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3789    * Like most other Unix 
systems, set the ctime for inodes on a
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3790    * rename.
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3791    */
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3792   old.inode->i_ctime = 
ext4_current_time(old.inode);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3793   new.inode->i_ctime = 
ext4_current_time(new.inode);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3794   
ext4_mark_inode_dirty(handle, old.inode);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3795   
ext4_mark_inode_dirty(handle, new.inode);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3796  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3797   if (old.dir_bh) {
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3798           retval = 
ext4_rename_dir_finish(handle, &old, new.dir->i_ino);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3799           if (retval)
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3800                   goto 
end_rename;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3801   }
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3802   if (new.dir_bh) {
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3803           retval = 
ext4_rename_dir_finish(handle, &new, old.dir->i_ino);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3804           if (retval)
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3805                   goto 
end_rename;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3806   }
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3807   
ext4_update_dir_count(handle, &old);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3808   
ext4_update_dir_count(handle, &new);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3809   retval = 0;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3810  
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3811  end_rename:
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3812   brelse(old.dir_bh);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3813   brelse(new.dir_bh);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3814   brelse(old.bh);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3815   brelse(new.bh);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3816   if (handle)
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3817           
ext4_journal_stop(handle);
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3818   return retval;
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3819  }
bd42998a6bcb9b Miklos Szeredi        2014-04-01  3820  

:::::: The code at line 3763 was first introduced by commit
:::::: bd42998a6bcb9b1708dac9ca9876e3d304c16f3d ext4: add cross rename support

:::::: TO: Miklos Szeredi <[email protected]>
:::::: CC: Miklos Szeredi <[email protected]>

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