From: kernel test robot <lkp@intel.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: kbuild-all@lists.01.org,
"Darrick J. Wong" <darrick.wong@oracle.com>,
linux-kernel@vger.kernel.org
Subject: [djwong-xfs:vectorized-scrub 283/396] fs/xfs/libxfs/xfs_bmap.c:5297:17: warning: Local variable 'flags' shadows outer variable [shadowVariable]
Date: Fri, 15 Apr 2022 12:38:58 +0800 [thread overview]
Message-ID: <202204151228.UVfogpPF-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git vectorized-scrub
head: bd756ef7af68274b79308166ee64949d288be861
commit: 1f5b7812f0d7f8d634b30fa8d286ef85084165fb [283/396] xfs: convert "skip_discard" to a proper flags bitset
compiler: riscv64-linux-gcc (GCC) 11.2.0
reproduce (cppcheck warning):
# apt-get install cppcheck
git checkout 1f5b7812f0d7f8d634b30fa8d286ef85084165fb
cppcheck --quiet --enable=style,performance,portability --template=gcc FILE
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
cppcheck warnings: (new ones prefixed by >>)
>> fs/xfs/libxfs/xfs_bmap.c:5297:17: warning: Local variable 'flags' shadows outer variable [shadowVariable]
unsigned int flags = 0;
^
fs/xfs/libxfs/xfs_bmap.c:5066:8: note: Shadowed declaration
int flags = 0;/* inode logging flags */
^
fs/xfs/libxfs/xfs_bmap.c:5297:17: note: Shadow variable
unsigned int flags = 0;
^
cppcheck possible warnings: (new ones prefixed by >>, may not real problems)
>> fs/xfs/xfs_itable.c:79:8: warning: Redundant initialization for 'error'. The initialized value is overwritten before it is read. [redundantInitialization]
error = xfs_iget(mp, tp, ino,
^
fs/xfs/xfs_itable.c:77:14: note: error is initialized
int error = -EINVAL;
^
fs/xfs/xfs_itable.c:79:8: note: error is overwritten
error = xfs_iget(mp, tp, ino,
^
fs/xfs/libxfs/xfs_bmap.c:3445:6: warning: The if condition is the same as the previous if condition [duplicateCondition]
if (align) {
^
fs/xfs/libxfs/xfs_bmap.c:3436:6: note: First condition
if (align) {
^
fs/xfs/libxfs/xfs_bmap.c:3445:6: note: Second condition
if (align) {
^
fs/xfs/libxfs/xfs_bmap.c:113:24: warning: Parameter 'irec' can be declared with const [constParameter]
struct xfs_bmbt_irec *irec,
^
fs/xfs/libxfs/xfs_bmap.c:3268:17: warning: Parameter 'blen' can be declared with const [constParameter]
xfs_extlen_t *blen,
^
vim +/flags +5297 fs/xfs/libxfs/xfs_bmap.c
5046
5047 /*
5048 * Called by xfs_bmapi to update file extent records and the btree
5049 * after removing space.
5050 */
5051 STATIC int /* error */
5052 xfs_bmap_del_extent_real(
5053 xfs_inode_t *ip, /* incore inode pointer */
5054 xfs_trans_t *tp, /* current transaction pointer */
5055 struct xfs_iext_cursor *icur,
5056 struct xfs_btree_cur *cur, /* if null, not a btree */
5057 xfs_bmbt_irec_t *del, /* data to remove from extents */
5058 int *logflagsp, /* inode logging flags */
5059 int whichfork, /* data or attr fork */
5060 int bflags) /* bmapi flags */
5061 {
5062 xfs_fsblock_t del_endblock=0; /* first block past del */
5063 xfs_fileoff_t del_endoff; /* first offset past del */
5064 int do_fx; /* free extent at end of routine */
5065 int error; /* error return value */
5066 int flags = 0;/* inode logging flags */
5067 struct xfs_bmbt_irec got; /* current extent entry */
5068 xfs_fileoff_t got_endoff; /* first offset past got */
5069 int i; /* temp state */
5070 struct xfs_ifork *ifp; /* inode fork pointer */
5071 xfs_mount_t *mp; /* mount structure */
5072 xfs_filblks_t nblks; /* quota/sb block count */
5073 xfs_bmbt_irec_t new; /* new record to be inserted */
5074 /* REFERENCED */
5075 uint qfield; /* quota field to update */
5076 int state = xfs_bmap_fork_to_state(whichfork);
5077 struct xfs_bmbt_irec old;
5078
5079 mp = ip->i_mount;
5080 XFS_STATS_INC(mp, xs_del_exlist);
5081
5082 ifp = XFS_IFORK_PTR(ip, whichfork);
5083 ASSERT(del->br_blockcount > 0);
5084 xfs_iext_get_extent(ifp, icur, &got);
5085 ASSERT(got.br_startoff <= del->br_startoff);
5086 del_endoff = del->br_startoff + del->br_blockcount;
5087 got_endoff = got.br_startoff + got.br_blockcount;
5088 ASSERT(got_endoff >= del_endoff);
5089 ASSERT(!isnullstartblock(got.br_startblock));
5090 qfield = 0;
5091 error = 0;
5092
5093 /*
5094 * If it's the case where the directory code is running with no block
5095 * reservation, and the deleted block is in the middle of its extent,
5096 * and the resulting insert of an extent would cause transformation to
5097 * btree format, then reject it. The calling code will then swap blocks
5098 * around instead. We have to do this now, rather than waiting for the
5099 * conversion to btree format, since the transaction will be dirty then.
5100 */
5101 if (tp->t_blk_res == 0 &&
5102 ifp->if_format == XFS_DINODE_FMT_EXTENTS &&
5103 ifp->if_nextents >= XFS_IFORK_MAXEXT(ip, whichfork) &&
5104 del->br_startoff > got.br_startoff && del_endoff < got_endoff)
5105 return -ENOSPC;
5106
5107 flags = XFS_ILOG_CORE;
5108 if (xfs_ifork_is_realtime(ip, whichfork)) {
5109 if (!(bflags & XFS_BMAPI_REMAP)) {
5110 error = xfs_rtfree_blocks(tp, del->br_startblock,
5111 del->br_blockcount);
5112 if (error)
5113 goto done;
5114 }
5115 do_fx = 0;
5116 qfield = XFS_TRANS_DQ_RTBCOUNT;
5117 } else {
5118 do_fx = 1;
5119 qfield = XFS_TRANS_DQ_BCOUNT;
5120 }
5121 nblks = del->br_blockcount;
5122
5123 del_endblock = del->br_startblock + del->br_blockcount;
5124 if (cur) {
5125 error = xfs_bmbt_lookup_eq(cur, &got, &i);
5126 if (error)
5127 goto done;
5128 if (XFS_IS_CORRUPT(mp, i != 1)) {
5129 xfs_btree_mark_sick(cur);
5130 error = -EFSCORRUPTED;
5131 goto done;
5132 }
5133 }
5134
5135 if (got.br_startoff == del->br_startoff)
5136 state |= BMAP_LEFT_FILLING;
5137 if (got_endoff == del_endoff)
5138 state |= BMAP_RIGHT_FILLING;
5139
5140 switch (state & (BMAP_LEFT_FILLING | BMAP_RIGHT_FILLING)) {
5141 case BMAP_LEFT_FILLING | BMAP_RIGHT_FILLING:
5142 /*
5143 * Matches the whole extent. Delete the entry.
5144 */
5145 xfs_iext_remove(ip, icur, state);
5146 xfs_iext_prev(ifp, icur);
5147 ifp->if_nextents--;
5148
5149 flags |= XFS_ILOG_CORE;
5150 if (!cur) {
5151 flags |= xfs_ilog_fext(whichfork);
5152 break;
5153 }
5154 if ((error = xfs_btree_delete(cur, &i)))
5155 goto done;
5156 if (XFS_IS_CORRUPT(mp, i != 1)) {
5157 xfs_btree_mark_sick(cur);
5158 error = -EFSCORRUPTED;
5159 goto done;
5160 }
5161 break;
5162 case BMAP_LEFT_FILLING:
5163 /*
5164 * Deleting the first part of the extent.
5165 */
5166 got.br_startoff = del_endoff;
5167 got.br_startblock = del_endblock;
5168 got.br_blockcount -= del->br_blockcount;
5169 xfs_iext_update_extent(ip, state, icur, &got);
5170 if (!cur) {
5171 flags |= xfs_ilog_fext(whichfork);
5172 break;
5173 }
5174 error = xfs_bmbt_update(cur, &got);
5175 if (error)
5176 goto done;
5177 break;
5178 case BMAP_RIGHT_FILLING:
5179 /*
5180 * Deleting the last part of the extent.
5181 */
5182 got.br_blockcount -= del->br_blockcount;
5183 xfs_iext_update_extent(ip, state, icur, &got);
5184 if (!cur) {
5185 flags |= xfs_ilog_fext(whichfork);
5186 break;
5187 }
5188 error = xfs_bmbt_update(cur, &got);
5189 if (error)
5190 goto done;
5191 break;
5192 case 0:
5193 /*
5194 * Deleting the middle of the extent.
5195 */
5196
5197 /*
5198 * For directories, -ENOSPC is returned since a directory entry
5199 * remove operation must not fail due to low extent count
5200 * availability. -ENOSPC will be handled by higher layers of XFS
5201 * by letting the corresponding empty Data/Free blocks to linger
5202 * until a future remove operation. Dabtree blocks would be
5203 * swapped with the last block in the leaf space and then the
5204 * new last block will be unmapped.
5205 *
5206 * The above logic also applies to the source directory entry of
5207 * a rename operation.
5208 */
5209 error = xfs_iext_count_may_overflow(ip, whichfork, 1);
5210 if (error) {
5211 ASSERT(S_ISDIR(VFS_I(ip)->i_mode) &&
5212 whichfork == XFS_DATA_FORK);
5213 error = -ENOSPC;
5214 goto done;
5215 }
5216
5217 old = got;
5218
5219 got.br_blockcount = del->br_startoff - got.br_startoff;
5220 xfs_iext_update_extent(ip, state, icur, &got);
5221
5222 new.br_startoff = del_endoff;
5223 new.br_blockcount = got_endoff - del_endoff;
5224 new.br_state = got.br_state;
5225 new.br_startblock = del_endblock;
5226
5227 flags |= XFS_ILOG_CORE;
5228 if (cur) {
5229 error = xfs_bmbt_update(cur, &got);
5230 if (error)
5231 goto done;
5232 error = xfs_btree_increment(cur, 0, &i);
5233 if (error)
5234 goto done;
5235 cur->bc_rec.b = new;
5236 error = xfs_btree_insert(cur, &i);
5237 if (error && error != -ENOSPC)
5238 goto done;
5239 /*
5240 * If get no-space back from btree insert, it tried a
5241 * split, and we have a zero block reservation. Fix up
5242 * our state and return the error.
5243 */
5244 if (error == -ENOSPC) {
5245 /*
5246 * Reset the cursor, don't trust it after any
5247 * insert operation.
5248 */
5249 error = xfs_bmbt_lookup_eq(cur, &got, &i);
5250 if (error)
5251 goto done;
5252 if (XFS_IS_CORRUPT(mp, i != 1)) {
5253 xfs_btree_mark_sick(cur);
5254 error = -EFSCORRUPTED;
5255 goto done;
5256 }
5257 /*
5258 * Update the btree record back
5259 * to the original value.
5260 */
5261 error = xfs_bmbt_update(cur, &old);
5262 if (error)
5263 goto done;
5264 /*
5265 * Reset the extent record back
5266 * to the original value.
5267 */
5268 xfs_iext_update_extent(ip, state, icur, &old);
5269 flags = 0;
5270 error = -ENOSPC;
5271 goto done;
5272 }
5273 if (XFS_IS_CORRUPT(mp, i != 1)) {
5274 xfs_btree_mark_sick(cur);
5275 error = -EFSCORRUPTED;
5276 goto done;
5277 }
5278 } else
5279 flags |= xfs_ilog_fext(whichfork);
5280
5281 ifp->if_nextents++;
5282 xfs_iext_next(ifp, icur);
5283 xfs_iext_insert(ip, icur, &new, state);
5284 break;
5285 }
5286
5287 /* remove reverse mapping */
5288 xfs_rmap_unmap_extent(tp, ip, whichfork, del);
5289
5290 /*
5291 * If we need to, add to list of extents to delete.
5292 */
5293 if (do_fx && !(bflags & XFS_BMAPI_REMAP)) {
5294 if (xfs_is_reflink_inode(ip) && whichfork == XFS_DATA_FORK) {
5295 xfs_refcount_decrease_extent(tp, del);
5296 } else {
> 5297 unsigned int flags = 0;
5298
5299 if ((bflags & XFS_BMAPI_NODISCARD) ||
5300 del->br_state == XFS_EXT_UNWRITTEN)
5301 flags |= XFS_FREE_EXTENT_SKIP_DISCARD;
5302
5303 xfs_free_extent_later(tp, del->br_startblock,
5304 del->br_blockcount, NULL, flags);
5305 }
5306 }
5307
5308 /*
5309 * Adjust inode # blocks in the file.
5310 */
5311 if (nblks)
5312 ip->i_nblocks -= nblks;
5313 /*
5314 * Adjust quota data.
5315 */
5316 if (qfield && !(bflags & XFS_BMAPI_REMAP))
5317 xfs_trans_mod_dquot_byino(tp, ip, qfield, (long)-nblks);
5318
5319 done:
5320 *logflagsp = flags;
5321 return error;
5322 }
5323
--
0-DAY CI Kernel Test Service
https://01.org/lkp
reply other threads:[~2022-04-15 4:39 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202204151228.UVfogpPF-lkp@intel.com \
--to=lkp@intel.com \
--cc=darrick.wong@oracle.com \
--cc=djwong@kernel.org \
--cc=kbuild-all@lists.01.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.