public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 2/5] xfs: use xfs_ilock_map_shared in xfs_qm_dqtobp
Date: Fri, 6 Dec 2013 08:03:56 +1100	[thread overview]
Message-ID: <20131205210356.GE29897@dastard> (raw)
In-Reply-To: <20131205205345.GA12393@infradead.org>

On Thu, Dec 05, 2013 at 12:53:45PM -0800, Christoph Hellwig wrote:
> On Fri, Dec 06, 2013 at 07:41:08AM +1100, Dave Chinner wrote:
> > However, it raises a bigger question about dquot allocation sanity
> > to me: what makes the map returned valid after we've unlocked the
> > extent list?
> > 
> > We then use it to determine whether to allocate a
> > dquot or not, and xfs_qm_dqalloc() then does this after calling
> > xfs_bmapi_write():
> > 
> > 	ASSERT((map.br_startblock != DELAYSTARTBLOCK) &&
> > 	       (map.br_startblock != HOLESTARTBLOCK));
> > 
> > What's to prevent someone coming in between the xfs_bmapi_read()
> > and *write() calls and allocating a different dquot in the same
> > cluster and therefore beating the first thread to the allocation?
> > 
> > This read/write race exists elsewhere - e.g. xfs_iomap_write_allocate
> > documents it for the data path - and it has to be specifically
> > handled to prevent corruption.....
> 
> Yeah, we'll need to read-read the extent map in xfs_qm_dqalloc. I  I
> think this is efficiently paper over by the buffer lock - we take
> it right after the xfs_bmapi_write over the period of initialization
> the on-disk dquots and copying the one we were called for into the
> in-memory one.  So while we might have been corrupting dquots all
> over no one has noticed because we had a non-corrupted version
> in-memory that overwrote the corrupted one again later.  Uhh..

Hmmm - I didn't think of the "rewrite dquot form memory into buffer"
aspect of it. That makes it even more subtle and less likely to be
seen unless we crash at exactly the wrong time...

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

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

  reply	other threads:[~2013-12-05 21:04 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-05 15:58 [PATCH 0/5] extent list locking fixes Christoph Hellwig
2013-12-05 15:58 ` [PATCH 1/5] xfs: take the ilock around xfs_bmapi_read in xfs_zero_remaining_bytes Christoph Hellwig
2013-12-05 19:38   ` Ben Myers
2013-12-05 20:31   ` Dave Chinner
2013-12-05 20:37     ` Ben Myers
2013-12-05 20:40     ` Christoph Hellwig
2013-12-05 15:58 ` [PATCH 2/5] xfs: use xfs_ilock_map_shared in xfs_qm_dqtobp Christoph Hellwig
2013-12-05 19:46   ` Ben Myers
2013-12-05 20:41   ` Dave Chinner
2013-12-05 20:53     ` Christoph Hellwig
2013-12-05 21:03       ` Dave Chinner [this message]
2013-12-05 15:58 ` [PATCH 3/5] xfs: use xfs_ilock_map_shared in xfs_qm_dqiterate Christoph Hellwig
2013-12-05 19:48   ` Ben Myers
2013-12-05 20:45   ` Dave Chinner
2013-12-05 15:58 ` [PATCH 4/5] xfs: use xfs_ilock_map_shared in xfs_attr_get Christoph Hellwig
2013-12-05 19:57   ` Ben Myers
2013-12-05 20:59   ` Dave Chinner
2013-12-05 21:01     ` Christoph Hellwig
2013-12-05 21:05       ` Dave Chinner
2013-12-05 21:10         ` Christoph Hellwig
2013-12-05 21:17           ` Dave Chinner
2013-12-05 15:58 ` [PATCH 5/5] xfs: assert that we hold the ilock for extent map access Christoph Hellwig
2013-12-05 20:11   ` Ben Myers
2013-12-05 21:10   ` Dave Chinner
2013-12-05 21:22     ` Christoph Hellwig
2013-12-05 21:40       ` 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=20131205210356.GE29897@dastard \
    --to=david@fromorbit.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