On Fri, Apr 13, 2012 at 04:58:15PM +0200, Jan Schmidt wrote:
> commit 7a3ae2f8c8c8432e65467b7fc84d5deab04061a0 upstream.
> 
> In commit 4692cf58 (Linux 3.3) we introduced new backref walking code for
> btrfs. This assumes we're searching live roots, which requires a transaction
> context. While scrubbing, however, we must not join a transaction because
> this could deadlock with the commit path:
> 
> Can be exploited by corrupting data in btrfs (e.g. btrfs-corrupt-block) and
> then starting a scrub job (btrfs scrub). This will find the corrupt block
> and resolve the file paths affected. If that happens while btrfs is about to
> commit its transaction, a deadlock occurs: The scrub process prevents the
> commit from completing, while the path resolving code joins a transaction
> which blocks until the current transaction completes.
> 
> Additionally, what scrub really wants to do is resolving a logical address
> in the commit root it's currently checking. This patch adds support for
> logical to path resolving on commit roots and makes scrub use that.
> 
> Signed-off-by: Jan Schmidt <[email protected]>
> Signed-off-by: Chris Mason <[email protected]>
> ---
> 
> I know, it's quite big for a stable patch. Anyway, it fixes a 3.3 regression
> and should therefore be included in the next 3.3-stable release. Tested on
> top of Linux 3.3.1.

I'll include it if Chris gives his ack for it.

Chris?

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to