Re: [PATCH] ceph: fix possible long time wait during umount

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

 



On Wed, 2019-12-04 at 01:27 -0500, xiubli@xxxxxxxxxx wrote:
> From: Xiubo Li <xiubli@xxxxxxxxxx>
> 
> During umount, if there has no any unsafe request in the mdsc and
> some requests still in-flight and not got reply yet, and if the
> rest requets are all safe ones, after that even all of them in mdsc
> are unregistered, the umount must wait until after mount_timeout
> seconds anyway.
> 
> Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx>
> ---
>  fs/ceph/mds_client.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
> index 163b470f3000..39f4d8501df5 100644
> --- a/fs/ceph/mds_client.c
> +++ b/fs/ceph/mds_client.c
> @@ -2877,6 +2877,10 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
>  		set_bit(CEPH_MDS_R_GOT_SAFE, &req->r_req_flags);
>  		__unregister_request(mdsc, req);
>  
> +		/* last request during umount? */
> +		if (mdsc->stopping && !__get_oldest_req(mdsc))
> +			complete_all(&mdsc->safe_umount_waiters);
> +
>  		if (test_bit(CEPH_MDS_R_GOT_UNSAFE, &req->r_req_flags)) {
>  			/*
>  			 * We already handled the unsafe response, now do the
> @@ -2887,9 +2891,6 @@ static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg)
>  			 */
>  			dout("got safe reply %llu, mds%d\n", tid, mds);
>  
> -			/* last unsafe request during umount? */
> -			if (mdsc->stopping && !__get_oldest_req(mdsc))
> -				complete_all(&mdsc->safe_umount_waiters);
>  			mutex_unlock(&mdsc->mutex);
>  			goto out;
>  		}

Looks reasonable. AIUI, the MDS is free to send a safe reply without
ever sending an unsafe one, so I don't see why we want to make that
conditional on receiving an earlier unsafe reply.
-- 
Jeff Layton <jlayton@xxxxxxxxxx>




[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