From: Brian Foster <bfoster@redhat.com>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 1/6] xfs: bulkstat btree walk doesn't terminate
Date: Tue, 4 Nov 2014 13:58:21 -0500 [thread overview]
Message-ID: <20141104185821.GC55611@bfoster.bfoster> (raw)
In-Reply-To: <1415105601-6455-2-git-send-email-david@fromorbit.com>
On Tue, Nov 04, 2014 at 11:53:16PM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> The bulkstat code has several different ways of detecting the end of
> an AG when doing a walk. They are not consistently detected, and the
> code that checks for the end of AG conditions is not consistently
> coded. Hence the are conditions where the walk code can get stuck in
> an endless loop making no progress and not triggering any
> termination conditions.
>
> Convert all the "tmp/i" status return codes from btree operations
> to a common name (stat) and apply end-of-ag detection to these
> operations consistently.
>
> cc: stable@vger.kernel.org
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
Looks Ok...
Reviewed-by: Brian Foster <bfoster@redhat.com>
> fs/xfs/xfs_itable.c | 19 ++++++++++---------
> 1 file changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/fs/xfs/xfs_itable.c b/fs/xfs/xfs_itable.c
> index 7765ff7..16737cb 100644
> --- a/fs/xfs/xfs_itable.c
> +++ b/fs/xfs/xfs_itable.c
> @@ -356,7 +356,6 @@ xfs_bulkstat(
> int end_of_ag; /* set if we've seen the ag end */
> int error; /* error code */
> int fmterror;/* bulkstat formatter result */
> - int i; /* loop index */
> int icount; /* count of inodes good in irbuf */
> size_t irbsize; /* size of irec buffer in bytes */
> xfs_ino_t ino; /* inode number (filesystem) */
> @@ -366,11 +365,11 @@ xfs_bulkstat(
> xfs_ino_t lastino; /* last inode number returned */
> int nirbuf; /* size of irbuf */
> int rval; /* return value error code */
> - int tmp; /* result value from btree calls */
> int ubcount; /* size of user's buffer */
> int ubleft; /* bytes left in user's buffer */
> char __user *ubufp; /* pointer into user's buffer */
> int ubelem; /* spaces used in user's buffer */
> + int stat;
>
> /*
> * Get the last inode value, see if there's nothing to do.
> @@ -436,13 +435,15 @@ xfs_bulkstat(
> agino = r.ir_startino + XFS_INODES_PER_CHUNK;
> }
> /* Increment to the next record */
> - error = xfs_btree_increment(cur, 0, &tmp);
> + error = xfs_btree_increment(cur, 0, &stat);
> } else {
> /* Start of ag. Lookup the first inode chunk */
> - error = xfs_inobt_lookup(cur, 0, XFS_LOOKUP_GE, &tmp);
> + error = xfs_inobt_lookup(cur, 0, XFS_LOOKUP_GE, &stat);
> }
> - if (error)
> + if (error || stat == 0) {
> + end_of_ag = 1;
> goto del_cursor;
> + }
>
> /*
> * Loop through inode btree records in this ag,
> @@ -451,8 +452,8 @@ xfs_bulkstat(
> while (irbp < irbufend && icount < ubcount) {
> struct xfs_inobt_rec_incore r;
>
> - error = xfs_inobt_get_rec(cur, &r, &i);
> - if (error || i == 0) {
> + error = xfs_inobt_get_rec(cur, &r, &stat);
> + if (error || stat == 0) {
> end_of_ag = 1;
> goto del_cursor;
> }
> @@ -473,8 +474,8 @@ xfs_bulkstat(
> * Set agino to after this chunk and bump the cursor.
> */
> agino = r.ir_startino + XFS_INODES_PER_CHUNK;
> - error = xfs_btree_increment(cur, 0, &tmp);
> - if (error) {
> + error = xfs_btree_increment(cur, 0, &stat);
> + if (error || stat == 0) {
> end_of_ag = 1;
> goto del_cursor;
> }
> --
> 2.0.0
>
> _______________________________________________
> 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:[~2014-11-04 18:58 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-04 12:53 [PATCH 0/6] xfs: fix the bulkstat mess Dave Chinner
2014-11-04 12:53 ` [PATCH 1/6] xfs: bulkstat btree walk doesn't terminate Dave Chinner
2014-11-04 18:58 ` Brian Foster [this message]
2014-11-04 12:53 ` [PATCH 2/6] xfs: bulkstat chunk formatting cursor is broken Dave Chinner
2014-11-04 18:58 ` Brian Foster
2014-11-04 21:11 ` Dave Chinner
2014-11-04 12:53 ` [PATCH 3/6] xfs: bulkstat chunk-formatter has issues Dave Chinner
2014-11-04 18:58 ` Brian Foster
2014-11-04 21:18 ` Dave Chinner
2014-11-04 12:53 ` [PATCH 4/6] xfs: bulkstat main loop logic is a mess Dave Chinner
2014-11-04 18:59 ` Brian Foster
2014-11-04 21:20 ` Dave Chinner
2014-11-04 12:53 ` [PATCH 5/6] xfs: bulkstat error handling is broken Dave Chinner
2014-11-04 18:59 ` Brian Foster
2014-11-04 12:53 ` [PATCH 6/6] xfs: track bulkstat progress by agino Dave Chinner
2014-11-04 19:00 ` Brian Foster
2014-11-04 21:39 ` Dave Chinner
-- strict thread matches above, loose matches on Subject: below --
2014-11-05 0:05 [PATCH 0/6 v2] xfs: fix the bulkstat mess Dave Chinner
2014-11-05 0:05 ` [PATCH 1/6] xfs: bulkstat btree walk doesn't terminate Dave Chinner
2014-11-06 13:14 [PATCH 0/6 v3] xfs: fix the bulkstat mess Dave Chinner
2014-11-06 13:14 ` [PATCH 1/6] xfs: bulkstat btree walk doesn't terminate Dave Chinner
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=20141104185821.GC55611@bfoster.bfoster \
--to=bfoster@redhat.com \
--cc=david@fromorbit.com \
--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