mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 15:03:53 +02:00
nfs/localio: remove redundant code and simplify LOCALIO enablement
Remove nfs_local_enable and nfs_local_disable, instead use nfs_localio_enable_client and nfs_localio_disable_client. Discontinue use of the NFS_CS_LOCAL_IO bit in the nfs_client struct's cl_flags to reflect that LOCALIO is enabled; instead just test if the net member of the nfs_uuid_t struct is set. Also remove NFS_CS_LOCAL_IO. Lastly, remove trace_nfs_local_enable and trace_nfs_local_disable because comparable traces are available from nfs_localio.ko. Suggested-by: NeilBrown <neilb@suse.de> Signed-off-by: Mike Snitzer <snitzer@kernel.org> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
This commit is contained in:
parent
0dc7314152
commit
779a395189
|
@ -38,7 +38,7 @@
|
|||
#include <linux/sunrpc/bc_xprt.h>
|
||||
#include <linux/nsproxy.h>
|
||||
#include <linux/pid_namespace.h>
|
||||
|
||||
#include <linux/nfslocalio.h>
|
||||
|
||||
#include "nfs4_fs.h"
|
||||
#include "callback.h"
|
||||
|
@ -243,7 +243,7 @@ static void pnfs_init_server(struct nfs_server *server)
|
|||
*/
|
||||
void nfs_free_client(struct nfs_client *clp)
|
||||
{
|
||||
nfs_local_disable(clp);
|
||||
nfs_localio_disable_client(clp);
|
||||
|
||||
/* -EIO all pending I/O */
|
||||
if (!IS_ERR(clp->cl_rpcclient))
|
||||
|
|
|
@ -455,7 +455,6 @@ extern int nfs_wait_bit_killable(struct wait_bit_key *key, int mode);
|
|||
|
||||
#if IS_ENABLED(CONFIG_NFS_LOCALIO)
|
||||
/* localio.c */
|
||||
extern void nfs_local_disable(struct nfs_client *);
|
||||
extern void nfs_local_probe(struct nfs_client *);
|
||||
extern struct nfsd_file *nfs_local_open_fh(struct nfs_client *,
|
||||
const struct cred *,
|
||||
|
@ -472,7 +471,6 @@ extern int nfs_local_commit(struct nfsd_file *,
|
|||
extern bool nfs_server_is_local(const struct nfs_client *clp);
|
||||
|
||||
#else /* CONFIG_NFS_LOCALIO */
|
||||
static inline void nfs_local_disable(struct nfs_client *clp) {}
|
||||
static inline void nfs_local_probe(struct nfs_client *clp) {}
|
||||
static inline struct nfsd_file *
|
||||
nfs_local_open_fh(struct nfs_client *clp, const struct cred *cred,
|
||||
|
|
|
@ -56,7 +56,7 @@ MODULE_PARM_DESC(localio_O_DIRECT_semantics,
|
|||
|
||||
static inline bool nfs_client_is_local(const struct nfs_client *clp)
|
||||
{
|
||||
return !!test_bit(NFS_CS_LOCAL_IO, &clp->cl_flags);
|
||||
return !!rcu_access_pointer(clp->cl_uuid.net);
|
||||
}
|
||||
|
||||
bool nfs_server_is_local(const struct nfs_client *clp)
|
||||
|
@ -121,24 +121,6 @@ const struct rpc_program nfslocalio_program = {
|
|||
.stats = &nfslocalio_rpcstat,
|
||||
};
|
||||
|
||||
/*
|
||||
* nfs_local_enable - enable local i/o for an nfs_client
|
||||
*/
|
||||
static void nfs_local_enable(struct nfs_client *clp)
|
||||
{
|
||||
trace_nfs_local_enable(clp);
|
||||
nfs_localio_enable_client(clp);
|
||||
}
|
||||
|
||||
/*
|
||||
* nfs_local_disable - disable local i/o for an nfs_client
|
||||
*/
|
||||
void nfs_local_disable(struct nfs_client *clp)
|
||||
{
|
||||
trace_nfs_local_disable(clp);
|
||||
nfs_localio_disable_client(clp);
|
||||
}
|
||||
|
||||
/*
|
||||
* nfs_init_localioclient - Initialise an NFS localio client connection
|
||||
*/
|
||||
|
@ -194,19 +176,19 @@ void nfs_local_probe(struct nfs_client *clp)
|
|||
/* Disallow localio if disabled via sysfs or AUTH_SYS isn't used */
|
||||
if (!localio_enabled ||
|
||||
clp->cl_rpcclient->cl_auth->au_flavor != RPC_AUTH_UNIX) {
|
||||
nfs_local_disable(clp);
|
||||
nfs_localio_disable_client(clp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (nfs_client_is_local(clp)) {
|
||||
/* If already enabled, disable and re-enable */
|
||||
nfs_local_disable(clp);
|
||||
nfs_localio_disable_client(clp);
|
||||
}
|
||||
|
||||
if (!nfs_uuid_begin(&clp->cl_uuid))
|
||||
return;
|
||||
if (nfs_server_uuid_is_local(clp))
|
||||
nfs_local_enable(clp);
|
||||
nfs_localio_enable_client(clp);
|
||||
nfs_uuid_end(&clp->cl_uuid);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfs_local_probe);
|
||||
|
@ -748,7 +730,7 @@ int nfs_local_doio(struct nfs_client *clp, struct nfsd_file *localio,
|
|||
|
||||
if (status != 0) {
|
||||
if (status == -EAGAIN)
|
||||
nfs_local_disable(clp);
|
||||
nfs_localio_disable_client(clp);
|
||||
nfs_local_file_put(localio);
|
||||
hdr->task.tk_status = status;
|
||||
nfs_local_hdr_release(hdr, call_ops);
|
||||
|
|
|
@ -1714,38 +1714,6 @@ TRACE_EVENT(nfs_local_open_fh,
|
|||
)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(nfs_local_client_event,
|
||||
TP_PROTO(
|
||||
const struct nfs_client *clp
|
||||
),
|
||||
|
||||
TP_ARGS(clp),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(unsigned int, protocol)
|
||||
__string(server, clp->cl_hostname)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->protocol = clp->rpc_ops->version;
|
||||
__assign_str(server);
|
||||
),
|
||||
|
||||
TP_printk(
|
||||
"server=%s NFSv%u", __get_str(server), __entry->protocol
|
||||
)
|
||||
);
|
||||
|
||||
#define DEFINE_NFS_LOCAL_CLIENT_EVENT(name) \
|
||||
DEFINE_EVENT(nfs_local_client_event, name, \
|
||||
TP_PROTO( \
|
||||
const struct nfs_client *clp \
|
||||
), \
|
||||
TP_ARGS(clp))
|
||||
|
||||
DEFINE_NFS_LOCAL_CLIENT_EVENT(nfs_local_enable);
|
||||
DEFINE_NFS_LOCAL_CLIENT_EVENT(nfs_local_disable);
|
||||
|
||||
DECLARE_EVENT_CLASS(nfs_xdr_event,
|
||||
TP_PROTO(
|
||||
const struct xdr_stream *xdr,
|
||||
|
|
|
@ -37,7 +37,7 @@ static LIST_HEAD(nfs_uuids);
|
|||
|
||||
void nfs_uuid_init(nfs_uuid_t *nfs_uuid)
|
||||
{
|
||||
nfs_uuid->net = NULL;
|
||||
RCU_INIT_POINTER(nfs_uuid->net, NULL);
|
||||
nfs_uuid->dom = NULL;
|
||||
nfs_uuid->list_lock = NULL;
|
||||
INIT_LIST_HEAD(&nfs_uuid->list);
|
||||
|
@ -49,7 +49,7 @@ EXPORT_SYMBOL_GPL(nfs_uuid_init);
|
|||
bool nfs_uuid_begin(nfs_uuid_t *nfs_uuid)
|
||||
{
|
||||
spin_lock(&nfs_uuid->lock);
|
||||
if (nfs_uuid->net) {
|
||||
if (rcu_access_pointer(nfs_uuid->net)) {
|
||||
/* This nfs_uuid is already in use */
|
||||
spin_unlock(&nfs_uuid->lock);
|
||||
return false;
|
||||
|
@ -74,9 +74,9 @@ EXPORT_SYMBOL_GPL(nfs_uuid_begin);
|
|||
|
||||
void nfs_uuid_end(nfs_uuid_t *nfs_uuid)
|
||||
{
|
||||
if (nfs_uuid->net == NULL) {
|
||||
if (!rcu_access_pointer(nfs_uuid->net)) {
|
||||
spin_lock(&nfs_uuid->lock);
|
||||
if (nfs_uuid->net == NULL) {
|
||||
if (!rcu_access_pointer(nfs_uuid->net)) {
|
||||
/* Not local, remove from nfs_uuids */
|
||||
spin_lock(&nfs_uuids_lock);
|
||||
list_del_init(&nfs_uuid->list);
|
||||
|
@ -139,12 +139,8 @@ EXPORT_SYMBOL_GPL(nfs_uuid_is_local);
|
|||
|
||||
void nfs_localio_enable_client(struct nfs_client *clp)
|
||||
{
|
||||
nfs_uuid_t *nfs_uuid = &clp->cl_uuid;
|
||||
|
||||
spin_lock(&nfs_uuid->lock);
|
||||
set_bit(NFS_CS_LOCAL_IO, &clp->cl_flags);
|
||||
/* nfs_uuid_is_local() does the actual enablement */
|
||||
trace_nfs_localio_enable_client(clp);
|
||||
spin_unlock(&nfs_uuid->lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfs_localio_enable_client);
|
||||
|
||||
|
@ -152,15 +148,15 @@ EXPORT_SYMBOL_GPL(nfs_localio_enable_client);
|
|||
* Cleanup the nfs_uuid_t embedded in an nfs_client.
|
||||
* This is the long-form of nfs_uuid_init().
|
||||
*/
|
||||
static void nfs_uuid_put(nfs_uuid_t *nfs_uuid)
|
||||
static bool nfs_uuid_put(nfs_uuid_t *nfs_uuid)
|
||||
{
|
||||
LIST_HEAD(local_files);
|
||||
struct nfs_file_localio *nfl, *tmp;
|
||||
|
||||
spin_lock(&nfs_uuid->lock);
|
||||
if (unlikely(!nfs_uuid->net)) {
|
||||
if (unlikely(!rcu_access_pointer(nfs_uuid->net))) {
|
||||
spin_unlock(&nfs_uuid->lock);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
RCU_INIT_POINTER(nfs_uuid->net, NULL);
|
||||
|
||||
|
@ -192,22 +188,14 @@ static void nfs_uuid_put(nfs_uuid_t *nfs_uuid)
|
|||
|
||||
module_put(nfsd_mod);
|
||||
spin_unlock(&nfs_uuid->lock);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void nfs_localio_disable_client(struct nfs_client *clp)
|
||||
{
|
||||
nfs_uuid_t *nfs_uuid = NULL;
|
||||
|
||||
spin_lock(&clp->cl_uuid.lock); /* aka &nfs_uuid->lock */
|
||||
if (test_and_clear_bit(NFS_CS_LOCAL_IO, &clp->cl_flags)) {
|
||||
/* &clp->cl_uuid is always not NULL, using as bool here */
|
||||
nfs_uuid = &clp->cl_uuid;
|
||||
if (nfs_uuid_put(&clp->cl_uuid))
|
||||
trace_nfs_localio_disable_client(clp);
|
||||
}
|
||||
spin_unlock(&clp->cl_uuid.lock);
|
||||
|
||||
if (nfs_uuid)
|
||||
nfs_uuid_put(nfs_uuid);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfs_localio_disable_client);
|
||||
|
||||
|
|
|
@ -50,7 +50,6 @@ struct nfs_client {
|
|||
#define NFS_CS_DS 7 /* - Server is a DS */
|
||||
#define NFS_CS_REUSEPORT 8 /* - reuse src port on reconnect */
|
||||
#define NFS_CS_PNFS 9 /* - Server used for pnfs */
|
||||
#define NFS_CS_LOCAL_IO 10 /* - client is local */
|
||||
struct sockaddr_storage cl_addr; /* server identifier */
|
||||
size_t cl_addrlen;
|
||||
char * cl_hostname; /* hostname of server */
|
||||
|
|
|
@ -111,6 +111,10 @@ static inline void nfs_close_local_fh(struct nfs_file_localio *nfl)
|
|||
static inline void nfsd_localio_ops_init(void)
|
||||
{
|
||||
}
|
||||
struct nfs_client;
|
||||
static inline void nfs_localio_disable_client(struct nfs_client *clp)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* CONFIG_NFS_LOCALIO */
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user