btrfs: use a single variable to track return value at btrfs_page_mkwrite()
authorFilipe Manana <fdmanana@suse.com>
Wed, 14 May 2025 11:24:25 +0000 (12:24 +0100)
committerDavid Sterba <dsterba@suse.com>
Thu, 15 May 2025 16:24:44 +0000 (18:24 +0200)
We have two variables to track return values, ret and ret2, with types
vm_fault_t (an unsigned int type) and int, which makes it a bit confusing
and harder to keep track. So use a single variable, of type int, and under
the 'out' label return vmf_error(ret) in case ret contains an error,
otherwise return VM_FAULT_NOPAGE. This is equivalent to what we had before
and it's simpler.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/file.c

index f6b32f24185c4765905a3b0b1e3c4fcae1908db3..8ce6f45f45e0bbfb1fb743ec90dd81e678d792d7 100644 (file)
@@ -1841,8 +1841,7 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
        unsigned long zero_start;
        loff_t size;
        size_t fsize = folio_size(folio);
-       vm_fault_t ret;
-       int ret2;
+       int ret;
        u64 reserved_space;
        u64 page_start;
        u64 page_end;
@@ -1863,21 +1862,14 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
         * end up waiting indefinitely to get a lock on the page currently
         * being processed by btrfs_page_mkwrite() function.
         */
-       ret2 = btrfs_delalloc_reserve_space(BTRFS_I(inode), &data_reserved,
-                                           page_start, reserved_space);
-       if (ret2) {
-               ret = vmf_error(ret2);
+       ret = btrfs_delalloc_reserve_space(BTRFS_I(inode), &data_reserved,
+                                          page_start, reserved_space);
+       if (ret < 0)
                goto out_noreserve;
-       }
 
-       ret2 = file_update_time(vmf->vma->vm_file);
-       if (ret2) {
-               ret = vmf_error(ret2);
+       ret = file_update_time(vmf->vma->vm_file);
+       if (ret < 0)
                goto out;
-       }
-
-       /* Make the VM retry the fault. */
-       ret = VM_FAULT_NOPAGE;
 again:
        down_read(&BTRFS_I(inode)->i_mmap_lock);
        folio_lock(folio);
@@ -1891,9 +1883,8 @@ again:
        folio_wait_writeback(folio);
 
        btrfs_lock_extent(io_tree, page_start, page_end, &cached_state);
-       ret2 = set_folio_extent_mapped(folio);
-       if (ret2 < 0) {
-               ret = vmf_error(ret2);
+       ret = set_folio_extent_mapped(folio);
+       if (ret < 0) {
                btrfs_unlock_extent(io_tree, page_start, page_end, &cached_state);
                goto out_unlock;
        }
@@ -1933,11 +1924,10 @@ again:
                               EXTENT_DELALLOC | EXTENT_DO_ACCOUNTING |
                               EXTENT_DEFRAG, &cached_state);
 
-       ret2 = btrfs_set_extent_delalloc(BTRFS_I(inode), page_start, end, 0,
+       ret = btrfs_set_extent_delalloc(BTRFS_I(inode), page_start, end, 0,
                                        &cached_state);
-       if (ret2) {
+       if (ret < 0) {
                btrfs_unlock_extent(io_tree, page_start, page_end, &cached_state);
-               ret = vmf_error(ret2);
                goto out_unlock;
        }
 
@@ -1974,7 +1964,12 @@ out:
        extent_changeset_free(data_reserved);
 out_noreserve:
        sb_end_pagefault(inode->i_sb);
-       return ret;
+
+       if (ret < 0)
+               return vmf_error(ret);
+
+       /* Make the VM retry the fault. */
+       return VM_FAULT_NOPAGE;
 }
 
 static const struct vm_operations_struct btrfs_file_vm_ops = {