Message ID | f3c6cadc84e001f786b82ef540cf39e9e8ce859e.1686566191.git.fdmanana@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: send: do not BUG_ON() on unexpected symlink data extent | expand |
On 2023/6/12 18:40, fdmanana@kernel.org wrote: > From: Filipe Manana <fdmanana@suse.com> > > There's really no need to BUG_ON() if we find a symlink with an extent > that is not inline or is compressed. We can just make send fail with > an error (-EUCLEAN) and log an informative error message, so just do > that instead of BUG_ON(). > > Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Thanks, Qu > --- > fs/btrfs/send.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c > index af2e153543a5..8bfd44750efe 100644 > --- a/fs/btrfs/send.c > +++ b/fs/btrfs/send.c > @@ -1774,9 +1774,21 @@ static int read_symlink(struct btrfs_root *root, > ei = btrfs_item_ptr(path->nodes[0], path->slots[0], > struct btrfs_file_extent_item); > type = btrfs_file_extent_type(path->nodes[0], ei); > + if (unlikely(type != BTRFS_FILE_EXTENT_INLINE)) { > + ret = -EUCLEAN; > + btrfs_crit(root->fs_info, > +"send: found symlink extent that is not inline, ino %llu root %llu extent type %d", > + ino, btrfs_root_id(root), type); > + goto out; > + } > compression = btrfs_file_extent_compression(path->nodes[0], ei); > - BUG_ON(type != BTRFS_FILE_EXTENT_INLINE); > - BUG_ON(compression); > + if (unlikely(compression != BTRFS_COMPRESS_NONE)) { > + ret = -EUCLEAN; > + btrfs_crit(root->fs_info, > +"send: found symlink extent with compression, ino %llu root %llu compression type %d", > + ino, btrfs_root_id(root), compression); > + goto out; > + } > > off = btrfs_file_extent_inline_start(ei); > len = btrfs_file_extent_ram_bytes(path->nodes[0], ei);
On Mon, Jun 12, 2023 at 11:40:59AM +0100, fdmanana@kernel.org wrote: > From: Filipe Manana <fdmanana@suse.com> > > There's really no need to BUG_ON() if we find a symlink with an extent > that is not inline or is compressed. We can just make send fail with > an error (-EUCLEAN) and log an informative error message, so just do > that instead of BUG_ON(). > > Signed-off-by: Filipe Manana <fdmanana@suse.com> Added to misc-next, thanks.
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index af2e153543a5..8bfd44750efe 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -1774,9 +1774,21 @@ static int read_symlink(struct btrfs_root *root, ei = btrfs_item_ptr(path->nodes[0], path->slots[0], struct btrfs_file_extent_item); type = btrfs_file_extent_type(path->nodes[0], ei); + if (unlikely(type != BTRFS_FILE_EXTENT_INLINE)) { + ret = -EUCLEAN; + btrfs_crit(root->fs_info, +"send: found symlink extent that is not inline, ino %llu root %llu extent type %d", + ino, btrfs_root_id(root), type); + goto out; + } compression = btrfs_file_extent_compression(path->nodes[0], ei); - BUG_ON(type != BTRFS_FILE_EXTENT_INLINE); - BUG_ON(compression); + if (unlikely(compression != BTRFS_COMPRESS_NONE)) { + ret = -EUCLEAN; + btrfs_crit(root->fs_info, +"send: found symlink extent with compression, ino %llu root %llu compression type %d", + ino, btrfs_root_id(root), compression); + goto out; + } off = btrfs_file_extent_inline_start(ei); len = btrfs_file_extent_ram_bytes(path->nodes[0], ei);