]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commit
btrfs: qgroup: do a reservation in a higher level.
authorDongsheng Yang <yangds.fnst@cn.fujitsu.com>
Fri, 6 Feb 2015 15:26:52 +0000 (10:26 -0500)
committerChris Mason <clm@fb.com>
Mon, 13 Apr 2015 14:52:50 +0000 (07:52 -0700)
commite2d1f92399afb6ec518b68867ed10db2585b283a
treea6964e3b445268bf5c67c4b482de6c98b03571c8
parent237c0e9f1fbfdca7287f3539f1fa73e5063156b5
btrfs: qgroup: do a reservation in a higher level.

There are two problems in qgroup:

a). The PAGE_CACHE is 4K, even when we are writing a data of 1K,
qgroup will reserve a 4K size. It will cause the last 3K in a qgroup
is not available to user.

b). When user is writing a inline data, qgroup will not reserve it,
it means this is a window we can exceed the limit of a qgroup.

The main idea of this patch is reserving the data size of write_bytes
rather than the reserve_bytes. It means qgroup will not care about
the data size btrfs will reserve for user, but only care about the
data size user is going to write. Then reserve it when user want to
write and release it in transaction committed.

In this way, qgroup can be released from the complex procedure in
btrfs and only do the reserve when user want to write and account
when the data is written in commit_transaction().

Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/ctree.h
fs/btrfs/extent-tree.c
fs/btrfs/file.c
fs/btrfs/inode.c
fs/btrfs/qgroup.c
fs/btrfs/qgroup.h
fs/btrfs/relocation.c