diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-07-01 15:38:16 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-07-01 15:38:16 -0400 |
commit | d3bc0e67f8525760479e88a51e87bb0c026e40f3 (patch) | |
tree | 30ce55f25ffe60a754a51f09dc2e07a4268a59ce | |
parent | 4a770e638f531d078b580a5a24412c5e5f8f7ddb (diff) | |
parent | e4e7ede739f7fb468686dfffa2d1e35dca35bacd (diff) |
Merge tag 'for-4.18-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs fixes from David Sterba:
"We have a few regression fixes for qgroup rescan status tracking and
the vm_fault_t conversion that mixed up the error values"
* tag 'for-4.18-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux:
Btrfs: fix mount failure when qgroup rescan is in progress
Btrfs: fix regression in btrfs_page_mkwrite() from vm_fault_t conversion
btrfs: quota: Set rescan progress to (u64)-1 if we hit last leaf
-rw-r--r-- | fs/btrfs/inode.c | 3 | ||||
-rw-r--r-- | fs/btrfs/qgroup.c | 17 |
2 files changed, 15 insertions, 5 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index be98dfc8d0f8..eba61bcb9bb3 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -9005,13 +9005,14 @@ again: | |||
9005 | 9005 | ||
9006 | unlock_extent_cached(io_tree, page_start, page_end, &cached_state); | 9006 | unlock_extent_cached(io_tree, page_start, page_end, &cached_state); |
9007 | 9007 | ||
9008 | out_unlock: | ||
9009 | if (!ret2) { | 9008 | if (!ret2) { |
9010 | btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE, true); | 9009 | btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE, true); |
9011 | sb_end_pagefault(inode->i_sb); | 9010 | sb_end_pagefault(inode->i_sb); |
9012 | extent_changeset_free(data_reserved); | 9011 | extent_changeset_free(data_reserved); |
9013 | return VM_FAULT_LOCKED; | 9012 | return VM_FAULT_LOCKED; |
9014 | } | 9013 | } |
9014 | |||
9015 | out_unlock: | ||
9015 | unlock_page(page); | 9016 | unlock_page(page); |
9016 | out: | 9017 | out: |
9017 | btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE, (ret != 0)); | 9018 | btrfs_delalloc_release_extents(BTRFS_I(inode), PAGE_SIZE, (ret != 0)); |
diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 1874a6d2e6f5..c25dc47210a3 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c | |||
@@ -2680,8 +2680,10 @@ out: | |||
2680 | free_extent_buffer(scratch_leaf); | 2680 | free_extent_buffer(scratch_leaf); |
2681 | } | 2681 | } |
2682 | 2682 | ||
2683 | if (done && !ret) | 2683 | if (done && !ret) { |
2684 | ret = 1; | 2684 | ret = 1; |
2685 | fs_info->qgroup_rescan_progress.objectid = (u64)-1; | ||
2686 | } | ||
2685 | return ret; | 2687 | return ret; |
2686 | } | 2688 | } |
2687 | 2689 | ||
@@ -2784,13 +2786,20 @@ qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid, | |||
2784 | 2786 | ||
2785 | if (!init_flags) { | 2787 | if (!init_flags) { |
2786 | /* we're resuming qgroup rescan at mount time */ | 2788 | /* we're resuming qgroup rescan at mount time */ |
2787 | if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN)) | 2789 | if (!(fs_info->qgroup_flags & |
2790 | BTRFS_QGROUP_STATUS_FLAG_RESCAN)) { | ||
2788 | btrfs_warn(fs_info, | 2791 | btrfs_warn(fs_info, |
2789 | "qgroup rescan init failed, qgroup is not enabled"); | 2792 | "qgroup rescan init failed, qgroup is not enabled"); |
2790 | else if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON)) | 2793 | ret = -EINVAL; |
2794 | } else if (!(fs_info->qgroup_flags & | ||
2795 | BTRFS_QGROUP_STATUS_FLAG_ON)) { | ||
2791 | btrfs_warn(fs_info, | 2796 | btrfs_warn(fs_info, |
2792 | "qgroup rescan init failed, qgroup rescan is not queued"); | 2797 | "qgroup rescan init failed, qgroup rescan is not queued"); |
2793 | return -EINVAL; | 2798 | ret = -EINVAL; |
2799 | } | ||
2800 | |||
2801 | if (ret) | ||
2802 | return ret; | ||
2794 | } | 2803 | } |
2795 | 2804 | ||
2796 | mutex_lock(&fs_info->qgroup_rescan_lock); | 2805 | mutex_lock(&fs_info->qgroup_rescan_lock); |