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); |
