All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] btrfs: csum_tree_block: return proper errno value
@ 2016-03-10 11:09 Alex Lyakas
  2016-03-21 18:50 ` Filipe Manana
  0 siblings, 1 reply; 2+ messages in thread
From: Alex Lyakas @ 2016-03-10 11:09 UTC (permalink / raw)
  To: linux-btrfs; +Cc: fdmanana, Alex Lyakas

Signed-off-by: Alex Lyakas <alex@zadarastorage.com>
---
 fs/btrfs/disk-io.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 4545e2e..4420ab2 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -296,52 +296,52 @@ static int csum_tree_block(struct btrfs_fs_info *fs_info,
 	unsigned long map_len;
 	int err;
 	u32 crc = ~(u32)0;
 	unsigned long inline_result;
 
 	len = buf->len - offset;
 	while (len > 0) {
 		err = map_private_extent_buffer(buf, offset, 32,
 					&kaddr, &map_start, &map_len);
 		if (err)
-			return 1;
+			return err;
 		cur_len = min(len, map_len - (offset - map_start));
 		crc = btrfs_csum_data(kaddr + offset - map_start,
 				      crc, cur_len);
 		len -= cur_len;
 		offset += cur_len;
 	}
 	if (csum_size > sizeof(inline_result)) {
 		result = kzalloc(csum_size, GFP_NOFS);
 		if (!result)
-			return 1;
+			return -ENOMEM;
 	} else {
 		result = (char *)&inline_result;
 	}
 
 	btrfs_csum_final(crc, result);
 
 	if (verify) {
 		if (memcmp_extent_buffer(buf, result, 0, csum_size)) {
 			u32 val;
 			u32 found = 0;
 			memcpy(&found, result, csum_size);
 
 			read_extent_buffer(buf, &val, 0, csum_size);
 			btrfs_warn_rl(fs_info,
 				"%s checksum verify failed on %llu wanted %X found %X "
 				"level %d",
 				fs_info->sb->s_id, buf->start,
 				val, found, btrfs_header_level(buf));
 			if (result != (char *)&inline_result)
 				kfree(result);
-			return 1;
+			return -EUCLEAN;
 		}
 	} else {
 		write_extent_buffer(buf, result, 0, csum_size);
 	}
 	if (result != (char *)&inline_result)
 		kfree(result);
 	return 0;
 }
 
 /*
@@ -509,22 +509,21 @@ static int csum_dirty_buffer(struct btrfs_fs_info *fs_info, struct page *page)
 	u64 start = page_offset(page);
 	u64 found_start;
 	struct extent_buffer *eb;
 
 	eb = (struct extent_buffer *)page->private;
 	if (page != eb->pages[0])
 		return 0;
 	found_start = btrfs_header_bytenr(eb);
 	if (WARN_ON(found_start != start || !PageUptodate(page)))
 		return 0;
-	csum_tree_block(fs_info, eb, 0);
-	return 0;
+	return csum_tree_block(fs_info, eb, 0);
 }
 
 static int check_tree_block_fsid(struct btrfs_fs_info *fs_info,
 				 struct extent_buffer *eb)
 {
 	struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
 	u8 fsid[BTRFS_UUID_SIZE];
 	int ret = 1;
 
 	read_extent_buffer(eb, fsid, btrfs_header_fsid(), BTRFS_FSID_SIZE);
@@ -653,24 +652,22 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
 		btrfs_err(root->fs_info, "bad tree block level %d",
 			   (int)btrfs_header_level(eb));
 		ret = -EIO;
 		goto err;
 	}
 
 	btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb),
 				       eb, found_level);
 
 	ret = csum_tree_block(root->fs_info, eb, 1);
-	if (ret) {
-		ret = -EIO;
+	if (ret)
 		goto err;
-	}
 
 	/*
 	 * If this is a leaf block and it is corrupt, set the corrupt bit so
 	 * that we don't try and read the other copies of this block, just
 	 * return -EIO.
 	 */
 	if (found_level == 0 && check_leaf(root, eb)) {
 		set_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags);
 		ret = -EIO;
 	}
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH 1/2] btrfs: csum_tree_block: return proper errno value
  2016-03-10 11:09 [PATCH 1/2] btrfs: csum_tree_block: return proper errno value Alex Lyakas
@ 2016-03-21 18:50 ` Filipe Manana
  0 siblings, 0 replies; 2+ messages in thread
From: Filipe Manana @ 2016-03-21 18:50 UTC (permalink / raw)
  To: Alex Lyakas; +Cc: linux-btrfs, Alex Lyakas

On Thu, Mar 10, 2016 at 11:09 AM, Alex Lyakas <alex.bolshoy@gmail.com> wrote:
> Signed-off-by: Alex Lyakas <alex@zadarastorage.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>

> ---
>  fs/btrfs/disk-io.c | 13 +++++--------
>  1 file changed, 5 insertions(+), 8 deletions(-)
>
> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
> index 4545e2e..4420ab2 100644
> --- a/fs/btrfs/disk-io.c
> +++ b/fs/btrfs/disk-io.c
> @@ -296,52 +296,52 @@ static int csum_tree_block(struct btrfs_fs_info *fs_info,
>         unsigned long map_len;
>         int err;
>         u32 crc = ~(u32)0;
>         unsigned long inline_result;
>
>         len = buf->len - offset;
>         while (len > 0) {
>                 err = map_private_extent_buffer(buf, offset, 32,
>                                         &kaddr, &map_start, &map_len);
>                 if (err)
> -                       return 1;
> +                       return err;
>                 cur_len = min(len, map_len - (offset - map_start));
>                 crc = btrfs_csum_data(kaddr + offset - map_start,
>                                       crc, cur_len);
>                 len -= cur_len;
>                 offset += cur_len;
>         }
>         if (csum_size > sizeof(inline_result)) {
>                 result = kzalloc(csum_size, GFP_NOFS);
>                 if (!result)
> -                       return 1;
> +                       return -ENOMEM;
>         } else {
>                 result = (char *)&inline_result;
>         }
>
>         btrfs_csum_final(crc, result);
>
>         if (verify) {
>                 if (memcmp_extent_buffer(buf, result, 0, csum_size)) {
>                         u32 val;
>                         u32 found = 0;
>                         memcpy(&found, result, csum_size);
>
>                         read_extent_buffer(buf, &val, 0, csum_size);
>                         btrfs_warn_rl(fs_info,
>                                 "%s checksum verify failed on %llu wanted %X found %X "
>                                 "level %d",
>                                 fs_info->sb->s_id, buf->start,
>                                 val, found, btrfs_header_level(buf));
>                         if (result != (char *)&inline_result)
>                                 kfree(result);
> -                       return 1;
> +                       return -EUCLEAN;
>                 }
>         } else {
>                 write_extent_buffer(buf, result, 0, csum_size);
>         }
>         if (result != (char *)&inline_result)
>                 kfree(result);
>         return 0;
>  }
>
>  /*
> @@ -509,22 +509,21 @@ static int csum_dirty_buffer(struct btrfs_fs_info *fs_info, struct page *page)
>         u64 start = page_offset(page);
>         u64 found_start;
>         struct extent_buffer *eb;
>
>         eb = (struct extent_buffer *)page->private;
>         if (page != eb->pages[0])
>                 return 0;
>         found_start = btrfs_header_bytenr(eb);
>         if (WARN_ON(found_start != start || !PageUptodate(page)))
>                 return 0;
> -       csum_tree_block(fs_info, eb, 0);
> -       return 0;
> +       return csum_tree_block(fs_info, eb, 0);
>  }
>
>  static int check_tree_block_fsid(struct btrfs_fs_info *fs_info,
>                                  struct extent_buffer *eb)
>  {
>         struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
>         u8 fsid[BTRFS_UUID_SIZE];
>         int ret = 1;
>
>         read_extent_buffer(eb, fsid, btrfs_header_fsid(), BTRFS_FSID_SIZE);
> @@ -653,24 +652,22 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
>                 btrfs_err(root->fs_info, "bad tree block level %d",
>                            (int)btrfs_header_level(eb));
>                 ret = -EIO;
>                 goto err;
>         }
>
>         btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb),
>                                        eb, found_level);
>
>         ret = csum_tree_block(root->fs_info, eb, 1);
> -       if (ret) {
> -               ret = -EIO;
> +       if (ret)
>                 goto err;
> -       }
>
>         /*
>          * If this is a leaf block and it is corrupt, set the corrupt bit so
>          * that we don't try and read the other copies of this block, just
>          * return -EIO.
>          */
>         if (found_level == 0 && check_leaf(root, eb)) {
>                 set_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags);
>                 ret = -EIO;
>         }
> --
> 1.9.1
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-03-21 19:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-10 11:09 [PATCH 1/2] btrfs: csum_tree_block: return proper errno value Alex Lyakas
2016-03-21 18:50 ` Filipe Manana

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.