Re: [PATCH] ceph: defer clearing the CEPH_I_FLUSH_SNAPS flag

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

 



On Wed, May 8, 2024 at 3:13 PM <xiubli@xxxxxxxxxx> wrote:
>
> From: Xiubo Li <xiubli@xxxxxxxxxx>
>
> Clear the flag just after the capsnap request being sent out. Else the
> ceph_check_caps() will race with it and send the cap update request
> just before this capsnap request. Which will cause the cap update request
> to miss setting the CEPH_CLIENT_CAPS_PENDING_CAPSNAP flag and finally
> the mds will drop the capsnap request to floor.
>
> URL: https://tracker.ceph.com/issues/64209
> URL: https://tracker.ceph.com/issues/65705
> Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx>
> ---
>  fs/ceph/caps.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
> index 197cb383f829..fe6452321466 100644
> --- a/fs/ceph/caps.c
> +++ b/fs/ceph/caps.c
> @@ -1678,8 +1678,6 @@ static void __ceph_flush_snaps(struct ceph_inode_info *ci,
>                 last_tid = capsnap->cap_flush.tid;
>         }
>
> -       ci->i_ceph_flags &= ~CEPH_I_FLUSH_SNAPS;
> -
>         while (first_tid <= last_tid) {
>                 struct ceph_cap *cap = ci->i_auth_cap;
>                 struct ceph_cap_flush *cf = NULL, *iter;
> @@ -1724,6 +1722,15 @@ static void __ceph_flush_snaps(struct ceph_inode_info *ci,
>                 ceph_put_cap_snap(capsnap);
>                 spin_lock(&ci->i_ceph_lock);
>         }
> +
> +       /*
> +        * Clear the flag just after the capsnap request being sent out. Else the
> +        * ceph_check_caps() will race with it and send the cap update request
> +        * just before this capsnap request. Which will cause the cap update request
> +        * to miss setting the CEPH_CLIENT_CAPS_PENDING_CAPSNAP flag and finally
> +        * the mds will drop the capsnap request to floor.
> +        */
> +       ci->i_ceph_flags &= ~CEPH_I_FLUSH_SNAPS;
>  }
>
>  void ceph_flush_snaps(struct ceph_inode_info *ci,
> --
> 2.44.0
>

Tested-by: Venky Shankar <vshankar@xxxxxxxxxx>

-- 
Cheers,
Venky






[Index of Archives]     [CEPH Users]     [Ceph Large]     [Ceph Dev]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux