btrfs: parent bytenr must be aligned to sector size

Message ID 20230426115323.9455-1-abelova@astralinux.ru
State New
Headers
Series btrfs: parent bytenr must be aligned to sector size |

Commit Message

Anastasia Belova April 26, 2023, 11:53 a.m. UTC
  From: Anastasia Belova <abelova@astralinux.ru>

Change nodesize to sectorsize in alignment check
in print_extent_item. Change requirement in comment.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: ea57788eb76d ("btrfs: require only sector size alignment for parent eb bytenr")
Signed-off-by: Anastasia Belova <abelova@astralinux.ru>
---
 fs/btrfs/print-tree.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
  

Comments

Qu Wenruo April 26, 2023, 12:25 p.m. UTC | #1
On 2023/4/26 19:53, Анастасия Белова wrote:
> From: Anastasia Belova <abelova@astralinux.ru>
> 
> Change nodesize to sectorsize in alignment check
> in print_extent_item. Change requirement in comment.
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: ea57788eb76d ("btrfs: require only sector size alignment for parent eb bytenr")
> Signed-off-by: Anastasia Belova <abelova@astralinux.ru>

Reviewed-by: Qu Wenruo <wqu@suse.com>

A little surprised that a static checker can even find such hidden problem.

Thanks,
Qu
> ---
>   fs/btrfs/print-tree.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/print-tree.c b/fs/btrfs/print-tree.c
> index b93c96213304..cee005fb8209 100644
> --- a/fs/btrfs/print-tree.c
> +++ b/fs/btrfs/print-tree.c
> @@ -152,9 +152,9 @@ static void print_extent_item(struct extent_buffer *eb, int slot, int type)
>   			       offset, btrfs_shared_data_ref_count(eb, sref));
>   			/*
>   			 * offset is supposed to be a tree block which
> -			 * must be aligned to nodesize.
> +			 * must be aligned to sectorsize.
>   			 */
> -			if (!IS_ALIGNED(offset, eb->fs_info->nodesize))
> +			if (!IS_ALIGNED(offset, eb->fs_info->sectorsize))
>   				pr_info(
>   			"\t\t\t(parent %llu not aligned to sectorsize %u)\n",
>   				     offset, eb->fs_info->sectorsize);
  
David Sterba April 28, 2023, 4:42 p.m. UTC | #2
On Wed, Apr 26, 2023 at 02:53:23PM +0300, Анастасия Белова wrote:
> From: Anastasia Belova <abelova@astralinux.ru>
> 
> Change nodesize to sectorsize in alignment check
> in print_extent_item. Change requirement in comment.
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: ea57788eb76d ("btrfs: require only sector size alignment for parent eb bytenr")
> Signed-off-by: Anastasia Belova <abelova@astralinux.ru>

Added to misc-next, thanks.
  
David Sterba April 28, 2023, 4:44 p.m. UTC | #3
On Wed, Apr 26, 2023 at 08:25:14PM +0800, Qu Wenruo wrote:
> 
> 
> On 2023/4/26 19:53, Анастасия Белова wrote:
> > From: Anastasia Belova <abelova@astralinux.ru>
> > 
> > Change nodesize to sectorsize in alignment check
> > in print_extent_item. Change requirement in comment.
> > 
> > Found by Linux Verification Center (linuxtesting.org) with SVACE.
> > 
> > Fixes: ea57788eb76d ("btrfs: require only sector size alignment for parent eb bytenr")
> > Signed-off-by: Anastasia Belova <abelova@astralinux.ru>
> 
> Reviewed-by: Qu Wenruo <wqu@suse.com>
> 
> A little surprised that a static checker can even find such hidden problem.

I've seen in Coverity a fuzzy report like "there are 8 cases that do
thing X and this one does not, is it expected?" which is basically just
pattern matching but can be caused by copy&paste mistakes.
  

Patch

diff --git a/fs/btrfs/print-tree.c b/fs/btrfs/print-tree.c
index b93c96213304..cee005fb8209 100644
--- a/fs/btrfs/print-tree.c
+++ b/fs/btrfs/print-tree.c
@@ -152,9 +152,9 @@  static void print_extent_item(struct extent_buffer *eb, int slot, int type)
 			       offset, btrfs_shared_data_ref_count(eb, sref));
 			/*
 			 * offset is supposed to be a tree block which
-			 * must be aligned to nodesize.
+			 * must be aligned to sectorsize.
 			 */
-			if (!IS_ALIGNED(offset, eb->fs_info->nodesize))
+			if (!IS_ALIGNED(offset, eb->fs_info->sectorsize))
 				pr_info(
 			"\t\t\t(parent %llu not aligned to sectorsize %u)\n",
 				     offset, eb->fs_info->sectorsize);