All of lore.kernel.org
 help / color / mirror / Atom feed
From: Trond Myklebust <trondmy@hammerspace.com>
To: "anna.schumaker@netapp.com" <anna.schumaker@netapp.com>,
	"olga.kornievskaia@gmail.com" <olga.kornievskaia@gmail.com>
Cc: "linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH v1 01/12] SUNRPC expose functions for offline remote xprt functionality
Date: Tue, 12 Jul 2022 15:12:44 +0000	[thread overview]
Message-ID: <a12b83a56c6a46cd31b75b471967f68080ce0a5a.camel@hammerspace.com> (raw)
In-Reply-To: <20220620152407.63127-2-olga.kornievskaia@gmail.com>

On Mon, 2022-06-20 at 11:23 -0400, Olga Kornievskaia wrote:
> From: Olga Kornievskaia <kolga@netapp.com>
> 
> Re-arrange the code that make offline transport and delete transport
> callable functions.
> 
> Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
> ---
>  include/linux/sunrpc/xprt.h |  3 +++
>  net/sunrpc/sysfs.c          | 28 +++++-----------------------
>  net/sunrpc/xprt.c           | 35 +++++++++++++++++++++++++++++++++++
>  3 files changed, 43 insertions(+), 23 deletions(-)
> 
> diff --git a/include/linux/sunrpc/xprt.h
> b/include/linux/sunrpc/xprt.h
> index 522bbf937957..0d51b9f9ea37 100644
> --- a/include/linux/sunrpc/xprt.h
> +++ b/include/linux/sunrpc/xprt.h
> @@ -505,4 +505,7 @@ static inline int
> xprt_test_and_set_binding(struct rpc_xprt *xprt)
>         return test_and_set_bit(XPRT_BINDING, &xprt->state);
>  }
>  
> +void xprt_set_offline_locked(struct rpc_xprt *xprt, struct
> rpc_xprt_switch *xps);
> +void xprt_set_online_locked(struct rpc_xprt *xprt, struct
> rpc_xprt_switch *xps);
> +void xprt_delete_locked(struct rpc_xprt *xprt, struct
> rpc_xprt_switch *xps);
>  #endif /* _LINUX_SUNRPC_XPRT_H */
> diff --git a/net/sunrpc/sysfs.c b/net/sunrpc/sysfs.c
> index a3a2f8aeb80e..7330eb9a70cf 100644
> --- a/net/sunrpc/sysfs.c
> +++ b/net/sunrpc/sysfs.c
> @@ -314,32 +314,14 @@ static ssize_t
> rpc_sysfs_xprt_state_change(struct kobject *kobj,
>                 goto release_tasks;
>         }
>         if (offline) {
> -               if (!test_and_set_bit(XPRT_OFFLINE, &xprt->state)) {
> -                       spin_lock(&xps->xps_lock);
> -                       xps->xps_nactive--;
> -                       spin_unlock(&xps->xps_lock);
> -               }
> +               xprt_set_offline_locked(xprt, xps);
>         } else if (online) {
> -               if (test_and_clear_bit(XPRT_OFFLINE, &xprt->state)) {
> -                       spin_lock(&xps->xps_lock);
> -                       xps->xps_nactive++;
> -                       spin_unlock(&xps->xps_lock);
> -               }
> +               xprt_set_online_locked(xprt, xps);
>         } else if (remove) {
> -               if (test_bit(XPRT_OFFLINE, &xprt->state)) {
> -                       if (!test_and_set_bit(XPRT_REMOVE, &xprt-
> >state)) {
> -                               xprt_force_disconnect(xprt);
> -                               if (test_bit(XPRT_CONNECTED, &xprt-
> >state)) {
> -                                       if (!xprt->sending.qlen &&
> -                                           !xprt->pending.qlen &&
> -                                           !xprt->backlog.qlen &&
> -                                           !atomic_long_read(&xprt-
> >queuelen))
> -
>                                                rpc_xprt_switch_remove_
> xprt(xps, xprt);
> -                               }
> -                       }
> -               } else {
> +               if (test_bit(XPRT_OFFLINE, &xprt->state))
> +                       xprt_delete_locked(xprt, xps);
> +               else
>                         count = -EINVAL;
> -               }
>         }
>  
>  release_tasks:
> diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
> index 86d62cffba0d..6480ae324b27 100644
> --- a/net/sunrpc/xprt.c
> +++ b/net/sunrpc/xprt.c
> @@ -2152,3 +2152,38 @@ void xprt_put(struct rpc_xprt *xprt)
>                 kref_put(&xprt->kref, xprt_destroy_kref);
>  }
>  EXPORT_SYMBOL_GPL(xprt_put);
> +
> +void xprt_set_offline_locked(struct rpc_xprt *xprt, struct
> rpc_xprt_switch *xps)
> +{
> +       if (!test_and_set_bit(XPRT_OFFLINE, &xprt->state)) {
> +               spin_lock(&xps->xps_lock);
> +               xps->xps_nactive--;
> +               spin_unlock(&xps->xps_lock);
> +       }
> +}
> +EXPORT_SYMBOL(xprt_set_offline_locked);
> +
> +void xprt_set_online_locked(struct rpc_xprt *xprt, struct
> rpc_xprt_switch *xps)
> +{
> +       if (test_and_clear_bit(XPRT_OFFLINE, &xprt->state)) {
> +               spin_lock(&xps->xps_lock);
> +               xps->xps_nactive++;
> +               spin_unlock(&xps->xps_lock);
> +       }
> +}
> +EXPORT_SYMBOL(xprt_set_online_locked);
> +
> +void xprt_delete_locked(struct rpc_xprt *xprt, struct
> rpc_xprt_switch *xps)
> +{
> +       if (test_and_set_bit(XPRT_REMOVE, &xprt->state))
> +               return;
> +
> +       xprt_force_disconnect(xprt);
> +       if (!test_bit(XPRT_CONNECTED, &xprt->state))
> +               return;
> +
> +       if (!xprt->sending.qlen && !xprt->pending.qlen &&
> +           !xprt->backlog.qlen && !atomic_long_read(&xprt-
> >queuelen))
> +               rpc_xprt_switch_remove_xprt(xps, xprt);
> +}
> +EXPORT_SYMBOL(xprt_delete_locked);

Why are these functions being exported? There is nothing outside the
main sunrpc layer that should be using them.

-- 
Trond Myklebust
Linux NFS client maintainer, Hammerspace
trond.myklebust@hammerspace.com



  reply	other threads:[~2022-07-12 15:18 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-20 15:23 [PATCH v1 00/12] Handling session trunking group membership Olga Kornievskaia
2022-06-20 15:23 ` [PATCH v1 01/12] SUNRPC expose functions for offline remote xprt functionality Olga Kornievskaia
2022-07-12 15:12   ` Trond Myklebust [this message]
2022-07-12 15:57     ` Olga Kornievskaia
2022-06-20 15:23 ` [PATCH v1 02/12] SUNRPC add function to offline remove trunkable transports Olga Kornievskaia
2022-07-12 15:24   ` Trond Myklebust
2022-07-12 16:07     ` Olga Kornievskaia
2022-06-20 15:23 ` [PATCH v1 03/12] NFSv4.1 offline trunkable transports on DESTROY_SESSION Olga Kornievskaia
2022-06-20 15:23 ` [PATCH v1 04/12] SUNRPC create an iterator to list only OFFLINE xprts Olga Kornievskaia
2022-06-20 15:24 ` [PATCH v1 05/12] SUNRPC parameterize rpc_clnt_iterate_for_each_xprt with iterator init function Olga Kornievskaia
2022-07-12 15:43   ` Trond Myklebust
2022-06-20 15:24 ` [PATCH v1 06/12] SUNRPC enable back offline transports in trunking discovery Olga Kornievskaia
2022-06-20 15:24 ` [PATCH v1 07/12] SUNRPC create an rpc function that allows xprt removal from rpc_clnt Olga Kornievskaia
2022-06-20 15:24 ` [PATCH v1 08/12] NFSv4.1 remove xprt from xprt_switch if session trunking test fails Olga Kornievskaia
2022-06-20 15:24 ` [PATCH v1 09/12] SUNRPC restructure rpc_clnt_setup_test_and_add_xprt Olga Kornievskaia
2022-06-20 15:24 ` [PATCH v1 10/12] SUNRPC export xprt_iter_rewind function Olga Kornievskaia
2022-06-20 15:24 ` [PATCH v1 11/12] SUNRPC create a function that probes only offline transports Olga Kornievskaia
2022-07-12 16:00   ` Trond Myklebust
2022-06-20 15:24 ` [PATCH v1 12/12] NFSv4.1 probe offline transports for trunking on session creation Olga Kornievskaia

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=a12b83a56c6a46cd31b75b471967f68080ce0a5a.camel@hammerspace.com \
    --to=trondmy@hammerspace.com \
    --cc=anna.schumaker@netapp.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=olga.kornievskaia@gmail.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.