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]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
