Re: [PATCH] btrfs: fix incorrect comparison for delayed refs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 13, 2024 at 4:15 PM Josef Bacik <josef@xxxxxxxxxxxxxx> wrote:
>
> When I reworked delayed ref comparison in cf4f04325b2b ("btrfs: move
> ->parent and ->ref_root into btrfs_delayed_ref_node"), I made a mistake
> and returned -1 for the case where ref1->ref_root was > than
> ref2->ref_root.  This is a subtle bug that can result in improper
> delayed ref running order, which can result in transaction aborts.
>
> cc: stable@xxxxxxxxxxxxxxx
> Fixes: cf4f04325b2b ("btrfs: move ->parent and ->ref_root into btrfs_delayed_ref_node")
> Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx>

Reviewed-by: Filipe Manana <fdmanana@xxxxxxxx>

Ouch!


> ---
>  fs/btrfs/delayed-ref.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
> index 4d2ad5b66928..0d878dbbabba 100644
> --- a/fs/btrfs/delayed-ref.c
> +++ b/fs/btrfs/delayed-ref.c
> @@ -299,7 +299,7 @@ static int comp_refs(struct btrfs_delayed_ref_node *ref1,
>                 if (ref1->ref_root < ref2->ref_root)
>                         return -1;
>                 if (ref1->ref_root > ref2->ref_root)
> -                       return -1;
> +                       return 1;
>                 if (ref1->type == BTRFS_EXTENT_DATA_REF_KEY)
>                         ret = comp_data_refs(ref1, ref2);
>         }
> --
> 2.43.0
>
>





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux