diff options
| -rw-r--r-- | fs/btrfs/super.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index c86fb5438454..6f49b2872a64 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
| @@ -1000,6 +1000,16 @@ int btrfs_sync_fs(struct super_block *sb, int wait) | |||
| 1000 | */ | 1000 | */ |
| 1001 | if (fs_info->pending_changes == 0) | 1001 | if (fs_info->pending_changes == 0) |
| 1002 | return 0; | 1002 | return 0; |
| 1003 | /* | ||
| 1004 | * A non-blocking test if the fs is frozen. We must not | ||
| 1005 | * start a new transaction here otherwise a deadlock | ||
| 1006 | * happens. The pending operations are delayed to the | ||
| 1007 | * next commit after thawing. | ||
| 1008 | */ | ||
| 1009 | if (__sb_start_write(sb, SB_FREEZE_WRITE, false)) | ||
| 1010 | __sb_end_write(sb, SB_FREEZE_WRITE); | ||
| 1011 | else | ||
| 1012 | return 0; | ||
| 1003 | trans = btrfs_start_transaction(root, 0); | 1013 | trans = btrfs_start_transaction(root, 0); |
| 1004 | } | 1014 | } |
| 1005 | if (IS_ERR(trans)) | 1015 | if (IS_ERR(trans)) |
