From: Jeff Layton <jlayton@kernel.org>
To: xiubli@redhat.com
Cc: idryomov@gmail.com, vshankar@redhat.com, ceph-devel@vger.kernel.org
Subject: Re: [PATCH 2/2] ceph: do not release the global snaprealm until unmounting
Date: Tue, 22 Feb 2022 05:22:35 -0500 [thread overview]
Message-ID: <68e565e99f10c549ceea646fd5d1dcdd6bec0be2.camel@kernel.org> (raw)
In-Reply-To: <20220222063433.217466-3-xiubli@redhat.com>
On Tue, 2022-02-22 at 14:34 +0800, xiubli@redhat.com wrote:
> From: Xiubo Li <xiubli@redhat.com>
>
> The global snaprealm would be created and then destroyed immediately
> every time when updating it.
>
Does this cause some sort of issue, or is it just inefficient?
> URL: https://tracker.ceph.com/issues/54362
> Signed-off-by: Xiubo Li <xiubli@redhat.com>
> ---
> fs/ceph/mds_client.c | 2 +-
> fs/ceph/snap.c | 13 +++++++++++--
> fs/ceph/super.h | 2 +-
> include/linux/ceph/ceph_fs.h | 3 ++-
> 4 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
> index 65bd43d4cafc..325f8071a324 100644
> --- a/fs/ceph/mds_client.c
> +++ b/fs/ceph/mds_client.c
> @@ -4866,7 +4866,7 @@ void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc)
> mutex_unlock(&mdsc->mutex);
>
> ceph_cleanup_snapid_map(mdsc);
> - ceph_cleanup_empty_realms(mdsc);
> + ceph_cleanup_global_and_empty_realms(mdsc);
Please use tab indent.
>
> cancel_work_sync(&mdsc->cap_reclaim_work);
> cancel_delayed_work_sync(&mdsc->delayed_work); /* cancel timer */
> diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c
> index 66a1a92cf579..cc9097c27052 100644
> --- a/fs/ceph/snap.c
> +++ b/fs/ceph/snap.c
> @@ -121,7 +121,11 @@ static struct ceph_snap_realm *ceph_create_snap_realm(
> if (!realm)
> return ERR_PTR(-ENOMEM);
>
> - atomic_set(&realm->nref, 1); /* for caller */
> + /* Do not release the global dummy snaprealm until unmouting */
> + if (ino == CEPH_INO_GLOBAL_SNAPREALM)
> + atomic_set(&realm->nref, 2);
> + else
> + atomic_set(&realm->nref, 1);
> realm->ino = ino;
> INIT_LIST_HEAD(&realm->children);
> INIT_LIST_HEAD(&realm->child_item);
> @@ -261,9 +265,14 @@ static void __cleanup_empty_realms(struct ceph_mds_client *mdsc)
> spin_unlock(&mdsc->snap_empty_lock);
> }
>
> -void ceph_cleanup_empty_realms(struct ceph_mds_client *mdsc)
> +void ceph_cleanup_global_and_empty_realms(struct ceph_mds_client *mdsc)
> {
> + struct ceph_snap_realm *global_realm;
> +
> down_write(&mdsc->snap_rwsem);
> + global_realm = __lookup_snap_realm(mdsc, CEPH_INO_GLOBAL_SNAPREALM);
> + if (global_realm)
> + ceph_put_snap_realm(mdsc, global_realm);
> __cleanup_empty_realms(mdsc);
> up_write(&mdsc->snap_rwsem);
> }
> diff --git a/fs/ceph/super.h b/fs/ceph/super.h
> index baac800a6d11..250aefecd628 100644
> --- a/fs/ceph/super.h
> +++ b/fs/ceph/super.h
> @@ -942,7 +942,7 @@ extern void ceph_handle_snap(struct ceph_mds_client *mdsc,
> struct ceph_msg *msg);
> extern int __ceph_finish_cap_snap(struct ceph_inode_info *ci,
> struct ceph_cap_snap *capsnap);
> -extern void ceph_cleanup_empty_realms(struct ceph_mds_client *mdsc);
> +extern void ceph_cleanup_global_and_empty_realms(struct ceph_mds_client *mdsc);
>
> extern struct ceph_snapid_map *ceph_get_snapid_map(struct ceph_mds_client *mdsc,
> u64 snap);
> diff --git a/include/linux/ceph/ceph_fs.h b/include/linux/ceph/ceph_fs.h
> index f14f9bc290e6..86bf82dbd8b8 100644
> --- a/include/linux/ceph/ceph_fs.h
> +++ b/include/linux/ceph/ceph_fs.h
> @@ -28,7 +28,8 @@
>
>
> #define CEPH_INO_ROOT 1
> -#define CEPH_INO_CEPH 2 /* hidden .ceph dir */
> +#define CEPH_INO_CEPH 2 /* hidden .ceph dir */
> +#define CEPH_INO_GLOBAL_SNAPREALM 3 /* global dummy snaprealm */
>
> /* arbitrary limit on max # of monitors (cluster of 3 is typical) */
> #define CEPH_MAX_MON 31
--
Jeff Layton <jlayton@kernel.org>
next prev parent reply other threads:[~2022-02-22 10:22 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-22 6:34 [PATCH 0/2] ceph: create the global dummy snaprealm once xiubli
2022-02-22 6:34 ` [PATCH 1/2] ceph: remove incorrect and unused CEPH_INO_DOTDOT macro xiubli
2022-02-22 6:34 ` [PATCH 2/2] ceph: do not release the global snaprealm until unmounting xiubli
2022-02-22 10:22 ` Jeff Layton [this message]
2022-02-22 10:40 ` Xiubo Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=68e565e99f10c549ceea646fd5d1dcdd6bec0be2.camel@kernel.org \
--to=jlayton@kernel.org \
--cc=ceph-devel@vger.kernel.org \
--cc=idryomov@gmail.com \
--cc=vshankar@redhat.com \
--cc=xiubli@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.