CC: [email protected]
BCC: [email protected]
CC: "Darrick J. Wong" <[email protected]>
CC: [email protected]
TO: "Darrick J. Wong" <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git 
vectorized-scrub
head:   1fcd9cea011a657d62ee332d161966c1ec92ffd5
commit: a8d4ca3b7da1be34e97bc3003e962d14c0a30b5a [224/401] xfs: move files to 
orphanage instead of letting nlinks drop to zero
:::::: branch date: 22 hours ago
:::::: commit date: 22 hours ago
config: microblaze-randconfig-m031-20220601 
(https://download.01.org/0day-ci/archive/20220603/[email protected]/config)
compiler: microblaze-linux-gcc (GCC) 11.3.0

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

New smatch warnings:
fs/xfs/scrub/nlinks_repair.c:181 xrep_nlinks_repair_and_relink_inode() warn: 
missing error code 'error'

Old smatch warnings:
arch/microblaze/include/asm/thread_info.h:85 current_thread_info() error: 
uninitialized symbol 'sp'.
fs/xfs/scrub/nlinks_repair.c:338 xrep_nlinks_repair_inode() warn: missing error 
code 'error'

vim +/error +181 fs/xfs/scrub/nlinks_repair.c

a8d4ca3b7da1be Darrick J. Wong 2022-01-06  109  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  110  /*
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  111   * Correct the link count of 
the given inode or move it to the orphanage.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  112   * Because we have to grab 
locks and resources in a certain order, it's
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  113   * possible that this will be a 
no-op.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  114   */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  115  STATIC int
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  116  
xrep_nlinks_repair_and_relink_inode(
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  117          struct xchk_nlink_ctrs  
        *xnc)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  118  {
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  119          struct xchk_nlink       
        obs;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  120          struct xfs_scrub        
        *sc = xnc->sc;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  121          struct 
xrep_orphanage_req       *orph = xrep_nlinks_orphanage_req(sc);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  122          struct xfs_mount        
        *mp = sc->mp;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  123          struct xfs_inode        
        *ip = sc->ip;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  124          uint64_t                
        total_links;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  125          unsigned int            
        actual_nlink;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  126          bool                    
        orphan = false;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  127          int                     
        error;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  128  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  129          /*
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  130           * Ignore temporary 
files being used to stage repairs, since we assume
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  131           * they're correct for 
non-directories, and the directory repair code
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  132           * doesn't bump the 
link counts for the children.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  133           */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  134          if 
(xrep_is_tempfile(ip))
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  135                  return 0;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  136  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  137          /* Grab the IOLOCK of 
the orphanage and the child directory. */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  138          error = 
xrep_orphanage_iolock_two(sc);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  139          if (error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  140                  return error;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  141  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  142          /*
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  143           * Allocate a 
transaction for the adoption.  We'll reserve space for
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  144           * the transaction in 
the adoption preparation step.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  145           */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  146          
xrep_orphanage_compute_blkres(sc, orph);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  147  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  148          error = 
xfs_trans_alloc(mp, &M_RES(mp)->tr_link, 0, 0, 0, &sc->tp);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  149          if (error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  150                  goto out_iolock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  151  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  152          /*
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  153           * Before we take the 
ILOCKs, compute the name of the potential
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  154           * orphanage directory 
entry.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  155           */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  156          error = 
xrep_orphanage_compute_name(orph, xrep_nlinks_namebuf(sc));
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  157          if (error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  158                  goto out_trans;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  159  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  160          error = 
xrep_orphanage_adoption_prep(orph);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  161          if (error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  162                  goto out_trans;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  163  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  164          mutex_lock(&xnc->lock);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  165  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  166          if 
(xchk_iscan_aborted(&xnc->collect_iscan)) {
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  167                  error = 
-ECANCELED;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  168                  goto 
out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  169          }
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  170  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  171          error = 
xfarray_load_sparse(xnc->nlinks, ip->i_ino, &obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  172          if (error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  173                  goto 
out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  174  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  175          total_links = 
xchk_nlink_total(&obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  176          actual_nlink = 
VFS_I(ip)->i_nlink;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  177  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  178          /* Cannot set more than 
the maxiumum possible link count. */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  179          if (total_links > 
U32_MAX) {
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  180                  
trace_xrep_nlinks_unfixable_inode(mp, ip, &obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06 @181                  goto 
out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  182          }
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  183  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  184          /*
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  185           * Linked directories 
should have at least one "child" (the dot entry)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  186           * pointing up to them.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  187           */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  188          if 
(S_ISDIR(VFS_I(ip)->i_mode) && actual_nlink > 0 &&
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  189                                  
          obs.children == 0) {
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  190                  
trace_xrep_nlinks_unfixable_inode(mp, ip, &obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  191                  goto 
out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  192          }
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  193  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  194          /* Non-directories 
cannot have directories pointing up to them. */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  195          if 
(!S_ISDIR(VFS_I(ip)->i_mode) && obs.children > 0) {
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  196                  
trace_xrep_nlinks_unfixable_inode(mp, ip, &obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  197                  goto 
out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  198          }
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  199  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  200          /*
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  201           * Decide if we're 
going to move this file to the orphanage, and fix
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  202           * up the incore link 
counts if we are.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  203           */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  204          if 
(xrep_nlinks_is_orphaned(sc, ip, actual_nlink, &obs)) {
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  205                  obs.parents++;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  206                  total_links++;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  207  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  208                  error = 
xrep_nlinks_set_record(xnc, ip->i_ino, &obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  209                  if (error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  210                          goto 
out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  211  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  212                  orphan = true;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  213          }
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  214  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  215          /*
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  216           * We did not find any 
links to this inode and we're not planning to
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  217           * move it to the 
orphanage.  If the inode link count is also zero, we
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  218           * have nothing further 
to do.  Otherwise, the situation is unfixable.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  219           */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  220          if (total_links == 0) {
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  221                  if 
(actual_nlink != 0)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  222                          
trace_xrep_nlinks_unfixable_inode(mp, ip, &obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  223                  goto 
out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  224          }
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  225  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  226          /* If the inode has the 
correct link count and isn't orphaned, exit. */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  227          if (total_links == 
actual_nlink && !orphan)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  228                  goto 
out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  229  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  230          /* Commit the new link 
count. */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  231          
trace_xrep_nlinks_update_inode(mp, ip, &obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  232  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  233          /*
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  234           * If this is an 
orphan, create the new name in the orphanage, and bump
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  235           * the link count of 
the orphanage if we just added a directory.  Then
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  236           * we can set the 
correct nlink.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  237           */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  238          if (orphan) {
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  239                  error = 
xrep_orphanage_adopt(orph);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  240                  if (error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  241                          goto 
out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  242  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  243                  /*
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  244                   * If the child 
is a directory, we need to bump the incore link
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  245                   * count of the 
orphanage to account for the new orphan's
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  246                   * child 
subdirectory entry.
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  247                   */
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  248                  if 
(S_ISDIR(VFS_I(ip)->i_mode)) {
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  249                          error = 
xfarray_load_sparse(xnc->nlinks,
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  250                                  
        sc->orphanage->i_ino, &obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  251                          if 
(error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  252                                  
goto out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  253  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  254                          
obs.flags |= XCHK_NLINK_WRITTEN;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  255                          
obs.children++;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  256  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  257                          error = 
xrep_nlinks_set_record(xnc,
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  258                                  
        sc->orphanage->i_ino, &obs);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  259                          if 
(error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  260                                  
goto out_scanlock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  261                  }
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  262          }
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  263          set_nlink(VFS_I(ip), 
total_links);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  264          
xfs_trans_log_inode(sc->tp, ip, XFS_ILOG_CORE);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  265          
mutex_unlock(&xnc->lock);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  266  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  267          error = 
xrep_trans_commit(sc);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  268          if (error)
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  269                  goto out_ilock;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  270  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  271          xchk_iunlock(sc, 
XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  272          
xrep_orphanage_iunlock(sc, XFS_ILOCK_EXCL | XFS_IOLOCK_EXCL);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  273          return 0;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  274  
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  275  out_scanlock:
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  276          
mutex_unlock(&xnc->lock);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  277  out_trans:
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  278          xchk_trans_cancel(sc);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  279  out_ilock:
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  280          xchk_iunlock(sc, 
XFS_ILOCK_EXCL);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  281          
xrep_orphanage_iunlock(sc, XFS_ILOCK_EXCL);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  282  out_iolock:
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  283          xchk_iunlock(sc, 
XFS_IOLOCK_EXCL);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  284          
xrep_orphanage_iunlock(sc, XFS_IOLOCK_EXCL);
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  285          return error;
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  286  }
a8d4ca3b7da1be Darrick J. Wong 2022-01-06  287  

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