* [intel-lts:6.18/linux 1/1] fs/xfs/scrub/quota.c:259 xchk_quota_item() warn: inconsistent returns '&dq->q_qlock'.
@ 2026-07-25 23:20 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-07-25 23:20 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
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/202607260640.ROWROdpm-lkp@intel.com/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 <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202607260640.ROWROdpm-lkp@intel.com/
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 <darrick.wong@oracle.com>
:::::: CC: Darrick J. Wong <darrick.wong@oracle.com>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-25 23:20 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-25 23:20 [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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox