CC: [email protected]
BCC: [email protected]
CC: [email protected]
TO: Allison Henderson <[email protected]>
CC: Mark Tinguely <[email protected]>
CC: Dave Chinner <[email protected]>
CC: "Darrick J. Wong" <[email protected]>

tree:   https://github.com/allisonhenderson/xfs_work.git larp_cleanupv4_pptrs
head:   3d7771d8177638d5d115404cbee0b9a77cf0bb4c
commit: 726b39b480bc016f88942a3044669c4856232e7c [32/35] xfs: Add the parent 
pointer support to the  superblock version 5.
:::::: branch date: 19 hours ago
:::::: commit date: 19 hours ago
config: i386-randconfig-m031-20220509 
(https://download.01.org/0day-ci/archive/20220512/[email protected]/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.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/xfs/xfs_inode.c:3552 xfs_rename() error: uninitialized symbol 
'new_diroffset'.
fs/xfs/xfs_inode.c:3560 xfs_rename() error: uninitialized symbol 
'old_diroffset'.

vim +/new_diroffset +3552 fs/xfs/xfs_inode.c

7dcf5c3e4527cf Dave Chinner      2015-03-25  3194  
f6bba2017afb3b Dave Chinner      2013-08-12  3195  /*
f6bba2017afb3b Dave Chinner      2013-08-12  3196   * xfs_rename
f6bba2017afb3b Dave Chinner      2013-08-12  3197   */
f6bba2017afb3b Dave Chinner      2013-08-12  3198  int
f6bba2017afb3b Dave Chinner      2013-08-12  3199  xfs_rename(
f736d93d76d3e9 Christoph Hellwig 2021-01-21  3200       struct user_namespace   
        *mnt_userns,
7dcf5c3e4527cf Dave Chinner      2015-03-25  3201       struct xfs_inode        
        *src_dp,
f6bba2017afb3b Dave Chinner      2013-08-12  3202       struct xfs_name         
        *src_name,
7dcf5c3e4527cf Dave Chinner      2015-03-25  3203       struct xfs_inode        
        *src_ip,
7dcf5c3e4527cf Dave Chinner      2015-03-25  3204       struct xfs_inode        
        *target_dp,
f6bba2017afb3b Dave Chinner      2013-08-12  3205       struct xfs_name         
        *target_name,
7dcf5c3e4527cf Dave Chinner      2015-03-25  3206       struct xfs_inode        
        *target_ip,
d31a1825450062 Carlos Maiolino   2014-12-24  3207       unsigned int            
        flags)
f6bba2017afb3b Dave Chinner      2013-08-12  3208  {
7dcf5c3e4527cf Dave Chinner      2015-03-25  3209       struct xfs_mount        
        *mp = src_dp->i_mount;
7dcf5c3e4527cf Dave Chinner      2015-03-25  3210       struct xfs_trans        
        *tp;
7dcf5c3e4527cf Dave Chinner      2015-03-25  3211       struct xfs_inode        
        *wip = NULL;            /* whiteout inode */
7dcf5c3e4527cf Dave Chinner      2015-03-25  3212       struct xfs_inode        
        *inodes[__XFS_SORT_INODES];
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3213       int                     
        i;
95afcf5c7bca93 Dave Chinner      2015-03-25  3214       int                     
        num_inodes = __XFS_SORT_INODES;
2b93681f593577 Dave Chinner      2015-03-25  3215       bool                    
        new_parent = (src_dp != target_dp);
c19b3b05ae440d Dave Chinner      2016-02-09  3216       bool                    
        src_is_directory = S_ISDIR(VFS_I(src_ip)->i_mode);
f6bba2017afb3b Dave Chinner      2013-08-12  3217       int                     
        spaceres;
41667260bc84db Darrick J. Wong   2022-03-09  3218       bool                    
        retried = false;
41667260bc84db Darrick J. Wong   2022-03-09  3219       int                     
        error, nospace_error = 0;
548859ddf49f8d Allison Henderson 2022-03-22  3220       struct 
xfs_parent_name_rec      new_rec;
548859ddf49f8d Allison Henderson 2022-03-22  3221       struct 
xfs_parent_name_rec      old_rec;
548859ddf49f8d Allison Henderson 2022-03-22  3222       xfs_dir2_dataptr_t      
        new_diroffset;
548859ddf49f8d Allison Henderson 2022-03-22  3223       xfs_dir2_dataptr_t      
        old_diroffset;
548859ddf49f8d Allison Henderson 2022-03-22  3224       struct xfs_da_args      
        new_args = {
548859ddf49f8d Allison Henderson 2022-03-22  3225               .dp             
= src_ip,
548859ddf49f8d Allison Henderson 2022-03-22  3226               .geo            
= mp->m_attr_geo,
548859ddf49f8d Allison Henderson 2022-03-22  3227               .whichfork      
= XFS_ATTR_FORK,
548859ddf49f8d Allison Henderson 2022-03-22  3228               .attr_filter    
= XFS_ATTR_PARENT,
548859ddf49f8d Allison Henderson 2022-03-22  3229               .op_flags       
= XFS_DA_OP_OKNOENT,
548859ddf49f8d Allison Henderson 2022-03-22  3230               .name           
= (const uint8_t *)&new_rec,
548859ddf49f8d Allison Henderson 2022-03-22  3231               .namelen        
= sizeof(new_rec),
548859ddf49f8d Allison Henderson 2022-03-22  3232               .value          
= (void *)target_name->name,
548859ddf49f8d Allison Henderson 2022-03-22  3233               .valuelen       
= target_name->len,
548859ddf49f8d Allison Henderson 2022-03-22  3234       };
548859ddf49f8d Allison Henderson 2022-03-22  3235       struct xfs_da_args      
        old_args = {
548859ddf49f8d Allison Henderson 2022-03-22  3236               .dp             
= src_ip,
548859ddf49f8d Allison Henderson 2022-03-22  3237               .geo            
= mp->m_attr_geo,
548859ddf49f8d Allison Henderson 2022-03-22  3238               .whichfork      
= XFS_ATTR_FORK,
548859ddf49f8d Allison Henderson 2022-03-22  3239               .attr_filter    
= XFS_ATTR_PARENT,
548859ddf49f8d Allison Henderson 2022-03-22  3240               .op_flags       
= XFS_DA_OP_OKNOENT,
548859ddf49f8d Allison Henderson 2022-03-22  3241               .name           
= (const uint8_t *)&old_rec,
548859ddf49f8d Allison Henderson 2022-03-22  3242               .namelen        
= sizeof(old_rec),
548859ddf49f8d Allison Henderson 2022-03-22  3243               .value          
= NULL,
548859ddf49f8d Allison Henderson 2022-03-22  3244               .valuelen       
= 0,
548859ddf49f8d Allison Henderson 2022-03-22  3245       };
f6bba2017afb3b Dave Chinner      2013-08-12  3246  
f6bba2017afb3b Dave Chinner      2013-08-12  3247       
trace_xfs_rename(src_dp, target_dp, src_name, target_name);
f6bba2017afb3b Dave Chinner      2013-08-12  3248  
eeacd3217b8fa8 Dave Chinner      2015-03-25  3249       if ((flags & 
RENAME_EXCHANGE) && !target_ip)
eeacd3217b8fa8 Dave Chinner      2015-03-25  3250               return -EINVAL;
eeacd3217b8fa8 Dave Chinner      2015-03-25  3251  
7dcf5c3e4527cf Dave Chinner      2015-03-25  3252       /*
7dcf5c3e4527cf Dave Chinner      2015-03-25  3253        * If we are doing a 
whiteout operation, allocate the whiteout inode
7dcf5c3e4527cf Dave Chinner      2015-03-25  3254        * we will be placing 
at the target and ensure the type is set
7dcf5c3e4527cf Dave Chinner      2015-03-25  3255        * appropriately.
7dcf5c3e4527cf Dave Chinner      2015-03-25  3256        */
7dcf5c3e4527cf Dave Chinner      2015-03-25  3257       if (flags & 
RENAME_WHITEOUT) {
f736d93d76d3e9 Christoph Hellwig 2021-01-21  3258               error = 
xfs_rename_alloc_whiteout(mnt_userns, target_dp, &wip);
7dcf5c3e4527cf Dave Chinner      2015-03-25  3259               if (error)
7dcf5c3e4527cf Dave Chinner      2015-03-25  3260                       return 
error;
f6bba2017afb3b Dave Chinner      2013-08-12  3261  
7dcf5c3e4527cf Dave Chinner      2015-03-25  3262               /* setup target 
dirent info as whiteout */
7dcf5c3e4527cf Dave Chinner      2015-03-25  3263               src_name->type 
= XFS_DIR3_FT_CHRDEV;
7dcf5c3e4527cf Dave Chinner      2015-03-25  3264       }
f6bba2017afb3b Dave Chinner      2013-08-12  3265  
7dcf5c3e4527cf Dave Chinner      2015-03-25  3266       
xfs_sort_for_rename(src_dp, target_dp, src_ip, target_ip, wip,
f6bba2017afb3b Dave Chinner      2013-08-12  3267                               
inodes, &num_inodes);
548859ddf49f8d Allison Henderson 2022-03-22  3268       if (xfs_has_larp(mp)) {
548859ddf49f8d Allison Henderson 2022-03-22  3269               error = 
xfs_attr_use_log_assist(mp);
548859ddf49f8d Allison Henderson 2022-03-22  3270               if (error)
548859ddf49f8d Allison Henderson 2022-03-22  3271                       goto 
out_release_wip;
548859ddf49f8d Allison Henderson 2022-03-22  3272       }
f6bba2017afb3b Dave Chinner      2013-08-12  3273  
41667260bc84db Darrick J. Wong   2022-03-09  3274  retry:
41667260bc84db Darrick J. Wong   2022-03-09  3275       nospace_error = 0;
f6bba2017afb3b Dave Chinner      2013-08-12  3276       spaceres = 
XFS_RENAME_SPACE_RES(mp, target_name->len);
253f4911f297b8 Christoph Hellwig 2016-04-06  3277       error = 
xfs_trans_alloc(mp, &M_RES(mp)->tr_rename, spaceres, 0, 0, &tp);
2451337dd04390 Dave Chinner      2014-06-25  3278       if (error == -ENOSPC) {
41667260bc84db Darrick J. Wong   2022-03-09  3279               nospace_error = 
error;
f6bba2017afb3b Dave Chinner      2013-08-12  3280               spaceres = 0;
253f4911f297b8 Christoph Hellwig 2016-04-06  3281               error = 
xfs_trans_alloc(mp, &M_RES(mp)->tr_rename, 0, 0, 0,
253f4911f297b8 Christoph Hellwig 2016-04-06  3282                               
&tp);
f6bba2017afb3b Dave Chinner      2013-08-12  3283       }
445883e8133975 Dave Chinner      2015-03-25  3284       if (error)
548859ddf49f8d Allison Henderson 2022-03-22  3285               goto 
drop_incompat;
f6bba2017afb3b Dave Chinner      2013-08-12  3286  
f6bba2017afb3b Dave Chinner      2013-08-12  3287       /*
f6bba2017afb3b Dave Chinner      2013-08-12  3288        * Attach the dquots to 
the inodes
f6bba2017afb3b Dave Chinner      2013-08-12  3289        */
f6bba2017afb3b Dave Chinner      2013-08-12  3290       error = 
xfs_qm_vop_rename_dqattach(inodes);
445883e8133975 Dave Chinner      2015-03-25  3291       if (error)
445883e8133975 Dave Chinner      2015-03-25  3292               goto 
out_trans_cancel;
f6bba2017afb3b Dave Chinner      2013-08-12  3293  
f6bba2017afb3b Dave Chinner      2013-08-12  3294       /*
f6bba2017afb3b Dave Chinner      2013-08-12  3295        * Lock all the 
participating inodes. Depending upon whether
f6bba2017afb3b Dave Chinner      2013-08-12  3296        * the target_name 
exists in the target directory, and
f6bba2017afb3b Dave Chinner      2013-08-12  3297        * whether the target 
directory is the same as the source
f6bba2017afb3b Dave Chinner      2013-08-12  3298        * directory, we can 
lock from 2 to 4 inodes.
f6bba2017afb3b Dave Chinner      2013-08-12  3299        */
f6bba2017afb3b Dave Chinner      2013-08-12  3300       xfs_lock_inodes(inodes, 
num_inodes, XFS_ILOCK_EXCL);
f6bba2017afb3b Dave Chinner      2013-08-12  3301  
f6bba2017afb3b Dave Chinner      2013-08-12  3302       /*
f6bba2017afb3b Dave Chinner      2013-08-12  3303        * Join all the inodes 
to the transaction. From this point on,
f6bba2017afb3b Dave Chinner      2013-08-12  3304        * we can rely on 
either trans_commit or trans_cancel to unlock
f6bba2017afb3b Dave Chinner      2013-08-12  3305        * them.
f6bba2017afb3b Dave Chinner      2013-08-12  3306        */
548859ddf49f8d Allison Henderson 2022-03-22  3307       xfs_trans_ijoin(tp, 
src_dp, 0);
f6bba2017afb3b Dave Chinner      2013-08-12  3308       if (new_parent)
548859ddf49f8d Allison Henderson 2022-03-22  3309               
xfs_trans_ijoin(tp, target_dp, 0);
548859ddf49f8d Allison Henderson 2022-03-22  3310       xfs_trans_ijoin(tp, 
src_ip, 0);
f6bba2017afb3b Dave Chinner      2013-08-12  3311       if (target_ip)
548859ddf49f8d Allison Henderson 2022-03-22  3312               
xfs_trans_ijoin(tp, target_ip, 0);
7dcf5c3e4527cf Dave Chinner      2015-03-25  3313       if (wip)
548859ddf49f8d Allison Henderson 2022-03-22  3314               
xfs_trans_ijoin(tp, wip, 0);
f6bba2017afb3b Dave Chinner      2013-08-12  3315  
f6bba2017afb3b Dave Chinner      2013-08-12  3316       /*
f6bba2017afb3b Dave Chinner      2013-08-12  3317        * If we are using 
project inheritance, we only allow renames
f6bba2017afb3b Dave Chinner      2013-08-12  3318        * into our tree when 
the project IDs are the same; else the
f6bba2017afb3b Dave Chinner      2013-08-12  3319        * tree quota mechanism 
would be circumvented.
f6bba2017afb3b Dave Chinner      2013-08-12  3320        */
db07349da2f564 Christoph Hellwig 2021-03-29  3321       if 
(unlikely((target_dp->i_diflags & XFS_DIFLAG_PROJINHERIT) &&
ceaf603c7024d3 Christoph Hellwig 2021-03-29  3322                    
target_dp->i_projid != src_ip->i_projid)) {
2451337dd04390 Dave Chinner      2014-06-25  3323               error = -EXDEV;
548859ddf49f8d Allison Henderson 2022-03-22  3324               goto out_unlock;
f6bba2017afb3b Dave Chinner      2013-08-12  3325       }
f6bba2017afb3b Dave Chinner      2013-08-12  3326  
eeacd3217b8fa8 Dave Chinner      2015-03-25  3327       /* RENAME_EXCHANGE is 
unique from here on. */
548859ddf49f8d Allison Henderson 2022-03-22  3328       if (flags & 
RENAME_EXCHANGE) {
548859ddf49f8d Allison Henderson 2022-03-22  3329               error = 
xfs_cross_rename(tp, src_dp, src_name, src_ip,
d31a1825450062 Carlos Maiolino   2014-12-24  3330                               
        target_dp, target_name, target_ip,
f16dea54b789aa Brian Foster      2018-07-11  3331                               
        spaceres);
548859ddf49f8d Allison Henderson 2022-03-22  3332               goto out_pptr;
548859ddf49f8d Allison Henderson 2022-03-22  3333       }
41667260bc84db Darrick J. Wong   2022-03-09  3334       /*
41667260bc84db Darrick J. Wong   2022-03-09  3335        * Try to reserve quota 
to handle an expansion of the target directory.
41667260bc84db Darrick J. Wong   2022-03-09  3336        * We'll allow the 
rename to continue in reservationless mode if we hit
41667260bc84db Darrick J. Wong   2022-03-09  3337        * a space usage 
constraint.  If we trigger reservationless mode, save
41667260bc84db Darrick J. Wong   2022-03-09  3338        * the errno if there 
isn't any free space in the target directory.
41667260bc84db Darrick J. Wong   2022-03-09  3339        */
41667260bc84db Darrick J. Wong   2022-03-09  3340       if (spaceres != 0) {
41667260bc84db Darrick J. Wong   2022-03-09  3341               error = 
xfs_trans_reserve_quota_nblks(tp, target_dp, spaceres,
41667260bc84db Darrick J. Wong   2022-03-09  3342                               
0, false);
41667260bc84db Darrick J. Wong   2022-03-09  3343               if (error == 
-EDQUOT || error == -ENOSPC) {
41667260bc84db Darrick J. Wong   2022-03-09  3344                       if 
(!retried) {
41667260bc84db Darrick J. Wong   2022-03-09  3345                               
xfs_trans_cancel(tp);
41667260bc84db Darrick J. Wong   2022-03-09  3346                               
xfs_blockgc_free_quota(target_dp, 0);
41667260bc84db Darrick J. Wong   2022-03-09  3347                               
retried = true;
41667260bc84db Darrick J. Wong   2022-03-09  3348                               
goto retry;
41667260bc84db Darrick J. Wong   2022-03-09  3349                       }
41667260bc84db Darrick J. Wong   2022-03-09  3350  
41667260bc84db Darrick J. Wong   2022-03-09  3351                       
nospace_error = error;
41667260bc84db Darrick J. Wong   2022-03-09  3352                       
spaceres = 0;
41667260bc84db Darrick J. Wong   2022-03-09  3353                       error = 
0;
41667260bc84db Darrick J. Wong   2022-03-09  3354               }
41667260bc84db Darrick J. Wong   2022-03-09  3355               if (error)
41667260bc84db Darrick J. Wong   2022-03-09  3356                       goto 
out_trans_cancel;
41667260bc84db Darrick J. Wong   2022-03-09  3357       }
41667260bc84db Darrick J. Wong   2022-03-09  3358  
f6bba2017afb3b Dave Chinner      2013-08-12  3359       /*
bc56ad8c74b858 kaixuxia          2019-09-03  3360        * Check for expected 
errors before we dirty the transaction
bc56ad8c74b858 kaixuxia          2019-09-03  3361        * so we can return an 
error without a transaction abort.
f6bba2017afb3b Dave Chinner      2013-08-12  3362        */
f6bba2017afb3b Dave Chinner      2013-08-12  3363       if (target_ip == NULL) {
f6bba2017afb3b Dave Chinner      2013-08-12  3364               /*
f6bba2017afb3b Dave Chinner      2013-08-12  3365                * If there's 
no space reservation, check the entry will
f6bba2017afb3b Dave Chinner      2013-08-12  3366                * fit before 
actually inserting it.
f6bba2017afb3b Dave Chinner      2013-08-12  3367                */
94f3cad555d660 Eric Sandeen      2014-09-09  3368               if (!spaceres) {
94f3cad555d660 Eric Sandeen      2014-09-09  3369                       error = 
xfs_dir_canenter(tp, target_dp, target_name);
f6bba2017afb3b Dave Chinner      2013-08-12  3370                       if 
(error)
445883e8133975 Dave Chinner      2015-03-25  3371                               
goto out_trans_cancel;
94f3cad555d660 Eric Sandeen      2014-09-09  3372               }
bc56ad8c74b858 kaixuxia          2019-09-03  3373       } else {
bc56ad8c74b858 kaixuxia          2019-09-03  3374               /*
bc56ad8c74b858 kaixuxia          2019-09-03  3375                * If target 
exists and it's a directory, check that whether
bc56ad8c74b858 kaixuxia          2019-09-03  3376                * it can be 
destroyed.
bc56ad8c74b858 kaixuxia          2019-09-03  3377                */
bc56ad8c74b858 kaixuxia          2019-09-03  3378               if 
(S_ISDIR(VFS_I(target_ip)->i_mode) &&
bc56ad8c74b858 kaixuxia          2019-09-03  3379                   
(!xfs_dir_isempty(target_ip) ||
bc56ad8c74b858 kaixuxia          2019-09-03  3380                    
(VFS_I(target_ip)->i_nlink > 2))) {
bc56ad8c74b858 kaixuxia          2019-09-03  3381                       error = 
-EEXIST;
bc56ad8c74b858 kaixuxia          2019-09-03  3382                       goto 
out_trans_cancel;
bc56ad8c74b858 kaixuxia          2019-09-03  3383               }
bc56ad8c74b858 kaixuxia          2019-09-03  3384       }
bc56ad8c74b858 kaixuxia          2019-09-03  3385  
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3386       /*
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3387        * Lock the AGI buffers 
we need to handle bumping the nlink of the
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3388        * whiteout inode off 
the unlinked list and to handle dropping the
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3389        * nlink of the target 
inode.  Per locking order rules, do this in
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3390        * increasing AG order 
and before directory block allocation tries to
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3391        * grab AGFs because we 
grab AGIs before AGFs.
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3392        *
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3393        * The (vfs) caller 
must ensure that if src is a directory then
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3394        * target_ip is either 
null or an empty directory.
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3395        */
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3396       for (i = 0; i < 
num_inodes && inodes[i] != NULL; i++) {
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3397               if (inodes[i] 
== wip ||
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3398                   (inodes[i] 
== target_ip &&
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3399                    
(VFS_I(target_ip)->i_nlink == 1 || src_is_directory))) {
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3400                       struct 
xfs_buf  *bp;
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3401                       
xfs_agnumber_t  agno;
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3402  
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3403                       agno = 
XFS_INO_TO_AGNO(mp, inodes[i]->i_ino);
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3404                       error = 
xfs_read_agi(mp, tp, agno, &bp);
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3405                       if 
(error)
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3406                               
goto out_trans_cancel;
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3407               }
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3408       }
6da1b4b1ab36d8 Darrick J. Wong   2021-01-22  3409  
bc56ad8c74b858 kaixuxia          2019-09-03  3410       /*
bc56ad8c74b858 kaixuxia          2019-09-03  3411        * Directory entry 
creation below may acquire the AGF. Remove
bc56ad8c74b858 kaixuxia          2019-09-03  3412        * the whiteout from 
the unlinked list first to preserve correct
bc56ad8c74b858 kaixuxia          2019-09-03  3413        * AGI/AGF locking 
order. This dirties the transaction so failures
bc56ad8c74b858 kaixuxia          2019-09-03  3414        * after this point 
will abort and log recovery will clean up the
bc56ad8c74b858 kaixuxia          2019-09-03  3415        * mess.
bc56ad8c74b858 kaixuxia          2019-09-03  3416        *
bc56ad8c74b858 kaixuxia          2019-09-03  3417        * For whiteouts, we 
need to bump the link count on the whiteout
bc56ad8c74b858 kaixuxia          2019-09-03  3418        * inode. After this 
point, we have a real link, clear the tmpfile
bc56ad8c74b858 kaixuxia          2019-09-03  3419        * state flag from the 
inode so it doesn't accidentally get misused
bc56ad8c74b858 kaixuxia          2019-09-03  3420        * in future.
bc56ad8c74b858 kaixuxia          2019-09-03  3421        */
bc56ad8c74b858 kaixuxia          2019-09-03  3422       if (wip) {
f40aadb2bb64fe Dave Chinner      2021-06-02  3423               struct 
xfs_perag        *pag;
f40aadb2bb64fe Dave Chinner      2021-06-02  3424  
bc56ad8c74b858 kaixuxia          2019-09-03  3425               
ASSERT(VFS_I(wip)->i_nlink == 0);
f40aadb2bb64fe Dave Chinner      2021-06-02  3426  
f40aadb2bb64fe Dave Chinner      2021-06-02  3427               pag = 
xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, wip->i_ino));
f40aadb2bb64fe Dave Chinner      2021-06-02  3428               error = 
xfs_iunlink_remove(tp, pag, wip);
f40aadb2bb64fe Dave Chinner      2021-06-02  3429               
xfs_perag_put(pag);
bc56ad8c74b858 kaixuxia          2019-09-03  3430               if (error)
bc56ad8c74b858 kaixuxia          2019-09-03  3431                       goto 
out_trans_cancel;
bc56ad8c74b858 kaixuxia          2019-09-03  3432  
bc56ad8c74b858 kaixuxia          2019-09-03  3433               
xfs_bumplink(tp, wip);
bc56ad8c74b858 kaixuxia          2019-09-03  3434               
VFS_I(wip)->i_state &= ~I_LINKABLE;
bc56ad8c74b858 kaixuxia          2019-09-03  3435       }
bc56ad8c74b858 kaixuxia          2019-09-03  3436  
bc56ad8c74b858 kaixuxia          2019-09-03  3437       /*
bc56ad8c74b858 kaixuxia          2019-09-03  3438        * Set up the target.
bc56ad8c74b858 kaixuxia          2019-09-03  3439        */
bc56ad8c74b858 kaixuxia          2019-09-03  3440       if (target_ip == NULL) {
f6bba2017afb3b Dave Chinner      2013-08-12  3441               /*
f6bba2017afb3b Dave Chinner      2013-08-12  3442                * If target 
does not exist and the rename crosses
f6bba2017afb3b Dave Chinner      2013-08-12  3443                * directories, 
adjust the target directory link count
f6bba2017afb3b Dave Chinner      2013-08-12  3444                * to account 
for the ".." reference from the new entry.
f6bba2017afb3b Dave Chinner      2013-08-12  3445                */
f6bba2017afb3b Dave Chinner      2013-08-12  3446               error = 
xfs_dir_createname(tp, target_dp, target_name,
548859ddf49f8d Allison Henderson 2022-03-22  3447                               
           src_ip->i_ino, spaceres, &new_diroffset);
f6bba2017afb3b Dave Chinner      2013-08-12  3448               if (error)
c8eac49ef798a7 Brian Foster      2018-07-24  3449                       goto 
out_trans_cancel;
f6bba2017afb3b Dave Chinner      2013-08-12  3450  
f6bba2017afb3b Dave Chinner      2013-08-12  3451               
xfs_trans_ichgtime(tp, target_dp,
f6bba2017afb3b Dave Chinner      2013-08-12  3452                               
        XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
f6bba2017afb3b Dave Chinner      2013-08-12  3453  
f6bba2017afb3b Dave Chinner      2013-08-12  3454               if (new_parent 
&& src_is_directory) {
910832697cf855 Eric Sandeen      2019-05-01  3455                       
xfs_bumplink(tp, target_dp);
f6bba2017afb3b Dave Chinner      2013-08-12  3456               }
f6bba2017afb3b Dave Chinner      2013-08-12  3457       } else { /* target_ip 
!= NULL */
f6bba2017afb3b Dave Chinner      2013-08-12  3458               /*
f6bba2017afb3b Dave Chinner      2013-08-12  3459                * Link the 
source inode under the target name.
f6bba2017afb3b Dave Chinner      2013-08-12  3460                * If the 
source inode is a directory and we are moving
f6bba2017afb3b Dave Chinner      2013-08-12  3461                * it across 
directories, its ".." entry will be
f6bba2017afb3b Dave Chinner      2013-08-12  3462                * inconsistent 
until we replace that down below.
f6bba2017afb3b Dave Chinner      2013-08-12  3463                *
f6bba2017afb3b Dave Chinner      2013-08-12  3464                * In case 
there is already an entry with the same
f6bba2017afb3b Dave Chinner      2013-08-12  3465                * name at the 
destination directory, remove it first.
f6bba2017afb3b Dave Chinner      2013-08-12  3466                */
f6bba2017afb3b Dave Chinner      2013-08-12  3467               error = 
xfs_dir_replace(tp, target_dp, target_name,
548859ddf49f8d Allison Henderson 2022-03-22  3468                               
        src_ip->i_ino, spaceres, &new_diroffset);
f6bba2017afb3b Dave Chinner      2013-08-12  3469               if (error)
c8eac49ef798a7 Brian Foster      2018-07-24  3470                       goto 
out_trans_cancel;
f6bba2017afb3b Dave Chinner      2013-08-12  3471  
f6bba2017afb3b Dave Chinner      2013-08-12  3472               
xfs_trans_ichgtime(tp, target_dp,
f6bba2017afb3b Dave Chinner      2013-08-12  3473                               
        XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
f6bba2017afb3b Dave Chinner      2013-08-12  3474  
f6bba2017afb3b Dave Chinner      2013-08-12  3475               /*
f6bba2017afb3b Dave Chinner      2013-08-12  3476                * Decrement 
the link count on the target since the target
f6bba2017afb3b Dave Chinner      2013-08-12  3477                * dir no 
longer points to it.
f6bba2017afb3b Dave Chinner      2013-08-12  3478                */
f6bba2017afb3b Dave Chinner      2013-08-12  3479               error = 
xfs_droplink(tp, target_ip);
f6bba2017afb3b Dave Chinner      2013-08-12  3480               if (error)
c8eac49ef798a7 Brian Foster      2018-07-24  3481                       goto 
out_trans_cancel;
f6bba2017afb3b Dave Chinner      2013-08-12  3482  
f6bba2017afb3b Dave Chinner      2013-08-12  3483               if 
(src_is_directory) {
f6bba2017afb3b Dave Chinner      2013-08-12  3484                       /*
f6bba2017afb3b Dave Chinner      2013-08-12  3485                        * Drop 
the link from the old "." entry.
f6bba2017afb3b Dave Chinner      2013-08-12  3486                        */
f6bba2017afb3b Dave Chinner      2013-08-12  3487                       error = 
xfs_droplink(tp, target_ip);
f6bba2017afb3b Dave Chinner      2013-08-12  3488                       if 
(error)
c8eac49ef798a7 Brian Foster      2018-07-24  3489                               
goto out_trans_cancel;
f6bba2017afb3b Dave Chinner      2013-08-12  3490               }
f6bba2017afb3b Dave Chinner      2013-08-12  3491       } /* target_ip != NULL 
*/
f6bba2017afb3b Dave Chinner      2013-08-12  3492  
f6bba2017afb3b Dave Chinner      2013-08-12  3493       /*
f6bba2017afb3b Dave Chinner      2013-08-12  3494        * Remove the source.
f6bba2017afb3b Dave Chinner      2013-08-12  3495        */
f6bba2017afb3b Dave Chinner      2013-08-12  3496       if (new_parent && 
src_is_directory) {
f6bba2017afb3b Dave Chinner      2013-08-12  3497               /*
f6bba2017afb3b Dave Chinner      2013-08-12  3498                * Rewrite the 
".." entry to point to the new
f6bba2017afb3b Dave Chinner      2013-08-12  3499                * directory.
f6bba2017afb3b Dave Chinner      2013-08-12  3500                */
f6bba2017afb3b Dave Chinner      2013-08-12  3501               error = 
xfs_dir_replace(tp, src_ip, &xfs_name_dotdot,
548859ddf49f8d Allison Henderson 2022-03-22  3502                               
        target_dp->i_ino, spaceres, &new_diroffset);
2451337dd04390 Dave Chinner      2014-06-25  3503               ASSERT(error != 
-EEXIST);
f6bba2017afb3b Dave Chinner      2013-08-12  3504               if (error)
c8eac49ef798a7 Brian Foster      2018-07-24  3505                       goto 
out_trans_cancel;
f6bba2017afb3b Dave Chinner      2013-08-12  3506       }
f6bba2017afb3b Dave Chinner      2013-08-12  3507  
f6bba2017afb3b Dave Chinner      2013-08-12  3508       /*
f6bba2017afb3b Dave Chinner      2013-08-12  3509        * We always want to 
hit the ctime on the source inode.
f6bba2017afb3b Dave Chinner      2013-08-12  3510        *
f6bba2017afb3b Dave Chinner      2013-08-12  3511        * This isn't strictly 
required by the standards since the source
f6bba2017afb3b Dave Chinner      2013-08-12  3512        * inode isn't really 
being changed, but old unix file systems did
f6bba2017afb3b Dave Chinner      2013-08-12  3513        * it and some 
incremental backup programs won't work without it.
f6bba2017afb3b Dave Chinner      2013-08-12  3514        */
f6bba2017afb3b Dave Chinner      2013-08-12  3515       xfs_trans_ichgtime(tp, 
src_ip, XFS_ICHGTIME_CHG);
f6bba2017afb3b Dave Chinner      2013-08-12  3516       xfs_trans_log_inode(tp, 
src_ip, XFS_ILOG_CORE);
f6bba2017afb3b Dave Chinner      2013-08-12  3517  
f6bba2017afb3b Dave Chinner      2013-08-12  3518       /*
f6bba2017afb3b Dave Chinner      2013-08-12  3519        * Adjust the link 
count on src_dp.  This is necessary when
f6bba2017afb3b Dave Chinner      2013-08-12  3520        * renaming a 
directory, either within one parent when
f6bba2017afb3b Dave Chinner      2013-08-12  3521        * the target existed, 
or across two parent directories.
f6bba2017afb3b Dave Chinner      2013-08-12  3522        */
f6bba2017afb3b Dave Chinner      2013-08-12  3523       if (src_is_directory && 
(new_parent || target_ip != NULL)) {
f6bba2017afb3b Dave Chinner      2013-08-12  3524  
f6bba2017afb3b Dave Chinner      2013-08-12  3525               /*
f6bba2017afb3b Dave Chinner      2013-08-12  3526                * Decrement 
link count on src_directory since the
f6bba2017afb3b Dave Chinner      2013-08-12  3527                * entry that's 
moved no longer points to it.
f6bba2017afb3b Dave Chinner      2013-08-12  3528                */
f6bba2017afb3b Dave Chinner      2013-08-12  3529               error = 
xfs_droplink(tp, src_dp);
f6bba2017afb3b Dave Chinner      2013-08-12  3530               if (error)
c8eac49ef798a7 Brian Foster      2018-07-24  3531                       goto 
out_trans_cancel;
f6bba2017afb3b Dave Chinner      2013-08-12  3532       }
f6bba2017afb3b Dave Chinner      2013-08-12  3533  
7dcf5c3e4527cf Dave Chinner      2015-03-25  3534       /*
7dcf5c3e4527cf Dave Chinner      2015-03-25  3535        * For whiteouts, we 
only need to update the source dirent with the
7dcf5c3e4527cf Dave Chinner      2015-03-25  3536        * inode number of the 
whiteout inode rather than removing it
7dcf5c3e4527cf Dave Chinner      2015-03-25  3537        * altogether.
7dcf5c3e4527cf Dave Chinner      2015-03-25  3538        */
49076df67754f5 Chandan Babu R    2022-04-11  3539       if (wip)
7dcf5c3e4527cf Dave Chinner      2015-03-25  3540               error = 
xfs_dir_replace(tp, src_dp, src_name, wip->i_ino,
548859ddf49f8d Allison Henderson 2022-03-22  3541                               
        spaceres, &old_diroffset);
49076df67754f5 Chandan Babu R    2022-04-11  3542       else
f6bba2017afb3b Dave Chinner      2013-08-12  3543               error = 
xfs_dir_removename(tp, src_dp, src_name, src_ip->i_ino,
548859ddf49f8d Allison Henderson 2022-03-22  3544                               
           spaceres, &old_diroffset);
548859ddf49f8d Allison Henderson 2022-03-22  3545  
548859ddf49f8d Allison Henderson 2022-03-22  3546       if (error)
548859ddf49f8d Allison Henderson 2022-03-22  3547               goto 
out_trans_cancel;
548859ddf49f8d Allison Henderson 2022-03-22  3548  
548859ddf49f8d Allison Henderson 2022-03-22  3549  out_pptr:
548859ddf49f8d Allison Henderson 2022-03-22  3550       if 
(xfs_sb_version_hasparent(&mp->m_sb)) {
548859ddf49f8d Allison Henderson 2022-03-22  3551               new_args.trans  
= tp;
548859ddf49f8d Allison Henderson 2022-03-22 @3552               
xfs_init_parent_name_rec(&new_rec, target_dp, new_diroffset);
548859ddf49f8d Allison Henderson 2022-03-22  3553               
new_args.hashval = xfs_da_hashname(new_args.name,
548859ddf49f8d Allison Henderson 2022-03-22  3554                               
                   new_args.namelen);
548859ddf49f8d Allison Henderson 2022-03-22  3555               error =  
xfs_attr_defer_add(&new_args);
548859ddf49f8d Allison Henderson 2022-03-22  3556               if (error)
548859ddf49f8d Allison Henderson 2022-03-22  3557                       goto 
out_trans_cancel;
02092a2f034fde Chandan Babu R    2021-01-22  3558  
548859ddf49f8d Allison Henderson 2022-03-22  3559               old_args.trans  
= tp;
548859ddf49f8d Allison Henderson 2022-03-22 @3560               
xfs_init_parent_name_rec(&old_rec, src_dp, old_diroffset);
548859ddf49f8d Allison Henderson 2022-03-22  3561               
old_args.hashval = xfs_da_hashname(old_args.name,
548859ddf49f8d Allison Henderson 2022-03-22  3562                               
                   old_args.namelen);
548859ddf49f8d Allison Henderson 2022-03-22  3563               error = 
xfs_attr_defer_remove(&old_args);
f6bba2017afb3b Dave Chinner      2013-08-12  3564               if (error)
c8eac49ef798a7 Brian Foster      2018-07-24  3565                       goto 
out_trans_cancel;
548859ddf49f8d Allison Henderson 2022-03-22  3566       }
f6bba2017afb3b Dave Chinner      2013-08-12  3567  
f6bba2017afb3b Dave Chinner      2013-08-12  3568       xfs_trans_ichgtime(tp, 
src_dp, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG);
f6bba2017afb3b Dave Chinner      2013-08-12  3569       xfs_trans_log_inode(tp, 
src_dp, XFS_ILOG_CORE);
f6bba2017afb3b Dave Chinner      2013-08-12  3570       if (new_parent)
f6bba2017afb3b Dave Chinner      2013-08-12  3571               
xfs_trans_log_inode(tp, target_dp, XFS_ILOG_CORE);
f6bba2017afb3b Dave Chinner      2013-08-12  3572  
c9cfdb38117217 Brian Foster      2018-07-11  3573       error = 
xfs_finish_rename(tp);
548859ddf49f8d Allison Henderson 2022-03-22  3574  
548859ddf49f8d Allison Henderson 2022-03-22  3575  out_unlock:
7dcf5c3e4527cf Dave Chinner      2015-03-25  3576       if (wip)
44a8736bd20a08 Darrick J. Wong   2018-07-25  3577               xfs_irele(wip);
548859ddf49f8d Allison Henderson 2022-03-22  3578       if (wip)
548859ddf49f8d Allison Henderson 2022-03-22  3579               
xfs_iunlock(wip, XFS_ILOCK_EXCL);
548859ddf49f8d Allison Henderson 2022-03-22  3580       if (target_ip)
548859ddf49f8d Allison Henderson 2022-03-22  3581               
xfs_iunlock(target_ip, XFS_ILOCK_EXCL);
548859ddf49f8d Allison Henderson 2022-03-22  3582       xfs_iunlock(src_ip, 
XFS_ILOCK_EXCL);
548859ddf49f8d Allison Henderson 2022-03-22  3583       if (new_parent)
548859ddf49f8d Allison Henderson 2022-03-22  3584               
xfs_iunlock(target_dp, XFS_ILOCK_EXCL);
548859ddf49f8d Allison Henderson 2022-03-22  3585       xfs_iunlock(src_dp, 
XFS_ILOCK_EXCL);
548859ddf49f8d Allison Henderson 2022-03-22  3586  
7dcf5c3e4527cf Dave Chinner      2015-03-25  3587       return error;
f6bba2017afb3b Dave Chinner      2013-08-12  3588  
445883e8133975 Dave Chinner      2015-03-25  3589  out_trans_cancel:
4906e21545814e Christoph Hellwig 2015-06-04  3590       xfs_trans_cancel(tp);
548859ddf49f8d Allison Henderson 2022-03-22  3591  drop_incompat:
548859ddf49f8d Allison Henderson 2022-03-22  3592       if (xfs_has_larp(mp))
548859ddf49f8d Allison Henderson 2022-03-22  3593               
xlog_drop_incompat_feat(mp->m_log);
253f4911f297b8 Christoph Hellwig 2016-04-06  3594  out_release_wip:
7dcf5c3e4527cf Dave Chinner      2015-03-25  3595       if (wip)
44a8736bd20a08 Darrick J. Wong   2018-07-25  3596               xfs_irele(wip);
41667260bc84db Darrick J. Wong   2022-03-09  3597       if (error == -ENOSPC && 
nospace_error)
41667260bc84db Darrick J. Wong   2022-03-09  3598               error = 
nospace_error;
f6bba2017afb3b Dave Chinner      2013-08-12  3599       return error;
f6bba2017afb3b Dave Chinner      2013-08-12  3600  }
f6bba2017afb3b Dave Chinner      2013-08-12  3601  

:::::: The code at line 3552 was first introduced by commit
:::::: 548859ddf49f8d7ffcec57c0d9fd0b0046fcdb8b xfs: Add parent pointers to 
rename

:::::: TO: Allison Henderson <[email protected]>
:::::: CC: Allison Henderson <[email protected]>

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to