btrfs: move the !zoned assert into run_delalloc_cow
authorChristoph Hellwig <hch@lst.de>
Mon, 24 Jul 2023 14:22:41 +0000 (07:22 -0700)
committerDavid Sterba <dsterba@suse.com>
Mon, 21 Aug 2023 12:54:47 +0000 (14:54 +0200)
Having the assert in the actual helper documents the pre-conditions
much better than having it in the caller, so move it.

Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/inode.c

index 8d0dd26..ca0f478 100644 (file)
@@ -1976,6 +1976,13 @@ static noinline int run_delalloc_nocow(struct btrfs_inode *inode,
        u64 ino = btrfs_ino(inode);
        struct can_nocow_file_extent_args nocow_args = { 0 };
 
+       /*
+        * Normally on a zoned device we're only doing COW writes, but in case
+        * of relocation on a zoned filesystem serializes I/O so that we're only
+        * writing sequentially and can end up here as well.
+        */
+       ASSERT(!btrfs_is_zoned(fs_info) || btrfs_is_data_reloc_root(root));
+
        path = btrfs_alloc_path();
        if (!path) {
                ret = -ENOMEM;
@@ -2257,14 +2264,6 @@ int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page
                 start >= page_offset(locked_page) + PAGE_SIZE));
 
        if (should_nocow(inode, start, end)) {
-               /*
-                * Normally on a zoned device we're only doing COW writes, but
-                * in case of relocation on a zoned filesystem we have taken
-                * precaution, that we're only writing sequentially. It's safe
-                * to use run_delalloc_nocow() here, like for  regular
-                * preallocated inodes.
-                */
-               ASSERT(!zoned || btrfs_is_data_reloc_root(inode->root));
                ret = run_delalloc_nocow(inode, locked_page, start, end);
                goto out;
        }