Commit 6b5fe46d authored by David Sterba's avatar David Sterba

btrfs: do commit in sync_fs if there are pending changes

If a pending change is requested, it's not processed unless there is a
transaction commit about to happen, not even after sync or SYNC_FS
ioctl. For example a remount that toggles the inode_cache option will
not take effect after sync on a quiescent filesystem.
Signed-off-by: default avatarDavid Sterba <dsterba@suse.cz>
parent 572d9ab7
...@@ -993,9 +993,17 @@ int btrfs_sync_fs(struct super_block *sb, int wait) ...@@ -993,9 +993,17 @@ int btrfs_sync_fs(struct super_block *sb, int wait)
trans = btrfs_attach_transaction_barrier(root); trans = btrfs_attach_transaction_barrier(root);
if (IS_ERR(trans)) { if (IS_ERR(trans)) {
/* no transaction, don't bother */ /* no transaction, don't bother */
if (PTR_ERR(trans) == -ENOENT) if (PTR_ERR(trans) == -ENOENT) {
return 0; /*
return PTR_ERR(trans); * Exit unless we have some pending changes
* that need to go through commit
*/
if (fs_info->pending_changes == 0)
return 0;
trans = btrfs_start_transaction(root, 0);
} else {
return PTR_ERR(trans);
}
} }
return btrfs_commit_transaction(trans, root); return btrfs_commit_transaction(trans, root);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment