public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH] xfs: lobotomise xfs_trans_read_buf_map()
Date: Tue, 2 Dec 2014 08:59:30 -0800	[thread overview]
Message-ID: <20141202165930.GA28571@infradead.org> (raw)
In-Reply-To: <1417473290-17544-1-git-send-email-david@fromorbit.com>

On Tue, Dec 02, 2014 at 09:34:50AM +1100, Dave Chinner wrote:
> The only way we can find a buffer that has not had IO completed on
> it is if it had readahead issued on it, but we never do readahead on
> buffers that we have already joined into a transaction. Hence this
> condition cannot occur, and buffers locked and joined into a
> transaction should always be marked done and not under IO.

Should we add an ASSERT that would trigger when someone tries
to issue readahead on a buffer with b_transp set?

>  	bp = xfs_buf_read_map(target, map, nmaps, flags, ops);
> -	if (bp == NULL) {
> -		*bpp = NULL;
> -		return (flags & XBF_TRYLOCK) ?
> -					0 : -ENOMEM;
> +	if (!bp) {
> +		if (!(flags & XBF_TRYLOCK))
> +			return -ENOMEM;
> +		return tp ? 0 : -EAGAIN;

Can you fix the inconsistent return for the trylock case in a follow on
patch?  This difference doesn't look intentional to me, and I would
be surprised if it's correctly handled in the callers.

>  	}
> +
>  	if (bp->b_error) {
>  		error = bp->b_error;
> +		if (!XFS_FORCED_SHUTDOWN(mp))
> +			xfs_buf_ioerror_alert(bp, __func__);
> +		bp->b_flags &= ~XBF_DONE;
>  		xfs_buf_stale(bp);
> -		XFS_BUF_DONE(bp);

The old non-tp case did a XFS_BUF_UNDONE, which you open code here,
while the with-tp case did a XFS_BUF_DONE.  I think this change needs
a little explanation.

>  #ifdef DEBUG
> -	if (xfs_do_error && !(tp->t_flags & XFS_TRANS_DIRTY)) {
> +	if (xfs_do_error && (!tp || !(tp->t_flags & XFS_TRANS_DIRTY))) {
>  		if (xfs_error_target == target) {
>  			if (((xfs_req_num++) % xfs_error_mod) == 0) {
> -				xfs_force_shutdown(tp->t_mountp,
> -						   SHUTDOWN_META_IO_ERROR);
>  				xfs_buf_relse(bp);
> -				xfs_debug(mp, "Returning trans error!");
> +				xfs_debug(mp, "Returning error!");
>  				return -EIO;
>  			}
>  		}

I would suggest to kill this xfs_do_error error code, it's the last
use of the never initialized xfs_do_error and xfs_error_target
variables.

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2014-12-02 16:59 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-01 22:34 [PATCH] xfs: lobotomise xfs_trans_read_buf_map() Dave Chinner
2014-12-02 16:59 ` Christoph Hellwig [this message]
2014-12-02 22:45   ` Dave Chinner
2014-12-02 23:07     ` [PATCH v2] " Dave Chinner
2014-12-03 10:53       ` Christoph Hellwig
2014-12-03 10:51     ` [PATCH] " Christoph Hellwig
2014-12-03 14:09       ` Mark Tinguely
2014-12-03 19:54         ` 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=20141202165930.GA28571@infradead.org \
    --to=hch@infradead.org \
    --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