summaryrefslogtreecommitdiff
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
authorDongsheng Yang <yangds.fnst@cn.fujitsu.com>2015-02-06 10:26:52 -0500
committerChris Mason <clm@fb.com>2015-04-13 07:52:50 -0700
commite2d1f92399afb6ec518b68867ed10db2585b283a (patch)
treea6964e3b445268bf5c67c4b482de6c98b03571c8 /fs/btrfs/inode.c
parent237c0e9f1fbfdca7287f3539f1fa73e5063156b5 (diff)
downloadlinux-e2d1f92399afb6ec518b68867ed10db2585b283a.tar.gz
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>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c15
1 files changed, 0 insertions, 15 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index a9f69a0d4b08..27b59b8362f9 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -754,9 +754,6 @@ retry:
}
goto out_free;
}
- btrfs_qgroup_update_reserved_bytes(root->fs_info,
- root->root_key.objectid,
- ins.offset, 1);
/*
* here we're doing allocation and writeback of the
* compressed pages
@@ -981,10 +978,6 @@ static noinline int cow_file_range(struct inode *inode,
if (ret < 0)
goto out_unlock;
- btrfs_qgroup_update_reserved_bytes(root->fs_info,
- root->root_key.objectid,
- ins.offset, 1);
-
em = alloc_extent_map();
if (!em) {
ret = -ENOMEM;
@@ -7037,10 +7030,6 @@ static struct extent_map *btrfs_new_extent_direct(struct inode *inode,
return ERR_PTR(ret);
}
- btrfs_qgroup_update_reserved_bytes(root->fs_info,
- root->root_key.objectid,
- ins.offset, 1);
-
return em;
}
@@ -9595,10 +9584,6 @@ static int __btrfs_prealloc_file_range(struct inode *inode, int mode,
break;
}
- btrfs_qgroup_update_reserved_bytes(root->fs_info,
- root->root_key.objectid,
- ins.offset, 1);
-
btrfs_drop_extent_cache(inode, cur_offset,
cur_offset + ins.offset -1, 0);