From: Alex Elder <aelder@sgi.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 3/9] xfs: correctly decrement the extent buffer index in xfs_bmap_del_extent
Date: Tue, 24 May 2011 19:27:14 -0500 [thread overview]
Message-ID: <1306283234.2823.92.camel@doink> (raw)
In-Reply-To: <20110511150711.786279651@bombadil.infradead.org>
On Wed, 2011-05-11 at 11:04 -0400, Christoph Hellwig wrote:
> plain text document attachment (xfs-fix-ep-access)
> The code in xfs_bmap_del_extent does not correctly decrement the extent buffer
> index when deleting a whole extent. Most of the time this gets caught by
> checks in xfs_bmapi that work around it and decrement it manually and thus
> wasn't noticed so far.
>
> Based on an earlier patch from Lachlan McIlroy.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
This one crashes in test 008. I suspect it's due to
what Lachlan pointed out--the index can go negative
and we aren't (yet) ensuring we don't call into
xfs_iext_get_ext() in that case--but I have not
absolutely verified this.
It would be better if this change were combined
with the portion of patch 6 that pulls out the
if (lastx >= XFS_IFORK_NEXTENTS()
check in xfs_bunmapi(). But it still would
need to go later in the series.
This does look like it's a reasonable thing to do,
it moves "left" in extent list because we know
we've exhausted the current one, and the only
caller--xfs_bunmapi()--is going from the end
backward. I think the same decrement would be
appropriate for "case 2" below where you put this
change though (because there will be no more of
the current extent remaining after deleting the
left portion). In fact, it looks to me like
the only one that got it right was "case 1"
because if you're splitting an extent (case 0)
the next one to examine will be the left one
of the two resulting from the split. (I'm a
bit unsure about these observations though,
you or someone else should verify this and
set me straight if I'm wrong.)
It's all a bit confusing though. It's not
obvious here what the value of *idx should be
after one of these operations, certainly not
independent of knowledge of whether the
extents are being scanned from the beginning
(as xfs_bmapi() does) or from the end (as
xfs_bunmap() does).
I moved this one change to the end of the series
and I no longer hit the problem I had with test
008 (presumably because the index checking in
later patches avoids the problem). I will
keep testing with the whole series, with
this one at the end.
Meanwhile I'm interested to hear back on
whether other spots in xfs_bmap_del_extent()
should adjust the index value.
-Alex
> Index: xfs/fs/xfs/xfs_bmap.c
> ===================================================================
> --- xfs.orig/fs/xfs/xfs_bmap.c 2011-05-10 17:11:21.212901236 +0200
> +++ xfs/fs/xfs/xfs_bmap.c 2011-05-10 17:13:36.177399627 +0200
> @@ -2916,8 +2916,10 @@ xfs_bmap_del_extent(
> */
> xfs_iext_remove(ip, *idx, 1,
> whichfork == XFS_ATTR_FORK ? BMAP_ATTRFORK : 0);
> + --*idx;
> if (delay)
> break;
> +
> XFS_IFORK_NEXT_SET(ip, whichfork,
> XFS_IFORK_NEXTENTS(ip, whichfork) - 1);
> flags |= XFS_ILOG_CORE;
>
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2011-05-25 0:28 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-05-11 15:04 [PATCH 0/9] extent buffer indexing fixes Christoph Hellwig
2011-05-11 15:04 ` [PATCH 1/9] xfs: remove the unused XFS_BMAPI_RSVBLOCKS flag Christoph Hellwig
2011-05-20 20:17 ` Alex Elder
2011-05-11 15:04 ` [PATCH 2/9] xfs: remove if_lastex Christoph Hellwig
2011-05-20 20:17 ` Alex Elder
2011-05-23 8:52 ` [PATCH 2/9 v2] " Christoph Hellwig
2011-05-25 1:14 ` Alex Elder
2011-05-11 15:04 ` [PATCH 3/9] xfs: correctly decrement the extent buffer index in xfs_bmap_del_extent Christoph Hellwig
2011-05-12 6:50 ` Lachlan McIlroy
2011-05-12 6:54 ` Lachlan McIlroy
2011-05-12 7:17 ` Lachlan McIlroy
2011-05-25 0:27 ` Alex Elder [this message]
2011-05-11 15:04 ` [PATCH 4/9] xfs: do not use unchecked extent indices in xfs_bmap_add_extent_* Christoph Hellwig
2011-05-12 7:31 ` Lachlan McIlroy
2011-05-25 0:30 ` Alex Elder
2011-05-11 15:04 ` [PATCH 5/9] xfs: do not use unchecked extent indices in xfs_bmapi Christoph Hellwig
2011-05-12 7:20 ` Lachlan McIlroy
2011-05-25 0:31 ` Alex Elder
2011-05-11 15:04 ` [PATCH 6/9] xfs: do not use unchecked extent indices in xfs_bunmapi Christoph Hellwig
2011-05-12 7:22 ` Lachlan McIlroy
2011-05-25 0:31 ` Alex Elder
2011-05-11 15:04 ` [PATCH 7/9] xfs: do not do pointer arithmetics on extent records Christoph Hellwig
2011-05-12 7:23 ` Lachlan McIlroy
2011-05-25 0:31 ` Alex Elder
2011-05-11 15:04 ` [PATCH 8/9] xfs: fix up asserts in xfs_iflush_fork Christoph Hellwig
2011-05-12 7:24 ` Lachlan McIlroy
2011-05-25 0:32 ` Alex Elder
2011-05-11 15:04 ` [PATCH 9/9] xfs: check for valid indices in xfs_iext_get_ext and xfs_iext_idx_to_irec Christoph Hellwig
2011-05-12 7:26 ` Lachlan McIlroy
2011-05-25 0:32 ` Alex Elder
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=1306283234.2823.92.camel@doink \
--to=aelder@sgi.com \
--cc=hch@infradead.org \
--cc=xfs@oss.sgi.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox