[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110502144155.GA8045@infradead.org>
Date: Mon, 2 May 2011 10:41:55 -0400
From: Christoph Hellwig <hch@...radead.org>
To: Jan Kara <jack@...e.cz>
Cc: Christoph Hellwig <hch@...radead.org>,
Surbhi Palande <surbhi.palande@...ntu.com>,
Dave Chinner <david@...morbit.com>,
Toshiyuki Okajima <toshi.okajima@...fujitsu.com>,
Ted Ts'o <tytso@....edu>,
Masayoshi MIZUMA <m.mizuma@...fujitsu.com>,
Andreas Dilger <adilger.kernel@...ger.ca>,
linux-ext4@...r.kernel.org, linux-fsdevel@...r.kernel.org
Subject: Re: [RFC][PATCH] Re: [BUG] ext4: cannot unfreeze a filesystem due to
a deadlock
On Mon, May 02, 2011 at 04:20:55PM +0200, Jan Kara wrote:
> Hmm, but what prevents the following race?
>
> Thread 1 Thread 2
> ..
> xfs_trans_alloc()
> xfs_wait_for_freeze(mp, SB_FREEZE_TRANS);
> freeze_super()
sb->s_frozen = SB_FREEZE_TRANS;
> ...
> xfs_fs_freeze()
> ...
> xfs_quiesce_attr()
waits for all active
transactions
> ...
xfs_trans_alloc
-> blocks in xfs_wait_for_freeze
(thus doesn't get to _xfs_trans_alloc)
> _xfs_trans_alloc()
> atomic_inc(&mp->m_active_trans);
> ... goes on modifying the filesystem
>
> It seems to be a similar problem as in ext4 - the atomic_inc() and
> vfs_check_frozen() are in the wrong order...
I can't see the problem in this scheme. Note that we want
_xfs_trans_alloc to be able to create a transaction for
xfs_fs_log_dummy, so that we can write the dummy log record after
freezing out all other transactions, so that one is special cased
and doesn't do the xfs_wait_for_freeze.
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists