Btrfs: avoid tree log commit when there are no changes
rpm has a habit of running fdatasync when the file hasn't changed. We already detect if a file hasn't been changed in the current transaction but it might have been sent to the tree-log in this transaction and not changed since the last call to fsync. In this case, we want to avoid a tree log sync, which includes a number of synchronous writes and barriers. This commit extends the existing tracking of the last transaction to change a file to also track the last sub-transaction. The end result is that rpm -ivh and -Uvh are roughly twice as fast, and on par with ext3. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
@@ -86,6 +86,12 @@ struct btrfs_inode {
|
||||
* transid of the trans_handle that last modified this inode
|
||||
*/
|
||||
u64 last_trans;
|
||||
|
||||
/*
|
||||
* log transid when this inode was last modified
|
||||
*/
|
||||
u64 last_sub_trans;
|
||||
|
||||
/*
|
||||
* transid that last logged this inode
|
||||
*/
|
||||
|
Reference in New Issue
Block a user