Thread (48 messages) 48 messages, 8 authors, 2012-11-14

Re: [PATCH 15/26] Btrfs: add a new source file with device replace code

From: Stefan Behrens <hidden>
Date: 2012-11-09 10:19:19

On Fri, 9 Nov 2012 08:44:01 +0800, Liu Bo wrote:
On Thu, Nov 08, 2012 at 06:24:36PM +0100, Stefan Behrens wrote:
quoted
On Thu, 8 Nov 2012 22:50:47 +0800, Liu Bo wrote:
quoted
On Tue, Nov 06, 2012 at 05:38:33PM +0100, Stefan Behrens wrote:
quoted
+	trans = btrfs_start_transaction(root, 0);
why a start_transaction here?  Any reasons?
(same question also for some other places)
Without this transaction, there is outstanding I/O which is not flushed.
Pending writes that go only to the old disk need to be flushed before
the mode is switched to write all live data to the source disk and to
the target disk as well. The copy operation that is part of the scrub
code works on the commit root for performance reasons. Every write
request that is performed after the commit root is established needs to
go to both disks. Those requests that already have the bdev assigned
(i.e., btrfs_map_bio() was already called) cannot be duplicated anymore
to write to the new disk as well.

btrfs_dev_replace_finishing() looks similar and goes through a
transaction commit between the steps where the bdev in the mapping tree
is swapped and the step when the old bdev is freed. Otherwise the bdev
would be accessed after being freed.
I see, if you're only about to flush metadata, why not join a transaction?
btrfs_join_transaction() would delay the current transaction and enforce
that the current transaction is used and not a new one.
btrfs_start_transaction() would use either the current transaction, or a
new one. It is less interfering.

Since in dev-replace.c it is not required to enforce that a current
transaction is joined, btrfs_start_transaction() is the one to choose
here, as I understood it.

But that's an interesting topic and I would appreciate to get a definite
rule which one to choose when.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help