From: Alex Elder <aelder@sgi.com>
To: sekharan@us.ibm.com
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 03/12] xfs: Remove the macro XFS_BUF_ERROR and family
Date: Fri, 22 Jul 2011 16:10:55 -0500 [thread overview]
Message-ID: <1311369055.2771.139.camel@doink> (raw)
In-Reply-To: <1311367796.3210.971.camel@chandra-lucid.beaverton.ibm.com>
On Fri, 2011-07-22 at 13:49 -0700, Chandra Seetharaman wrote:
> Thanks for the review Alex.
>
> See below for comments.
>
> On Fri, 2011-07-22 at 14:38 -0500, Alex Elder wrote:
> > On Thu, 2011-07-21 at 17:32 -0700, Chandra Seetharaman wrote:
> > > Remove the definitions and usage of the macros XFS_BUF_ERROR,
. . .
> > > diff --git a/fs/xfs/quota/xfs_dquot.c b/fs/xfs/quota/xfs_dquot.c
> > > index 837f311..e7e35fb 100644
> > > --- a/fs/xfs/quota/xfs_dquot.c
> > > +++ b/fs/xfs/quota/xfs_dquot.c
> > > @@ -403,7 +403,8 @@ xfs_qm_dqalloc(
> > > dqp->q_blkno,
> > > mp->m_quotainfo->qi_dqchunklen,
> > > 0);
> > > - if (!bp || (error = XFS_BUF_GETERROR(bp)))
> > > + error = xfs_buf_geterror(bp);
> > > + if (error)
> > > goto error1;
> > > /*
> > > * Make a chunk of dquots out of this buffer and log
> >
> > This results in behavior that differs from before.
> > Previously, error would have value 0 following
> > the call to xfs_trans_get_buf() here, meaning that
> > (at error1:) xfs_qm_dqalloc() would return 0 in
> > this case. Now it will return ENOMEM.
> >
> > I think what you have done may be correct, but
> > since the change does more than the simple
> > macro transformation you intend, this change
> > should be done in a separate commit.
> >
> > So either:
> > - post a new patch (preferably before this
> > whole series) that makes this code return
> > ENOMEM if xfs_trans_get_buf() returns a
> > null pointer, then update this patch accordingly;
>
> Will it this way and resent the patch
> xfs_buf_geterror
I don't grok that "sentence" and I'm not sure whether
you are referring to the one above or below.
> > - or just change this patch to return 0 instead
> > of ENOMEM if xfs_trans_get_buf() returns a
> > null pointer.
> >
> > . . .
> >
> > > diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c
> > > index 88d1214..97daa35 100644
> > > --- a/fs/xfs/xfs_vnodeops.c
> > > +++ b/fs/xfs/xfs_vnodeops.c
> > > @@ -83,7 +83,7 @@ xfs_readlink_bmap(
> > >
> > > bp = xfs_buf_read(mp->m_ddev_targp, d, BTOBB(byte_cnt),
> > > XBF_LOCK | XBF_MAPPED | XBF_DONT_BLOCK);
> >
> > xfs_buf_read() can return NULL here, so to match
> > the existing behavior you should call xfs_buf_geterror()
> > here.
> >
> > > - error = XFS_BUF_GETERROR(bp);
> > > + error = bp->b_error;
> > > if (error) {
> > > xfs_ioerror_alert("xfs_readlink",
> > > ip->i_mount, bp, XFS_BUF_ADDR(bp));
>
> I did the change consciously. If bp were NULL, error would have been set
> to ENOMEM, and xfs_ioerror_alert() and xfs_buf_relse(), would have
> accessed bp and tripped anyways. So, I felt using the indirection
> (xfs_buf_geterror()) is not adding any value, hence set error by
> directly accessing b_error.
But you are dereferencing a possibly null pointer in the
code you added. Yes, the code that was already there
should not dereference it either, but that's no excuse
for you to do it. (And fix the other code while you're
there, or make a note to get it fixed later.)
The reason it's important here is that the value of error
gets passed back to the caller, and although I didn't
go very far back to see what effect it has, a quick look
showed that it might lead to different behavior. As I
said, it might be *correct* behavior, but in any case it's
different, so it belongs in its own commit.
> There are more place like these.
I noticed you doing this sort of thing in a bunch of other
spots in your patch, and in all of them they seemed to
follow a test that ensured the buffer pointer was non-null
(or it was implicit, because some *prior* dereference of
the pointer would have been a problem) therefore simply
checking bp->b_error was a fine replacement.
But in this one spot, it's a bit different, so I called
attention to it.
If you are convinced I'm mistaken and this will produce
results identical to before, say so and I'll take a
closer look.
> What do you think of this option
>
> Leave this as is (with b_error), and send another patch to check for bp
> after xfs_buf_read() in all places (if you want this option, what do you
> think error should be set to, I see both EIO and ENOMEM used. I think it
> should be the same always).
>
> If you don't like that option I can revert to xfs_buf_geterror() too.
I think using xfs_buf_geterror() is the easiest thing
to do right now. Changing it such that xfs_readlink_bmap()
returns ENOMEM in the event xfs_buf_read() here returns a null
pointer sounds like a reasonable thing to do, but do it in
a separate patch that focuses on that change and why it's
correct. And (despite what I said earlier) I guess do it
*after* we've got this series in. I'm about ready to get
it committed once you get it updated.
-Alex
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2011-07-22 21:12 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-22 0:32 [PATCH 00/12] Remove number of macros from xfs_buf.h Chandra Seetharaman
2011-07-22 0:32 ` [PATCH 01/12] xfs: Remove the macro XFS_BUF_BFLAGS Chandra Seetharaman
2011-07-22 19:37 ` Alex Elder
2011-07-22 0:32 ` [PATCH 02/12] xfs: Remove the macro XFS_BUF_ZEROFLAGS Chandra Seetharaman
2011-07-22 0:32 ` [PATCH 03/12] xfs: Remove the macro XFS_BUF_ERROR and family Chandra Seetharaman
2011-07-22 19:38 ` Alex Elder
2011-07-22 20:49 ` Chandra Seetharaman
2011-07-22 21:10 ` Alex Elder [this message]
2011-07-22 21:30 ` Alex Elder
2011-07-22 21:31 ` Chandra Seetharaman
2011-07-22 0:33 ` [PATCH 04/12] xfs: Remove macro XFS_BUF_BUSY " Chandra Seetharaman
2011-07-22 19:38 ` Alex Elder
2011-07-22 0:33 ` [PATCH 05/12] xfs: Remove macro XFS_BUF_HOLD Chandra Seetharaman
2011-07-22 19:38 ` Alex Elder
2011-07-22 0:33 ` [PATCH 06/12] xfs: Remove macro XFS_BUF_SET_START Chandra Seetharaman
2011-07-22 19:38 ` Alex Elder
2011-07-22 0:33 ` [PATCH 07/12] xfs: Remove the macro XFS_BUF_PTR Chandra Seetharaman
2011-07-22 19:38 ` Alex Elder
2011-07-22 0:33 ` [PATCH 08/12] xfs: Remove the macro XFS_BUF_SET_PTR Chandra Seetharaman
2011-07-22 19:38 ` Alex Elder
2011-07-22 20:50 ` Chandra Seetharaman
2011-07-24 11:35 ` Christoph Hellwig
2011-07-25 15:57 ` Alex Elder
2011-07-25 16:25 ` Christoph Hellwig
2011-07-25 16:58 ` Alex Elder
2011-07-25 22:18 ` Chandra Seetharaman
2011-07-22 0:33 ` [PATCH 09/12] Replace the macro XFS_BUF_ISPINNED with helper xfs_buf_ispinned Chandra Seetharaman
2011-07-22 19:38 ` Alex Elder
2011-07-22 20:51 ` Chandra Seetharaman
2011-07-22 0:33 ` [PATCH 10/12] xfs: Remove the macro XFS_BUF_SET_TARGET Chandra Seetharaman
2011-07-22 19:38 ` Alex Elder
2011-07-22 0:34 ` [PATCH 11/12] xfs: Remove the macro XFS_BUF_TARGET Chandra Seetharaman
2011-07-22 19:38 ` Alex Elder
2011-07-22 19:46 ` Alex Elder
2011-07-22 0:34 ` [PATCH 12/12] xfs: Remove the macro XFS_BUFTARG_NAME Chandra Seetharaman
2011-07-22 19:49 ` Alex Elder
2011-07-22 21:23 ` Chandra Seetharaman
2011-07-22 21:26 ` Chandra Seetharaman
2011-07-24 11:37 ` Christoph Hellwig
2011-07-25 15:57 ` Alex Elder
2011-07-25 16:26 ` Christoph Hellwig
2011-07-25 22:18 ` Chandra Seetharaman
-- strict thread matches above, loose matches on Subject: below --
2011-07-16 1:21 [PATCH 00/12] Remove number of macros from xfs_buf.h Chandra Seetharaman
2011-07-16 1:21 ` [PATCH 03/12] xfs: Remove the macro XFS_BUF_ERROR and family Chandra Seetharaman
2011-07-16 2:00 ` Christoph Hellwig
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=1311369055.2771.139.camel@doink \
--to=aelder@sgi.com \
--cc=sekharan@us.ibm.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