[intel-lts:6.18/linux 1/1] fs/xfs/scrub/quota.c:259 xchk_quota_item() warn: inconsistent returns '&dq->q_qlock'.
kernel test robot <[email protected]> Sun, 26 Jul 2026 07:20:14 +0800
| Newsgroups | dev.linux.lists.oe-kbuild |
|---|---|
| Message-ID | <[email protected]> |
BCC: [email protected] CC: [email protected] tree: https://github.com/intel/linux-intel-lts.git 6.18/linux head: af406d75818b912a1b72efa75a20f8bf3e9a3f01 commit: 3b0c3414b308e6822cda90bf99f7eac94d4cca2b [1/1] xfs: scrub: unlock dquot before early return in quota scrub :::::: branch date: 9 days ago :::::: commit date: 4 months ago config: x86_64-randconfig-161-20260725 (https://download.01.org/0day-ci/archive/20260726/[email protected]/config) compiler: gcc-14 (Debian 14.2.0-19) 14.2.0 smatch: v0.5.0-9187-g5189e3fb If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <[email protected]> | Reported-by: Dan Carpenter <[email protected]> | Closes: https://lore.kernel.org/r/[email protected]/ smatch warnings: fs/xfs/scrub/quota.c:259 xchk_quota_item() warn: inconsistent returns '&dq->q_qlock'. vim +259 fs/xfs/scrub/quota.c 774b5c0a515289 Darrick J. Wong 2023-12-15 137 c2fc338c87a31f Darrick J. Wong 2017-10-17 138 /* Scrub the fields in an individual quota item. */ 554ba965407e90 Darrick J. Wong 2018-05-04 139 STATIC int c517b3aa02cff1 Darrick J. Wong 2018-07-19 140 xchk_quota_item( 21d7500929c8a0 Darrick J. Wong 2023-12-15 141 struct xchk_quota_info *sqi, 21d7500929c8a0 Darrick J. Wong 2023-12-15 142 struct xfs_dquot *dq) c2fc338c87a31f Darrick J. Wong 2017-10-17 143 { 1d8a748a8aa94a Darrick J. Wong 2018-07-19 144 struct xfs_scrub *sc = sqi->sc; c2fc338c87a31f Darrick J. Wong 2017-10-17 145 struct xfs_mount *mp = sc->mp; c2fc338c87a31f Darrick J. Wong 2017-10-17 146 struct xfs_quotainfo *qi = mp->m_quotainfo; c2fc338c87a31f Darrick J. Wong 2017-10-17 147 xfs_fileoff_t offset; c2fc338c87a31f Darrick J. Wong 2017-10-17 148 xfs_ino_t fs_icount; 8ef34723eff088 Darrick J. Wong 2019-11-05 149 int error = 0; 8ef34723eff088 Darrick J. Wong 2019-11-05 150 8ef34723eff088 Darrick J. Wong 2019-11-05 151 if (xchk_should_terminate(sc, &error)) 0a713bd41ea2b1 Darrick J. Wong 2022-11-06 152 return error; c2fc338c87a31f Darrick J. Wong 2017-10-17 153 7d1f0e167a067e Darrick J. Wong 2023-12-15 154 /* 7d1f0e167a067e Darrick J. Wong 2023-12-15 155 * We want to validate the bmap record for the storage backing this 7d1f0e167a067e Darrick J. Wong 2023-12-15 156 * dquot, so we need to lock the dquot and the quota file. For quota 7d1f0e167a067e Darrick J. Wong 2023-12-15 157 * operations, the locking order is first the ILOCK and then the dquot. 7d1f0e167a067e Darrick J. Wong 2023-12-15 158 * However, dqiterate gave us a locked dquot, so drop the dquot lock to 7d1f0e167a067e Darrick J. Wong 2023-12-15 159 * get the ILOCK. 7d1f0e167a067e Darrick J. Wong 2023-12-15 160 */ 7d1f0e167a067e Darrick J. Wong 2023-12-15 161 xfs_dqunlock(dq); 7d1f0e167a067e Darrick J. Wong 2023-12-15 162 xchk_ilock(sc, XFS_ILOCK_SHARED); 7d1f0e167a067e Darrick J. Wong 2023-12-15 163 xfs_dqlock(dq); 7d1f0e167a067e Darrick J. Wong 2023-12-15 164 c2fc338c87a31f Darrick J. Wong 2017-10-17 165 /* 554ba965407e90 Darrick J. Wong 2018-05-04 166 * Except for the root dquot, the actual dquot we got must either have 554ba965407e90 Darrick J. Wong 2018-05-04 167 * the same or higher id as we saw before. c2fc338c87a31f Darrick J. Wong 2017-10-17 168 */ c51df7334167e4 Darrick J. Wong 2020-07-14 169 offset = dq->q_id / qi->qi_dqperchunk; c51df7334167e4 Darrick J. Wong 2020-07-14 170 if (dq->q_id && dq->q_id <= sqi->last_id) c517b3aa02cff1 Darrick J. Wong 2018-07-19 171 xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, offset); c2fc338c87a31f Darrick J. Wong 2017-10-17 172 c51df7334167e4 Darrick J. Wong 2020-07-14 173 sqi->last_id = dq->q_id; 554ba965407e90 Darrick J. Wong 2018-05-04 174 7d1f0e167a067e Darrick J. Wong 2023-12-15 175 error = xchk_quota_item_bmap(sc, dq, offset); 7d1f0e167a067e Darrick J. Wong 2023-12-15 176 xchk_iunlock(sc, XFS_ILOCK_SHARED); 3b0c3414b308e6 hongao 2026-03-12 177 if (!xchk_fblock_process_error(sc, XFS_DATA_FORK, offset, &error)) { 3b0c3414b308e6 hongao 2026-03-12 178 mutex_unlock(&dq->q_qlock); 7d1f0e167a067e Darrick J. Wong 2023-12-15 179 return error; 3b0c3414b308e6 hongao 2026-03-12 180 } 7d1f0e167a067e Darrick J. Wong 2023-12-15 181 c2fc338c87a31f Darrick J. Wong 2017-10-17 182 /* c2fc338c87a31f Darrick J. Wong 2017-10-17 183 * Warn if the hard limits are larger than the fs. c2fc338c87a31f Darrick J. Wong 2017-10-17 184 * Administrators can do this, though in production this seems c2fc338c87a31f Darrick J. Wong 2017-10-17 185 * suspect, which is why we flag it for review. c2fc338c87a31f Darrick J. Wong 2017-10-17 186 * c2fc338c87a31f Darrick J. Wong 2017-10-17 187 * Complain about corruption if the soft limit is greater than c2fc338c87a31f Darrick J. Wong 2017-10-17 188 * the hard limit. c2fc338c87a31f Darrick J. Wong 2017-10-17 189 */ d3537cf93e5e2f Darrick J. Wong 2020-07-14 190 if (dq->q_blk.hardlimit > mp->m_sb.sb_dblocks) c517b3aa02cff1 Darrick J. Wong 2018-07-19 191 xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset); d3537cf93e5e2f Darrick J. Wong 2020-07-14 192 if (dq->q_blk.softlimit > dq->q_blk.hardlimit) c517b3aa02cff1 Darrick J. Wong 2018-07-19 193 xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, offset); c2fc338c87a31f Darrick J. Wong 2017-10-17 194 d3537cf93e5e2f Darrick J. Wong 2020-07-14 195 if (dq->q_ino.hardlimit > M_IGEO(mp)->maxicount) c517b3aa02cff1 Darrick J. Wong 2018-07-19 196 xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset); d3537cf93e5e2f Darrick J. Wong 2020-07-14 197 if (dq->q_ino.softlimit > dq->q_ino.hardlimit) c517b3aa02cff1 Darrick J. Wong 2018-07-19 198 xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, offset); c2fc338c87a31f Darrick J. Wong 2017-10-17 199 d3537cf93e5e2f Darrick J. Wong 2020-07-14 200 if (dq->q_rtb.hardlimit > mp->m_sb.sb_rblocks) c517b3aa02cff1 Darrick J. Wong 2018-07-19 201 xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset); d3537cf93e5e2f Darrick J. Wong 2020-07-14 202 if (dq->q_rtb.softlimit > dq->q_rtb.hardlimit) c517b3aa02cff1 Darrick J. Wong 2018-07-19 203 xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, offset); c2fc338c87a31f Darrick J. Wong 2017-10-17 204 c2fc338c87a31f Darrick J. Wong 2017-10-17 205 /* Check the resource counts. */ c2fc338c87a31f Darrick J. Wong 2017-10-17 206 fs_icount = percpu_counter_sum(&mp->m_icount); c2fc338c87a31f Darrick J. Wong 2017-10-17 207 c2fc338c87a31f Darrick J. Wong 2017-10-17 208 /* c2fc338c87a31f Darrick J. Wong 2017-10-17 209 * Check that usage doesn't exceed physical limits. However, on c2fc338c87a31f Darrick J. Wong 2017-10-17 210 * a reflink filesystem we're allowed to exceed physical space c2fc338c87a31f Darrick J. Wong 2017-10-17 211 * if there are no quota limits. c2fc338c87a31f Darrick J. Wong 2017-10-17 212 */ ebd9027d088b3a Dave Chinner 2021-08-18 213 if (xfs_has_reflink(mp)) { be37d40c1ba0b5 Darrick J. Wong 2020-07-14 214 if (mp->m_sb.sb_dblocks < dq->q_blk.count) c517b3aa02cff1 Darrick J. Wong 2018-07-19 215 xchk_fblock_set_warning(sc, XFS_DATA_FORK, c2fc338c87a31f Darrick J. Wong 2017-10-17 216 offset); 48bc170f2cb543 Darrick J. Wong 2024-11-20 217 if (mp->m_sb.sb_rblocks < dq->q_rtb.count) 48bc170f2cb543 Darrick J. Wong 2024-11-20 218 xchk_fblock_set_warning(sc, XFS_DATA_FORK, 48bc170f2cb543 Darrick J. Wong 2024-11-20 219 offset); c2fc338c87a31f Darrick J. Wong 2017-10-17 220 } else { be37d40c1ba0b5 Darrick J. Wong 2020-07-14 221 if (mp->m_sb.sb_dblocks < dq->q_blk.count) c517b3aa02cff1 Darrick J. Wong 2018-07-19 222 xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, c2fc338c87a31f Darrick J. Wong 2017-10-17 223 offset); 48bc170f2cb543 Darrick J. Wong 2024-11-20 224 if (mp->m_sb.sb_rblocks < dq->q_rtb.count) 48bc170f2cb543 Darrick J. Wong 2024-11-20 225 xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, 48bc170f2cb543 Darrick J. Wong 2024-11-20 226 offset); c2fc338c87a31f Darrick J. Wong 2017-10-17 227 } 48bc170f2cb543 Darrick J. Wong 2024-11-20 228 if (dq->q_ino.count > fs_icount) c517b3aa02cff1 Darrick J. Wong 2018-07-19 229 xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, offset); c2fc338c87a31f Darrick J. Wong 2017-10-17 230 c2fc338c87a31f Darrick J. Wong 2017-10-17 231 /* c2fc338c87a31f Darrick J. Wong 2017-10-17 232 * We can violate the hard limits if the admin suddenly sets a c2fc338c87a31f Darrick J. Wong 2017-10-17 233 * lower limit than the actual usage. However, we flag it for c2fc338c87a31f Darrick J. Wong 2017-10-17 234 * admin review. c2fc338c87a31f Darrick J. Wong 2017-10-17 235 */ c51df7334167e4 Darrick J. Wong 2020-07-14 236 if (dq->q_id == 0) c51df7334167e4 Darrick J. Wong 2020-07-14 237 goto out; c51df7334167e4 Darrick J. Wong 2020-07-14 238 d3537cf93e5e2f Darrick J. Wong 2020-07-14 239 if (dq->q_blk.hardlimit != 0 && be37d40c1ba0b5 Darrick J. Wong 2020-07-14 240 dq->q_blk.count > dq->q_blk.hardlimit) c517b3aa02cff1 Darrick J. Wong 2018-07-19 241 xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset); c51df7334167e4 Darrick J. Wong 2020-07-14 242 d3537cf93e5e2f Darrick J. Wong 2020-07-14 243 if (dq->q_ino.hardlimit != 0 && be37d40c1ba0b5 Darrick J. Wong 2020-07-14 244 dq->q_ino.count > dq->q_ino.hardlimit) c517b3aa02cff1 Darrick J. Wong 2018-07-19 245 xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset); c51df7334167e4 Darrick J. Wong 2020-07-14 246 d3537cf93e5e2f Darrick J. Wong 2020-07-14 247 if (dq->q_rtb.hardlimit != 0 && be37d40c1ba0b5 Darrick J. Wong 2020-07-14 248 dq->q_rtb.count > dq->q_rtb.hardlimit) c517b3aa02cff1 Darrick J. Wong 2018-07-19 249 xchk_fblock_set_warning(sc, XFS_DATA_FORK, offset); 554ba965407e90 Darrick J. Wong 2018-05-04 250 774b5c0a515289 Darrick J. Wong 2023-12-15 251 xchk_quota_item_timer(sc, offset, &dq->q_blk); 774b5c0a515289 Darrick J. Wong 2023-12-15 252 xchk_quota_item_timer(sc, offset, &dq->q_ino); 774b5c0a515289 Darrick J. Wong 2023-12-15 253 xchk_quota_item_timer(sc, offset, &dq->q_rtb); 774b5c0a515289 Darrick J. Wong 2023-12-15 254 c51df7334167e4 Darrick J. Wong 2020-07-14 255 out: 8ef34723eff088 Darrick J. Wong 2019-11-05 256 if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT) 05237032fdec14 Darrick J. Wong 2021-03-22 257 return -ECANCELED; 8ef34723eff088 Darrick J. Wong 2019-11-05 258 554ba965407e90 Darrick J. Wong 2018-05-04 @259 return 0; c2fc338c87a31f Darrick J. Wong 2017-10-17 260 } c2fc338c87a31f Darrick J. Wong 2017-10-17 261 :::::: The code at line 259 was first introduced by commit :::::: 554ba965407e90fed381a93f230b6ca675cfcd07 xfs: refactor dquot iteration :::::: TO: Darrick J. Wong <[email protected]> :::::: CC: Darrick J. Wong <[email protected]> -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki