CC: [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: 8427da8e62fbcf9a04e5b2663fe60b97d6911417 commit: 8dd594d12f08acc6c6fa388b2cae3e270bf8effc [99/334] xfs: stabilize fs summary counters for online fsck :::::: branch date: 2 days ago :::::: commit date: 2 days ago config: ia64-randconfig-m031-20220116 (https://download.01.org/0day-ci/archive/20220117/[email protected]/config) compiler: ia64-linux-gcc (GCC) 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/scrub/fscounters.c:198 xchk_fscounters_freeze() warn: inconsistent returns '&sb->s_umount'. vim +198 fs/xfs/scrub/fscounters.c 8dd594d12f08acc Darrick J. Wong 2022-01-06 117 8dd594d12f08acc Darrick J. Wong 2022-01-06 118 /* 8dd594d12f08acc Darrick J. Wong 2022-01-06 119 * We couldn't stabilize the filesystem long enough to sample all the variables 8dd594d12f08acc Darrick J. Wong 2022-01-06 120 * that comprise the summary counters and compare them to the percpu counters. 8dd594d12f08acc Darrick J. Wong 2022-01-06 121 * We need to disable all writer threads, which means taking the first two 8dd594d12f08acc Darrick J. Wong 2022-01-06 122 * freeze levels to put userspace to sleep, and the third freeze level to 8dd594d12f08acc Darrick J. Wong 2022-01-06 123 * prevent background threads from starting new transactions. 8dd594d12f08acc Darrick J. Wong 2022-01-06 124 */ 8dd594d12f08acc Darrick J. Wong 2022-01-06 125 STATIC int 8dd594d12f08acc Darrick J. Wong 2022-01-06 126 xchk_fscounters_freeze( 8dd594d12f08acc Darrick J. Wong 2022-01-06 127 struct xfs_scrub *sc) 8dd594d12f08acc Darrick J. Wong 2022-01-06 128 { 8dd594d12f08acc Darrick J. Wong 2022-01-06 129 struct xchk_fscounters *fsc = sc->buf; 8dd594d12f08acc Darrick J. Wong 2022-01-06 130 struct xfs_mount *mp = sc->mp; 8dd594d12f08acc Darrick J. Wong 2022-01-06 131 struct super_block *sb = mp->m_super; 8dd594d12f08acc Darrick J. Wong 2022-01-06 132 int level; 8dd594d12f08acc Darrick J. Wong 2022-01-06 133 int error = 0; 8dd594d12f08acc Darrick J. Wong 2022-01-06 134 8dd594d12f08acc Darrick J. Wong 2022-01-06 135 if (sc->flags & XCHK_HAVE_FREEZE_PROT) { 8dd594d12f08acc Darrick J. Wong 2022-01-06 136 sc->flags &= ~XCHK_HAVE_FREEZE_PROT; 8dd594d12f08acc Darrick J. Wong 2022-01-06 137 mnt_drop_write_file(sc->file); 8dd594d12f08acc Darrick J. Wong 2022-01-06 138 } 8dd594d12f08acc Darrick J. Wong 2022-01-06 139 8dd594d12f08acc Darrick J. Wong 2022-01-06 140 /* Wait until we're ready to freeze or give up. */ 8dd594d12f08acc Darrick J. Wong 2022-01-06 141 down_write(&sb->s_umount); 8dd594d12f08acc Darrick J. Wong 2022-01-06 142 while (sb->s_writers.frozen != SB_UNFROZEN) { 8dd594d12f08acc Darrick J. Wong 2022-01-06 143 up_write(&sb->s_umount); 8dd594d12f08acc Darrick J. Wong 2022-01-06 144 8dd594d12f08acc Darrick J. Wong 2022-01-06 145 if (xchk_should_terminate(sc, &error)) 8dd594d12f08acc Darrick J. Wong 2022-01-06 146 return error; 8dd594d12f08acc Darrick J. Wong 2022-01-06 147 8dd594d12f08acc Darrick J. Wong 2022-01-06 148 delay(HZ / 10); 8dd594d12f08acc Darrick J. Wong 2022-01-06 149 down_write(&sb->s_umount); 8dd594d12f08acc Darrick J. Wong 2022-01-06 150 } 8dd594d12f08acc Darrick J. Wong 2022-01-06 151 8dd594d12f08acc Darrick J. Wong 2022-01-06 152 if (sb_rdonly(sb)) { 8dd594d12f08acc Darrick J. Wong 2022-01-06 153 sb->s_writers.frozen = SB_FREEZE_EXCLUSIVE; 8dd594d12f08acc Darrick J. Wong 2022-01-06 154 goto done; 8dd594d12f08acc Darrick J. Wong 2022-01-06 155 } 8dd594d12f08acc Darrick J. Wong 2022-01-06 156 8dd594d12f08acc Darrick J. Wong 2022-01-06 157 sb->s_writers.frozen = SB_FREEZE_WRITE; 8dd594d12f08acc Darrick J. Wong 2022-01-06 158 /* Release s_umount to preserve sb_start_write -> s_umount ordering */ 8dd594d12f08acc Darrick J. Wong 2022-01-06 159 up_write(&sb->s_umount); 8dd594d12f08acc Darrick J. Wong 2022-01-06 160 percpu_down_write(sb->s_writers.rw_sem + SB_FREEZE_WRITE - 1); 8dd594d12f08acc Darrick J. Wong 2022-01-06 161 down_write(&sb->s_umount); 8dd594d12f08acc Darrick J. Wong 2022-01-06 162 8dd594d12f08acc Darrick J. Wong 2022-01-06 163 /* Now we go and block page faults... */ 8dd594d12f08acc Darrick J. Wong 2022-01-06 164 sb->s_writers.frozen = SB_FREEZE_PAGEFAULT; 8dd594d12f08acc Darrick J. Wong 2022-01-06 165 percpu_down_write(sb->s_writers.rw_sem + SB_FREEZE_PAGEFAULT - 1); 8dd594d12f08acc Darrick J. Wong 2022-01-06 166 8dd594d12f08acc Darrick J. Wong 2022-01-06 167 /* 8dd594d12f08acc Darrick J. Wong 2022-01-06 168 * All writers are done so after syncing there won't be dirty data. 8dd594d12f08acc Darrick J. Wong 2022-01-06 169 * Let xfs_fs_sync_fs flush dirty data so the VFS won't start writeback 8dd594d12f08acc Darrick J. Wong 2022-01-06 170 * and to disable the background gc workers. 8dd594d12f08acc Darrick J. Wong 2022-01-06 171 */ 8dd594d12f08acc Darrick J. Wong 2022-01-06 172 error = sync_filesystem(sb); 8dd594d12f08acc Darrick J. Wong 2022-01-06 173 if (error) { 8dd594d12f08acc Darrick J. Wong 2022-01-06 174 sb->s_writers.frozen = SB_UNFROZEN; 8dd594d12f08acc Darrick J. Wong 2022-01-06 175 for (level = SB_FREEZE_PAGEFAULT; level >= 0; level--) 8dd594d12f08acc Darrick J. Wong 2022-01-06 176 percpu_up_write(sb->s_writers.rw_sem + level); 8dd594d12f08acc Darrick J. Wong 2022-01-06 177 wake_up(&sb->s_writers.wait_unfrozen); 8dd594d12f08acc Darrick J. Wong 2022-01-06 178 return error; 8dd594d12f08acc Darrick J. Wong 2022-01-06 179 } 8dd594d12f08acc Darrick J. Wong 2022-01-06 180 8dd594d12f08acc Darrick J. Wong 2022-01-06 181 /* Now wait for internal filesystem counter */ 8dd594d12f08acc Darrick J. Wong 2022-01-06 182 sb->s_writers.frozen = SB_FREEZE_FS; 8dd594d12f08acc Darrick J. Wong 2022-01-06 183 percpu_down_write(sb->s_writers.rw_sem + SB_FREEZE_FS - 1); 8dd594d12f08acc Darrick J. Wong 2022-01-06 184 8dd594d12f08acc Darrick J. Wong 2022-01-06 185 /* 8dd594d12f08acc Darrick J. Wong 2022-01-06 186 * We do not need to quiesce the log to check the summary counters, so 8dd594d12f08acc Darrick J. Wong 2022-01-06 187 * skip the call to xfs_fs_freeze here. To prevent anyone else from 8dd594d12f08acc Darrick J. Wong 2022-01-06 188 * unfreezing us, set the VFS freeze level to one higher than 8dd594d12f08acc Darrick J. Wong 2022-01-06 189 * FREEZE_COMPLETE. 8dd594d12f08acc Darrick J. Wong 2022-01-06 190 */ 8dd594d12f08acc Darrick J. Wong 2022-01-06 191 sb->s_writers.frozen = SB_FREEZE_EXCLUSIVE; 8dd594d12f08acc Darrick J. Wong 2022-01-06 192 for (level = SB_FREEZE_LEVELS - 1; level >= 0; level--) 8dd594d12f08acc Darrick J. Wong 2022-01-06 193 percpu_rwsem_release(sb->s_writers.rw_sem + level, 0, 8dd594d12f08acc Darrick J. Wong 2022-01-06 194 _THIS_IP_); 8dd594d12f08acc Darrick J. Wong 2022-01-06 195 done: 8dd594d12f08acc Darrick J. Wong 2022-01-06 196 fsc->frozen = true; 8dd594d12f08acc Darrick J. Wong 2022-01-06 197 up_write(&sb->s_umount); 8dd594d12f08acc Darrick J. Wong 2022-01-06 @198 return 0; 8dd594d12f08acc Darrick J. Wong 2022-01-06 199 } 8dd594d12f08acc Darrick J. Wong 2022-01-06 200 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
