Re: [PATCH v2 00/15] Btrfs: tree modification log

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jan,

I have been reading through the code of this change. Since my
understanding of the ctree mechanics is quite limited at this point, I
was wondering whether you can give some overall perspective.

I understand that you added hooks in the code that does raw tree
changes, to record them in an in-memory structure, giving them a
time_seq stamp.

You say that using this mechanism, it is possible to get a consistent
tree. Do you mean by this -  a tree like it was before the current
transaction has begun? What is not consistent that callers of the
regular btrfs_search_slot() can get back? When one should consider
using btrfs_search_old_slot() vs regular btrfs_search_slot()? Also, is
there any relation between the time_seq stamps and the transaction
stamps? What example can I do, to actually see (and better understand)
the effect of your code?

Hope I am asking right questions.

Thanks,
Alex.


On Sat, May 26, 2012 at 1:59 PM, Jan Schmidt <list.btrfs@xxxxxxxxxxxxx> wrote:
> Chris: Please pull
>
>        git://git.jan-o-sch.net/btrfs-unstable for-chris
>
> for 3.5, it's a major improvement for the backref resolver and a good
> base to build qgroups and "btrfs send" onto. And, besides all other, its
> implications on existing code outside backref.c are very small, mostly
> added lines with no effect outside the backref resolver.
>
> This patch set is to provide reliable backref resolving on busy trees.
> The previous attempts to block certain tree modifications while we're
> resolving backrefs all ended up in (dead-) locking nightmares. What we
> now do is we record all the changes we make to fs trees while backref
> resolving is in progress into a tree modification log. During backref
> resolving we then merge the current state of the tree with the recorded
> modifications to get a consistent previous state of the tree.
>
> The first three commits are plain bug fixes, but the tree mod log
> cannot function without them. So they're included in this patch set.
> To only these three fixes, you can pull
>
>        git://git.jan-o-sch.net/btrfs-unstable 3.5-fixes
>
> For the whole tree modification log, pull
>
>        git://git.jan-o-sch.net/btrfs-unstable tree-mod-log-v2
>
> The tree-mod-log-v2 head is a stable alias for "for-chris".
>
> Both branches are based on the current for-linus branch from Chris'
> repository. Checked with xfstests (fails 254 273 275, which i claim has
> nothing to do with this patch set) and hammered on the filesystem with
> fs_mark while resolving backrefs in a loop.
>
> I removed the qgroups patch series still contained in v1 because I
> realized that the fs_mark tests I was doing weren't sufficient. When
> testing qgroups with fsstress only for a few seconds, the accounting
> breaks. Nothing really bad happens, but quota patches that don't get
> quotas right are of litte use. A new qgroup patch set might come out
> soon, but it won't make it into 3.5. There's a branch in my git repo
> called tree-mod-log-quota-v1+fixes holding the current qgroup state.
>
> Test it, break it, report it :-)
>
> -Jan
>
> --
> Changes v1->v2:
> - qgroups patches removed
> - ulist realloc bugfix added (reported by Alexander Block)
> - btrfs_find_parent_nodes bugfix (reported by Alexander Block)
> - various smaller bugs in the v1 patch set fixed (reported by Alexander
>  Block, Tsutomu Itoh and myself)
> --
>
> Jan Schmidt (15):
>  Btrfs: ulist realloc bugfix
>  Btrfs: bugfix in btrfs_find_parent_nodes
>  Btrfs: bugfix: ignore the wrong key for indirect tree block backrefs
>  Btrfs: look into the extent during find_all_leafs
>  Btrfs: don't set for_cow parameter for tree block functions
>  Btrfs: move struct seq_list to ctree.h
>  Btrfs: dummy extent buffers for tree mod log
>  Btrfs: add tree mod log to fs_info
>  Btrfs: add tree modification log functions
>  Btrfs: put all block modifications into the tree mod log
>  Btrfs: add del_ptr and insert_ptr modifications to the tree mod log
>  Btrfs: add btrfs_search_old_slot
>  Btrfs: use the tree modification log for backref resolving
>  Btrfs: fs_info variable for join_transaction
>  Btrfs: tree mod log sanity checks in join_transaction
>
>  fs/btrfs/backref.c     |  465 +++++++++++++++++++---------
>  fs/btrfs/backref.h     |    3 +-
>  fs/btrfs/ctree.c       |  831 ++++++++++++++++++++++++++++++++++++++++++++++--
>  fs/btrfs/ctree.h       |   27 ++-
>  fs/btrfs/delayed-ref.h |    5 -
>  fs/btrfs/disk-io.c     |    7 +-
>  fs/btrfs/extent-tree.c |   10 +-
>  fs/btrfs/extent_io.c   |   80 +++++-
>  fs/btrfs/extent_io.h   |    3 +
>  fs/btrfs/ioctl.c       |    2 +-
>  fs/btrfs/transaction.c |   46 ++-
>  fs/btrfs/ulist.c       |   23 +-
>  fs/btrfs/ulist.h       |    9 +-
>  13 files changed, 1286 insertions(+), 225 deletions(-)
>
> --
> 1.7.3.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux