]> git.baikalelectronics.ru Git - kernel.git/commitdiff
btrfs: drop unnecessary ASSERT from btrfs_submit_direct()
authorNaohiro Aota <naohiro.aota@wdc.com>
Wed, 21 Jul 2021 12:43:34 +0000 (21:43 +0900)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Aug 2021 11:19:08 +0000 (13:19 +0200)
When on SINGLE block group, btrfs_get_io_geometry() will return "the
size of the block group - the offset of the logical address within the
block group" as geom.len. Since we allow up to 8 GiB zone size on zoned
filesystem, we can have up to 8 GiB block group, so can have up to 8 GiB
geom.len as well. With this setup, we easily hit the "ASSERT(geom.len <=
INT_MAX);".

The ASSERT looks like to guard btrfs_bio_clone_partial() and bio_trim()
which both take "int" (now u64 due to the previous patch). So to be
precise the ASSERT should check if clone_len <= UINT_MAX. But actually,
clone_len is already capped by bio.bi_iter.bi_size which is unsigned
int. So the ASSERT is not necessary.

Drop the ASSERT and properly compare submit_len and geom.len in u64.
Then, let the implicit casting to convert it to u64.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/inode.c

index c917e311784238e71dc4a3ee32cf653360c4f4b6..3ed88f2ac393a798d9c0491b07122027f2dade4f 100644 (file)
@@ -8239,8 +8239,8 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap,
        u64 start_sector;
        int async_submit = 0;
        u64 submit_len;
-       int clone_offset = 0;
-       int clone_len;
+       u64 clone_offset = 0;
+       u64 clone_len;
        u64 logical;
        int ret;
        blk_status_t status;
@@ -8288,9 +8288,9 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap,
                        status = errno_to_blk_status(ret);
                        goto out_err_em;
                }
-               ASSERT(geom.len <= INT_MAX);
 
-               clone_len = min_t(int, submit_len, geom.len);
+               clone_len = min(submit_len, geom.len);
+               ASSERT(clone_len <= UINT_MAX);
 
                /*
                 * This will never fail as it's passing GPF_NOFS and