On Tue, Jul 18, 2023 at 09:37:58AM -0400, Chuck Lever wrote: > On Tue, Jul 18, 2023 at 04:38:08PM +1000, NeilBrown wrote: > > When a sequence of numbers are needed for internal-use only, an enum is > > typically best. The sequence will inevitably need to be changed one > > day, and having an enum means the developer doesn't need to think about > > renumbering after insertion or deletion. The patch will be easier to > > review. > > Last sentence needs to define the antecedant of "The patch". I've changed the last sentence in the description to "Such patches will be easier ..." I've applied 1/5 through 5/5, with a few cosmetic changes, to the SUNRPC threads topic branch. 6/6 needed more work: I've split this into one patch for each new enum. The XPT_ flags change needed TRACE_DEFINE_ENUM macros to make show_svc_xprt_flags() work properly. Added. The new enum for SVC_GARBAGE and friends... those aren't bit flags. So I've made that a named enum so that it can be used for type- checking function return values properly. I dropped the hunk that changes XPRT_SOCK_CONNECTING and friends. That should be submitted separately to Anna and Trond. All this will appear in the nfsd repo later today. > > Signed-off-by: NeilBrown <neilb@xxxxxxx> > > --- > > include/linux/sunrpc/cache.h | 11 +++++++---- > > include/linux/sunrpc/svc.h | 34 ++++++++++++++++++++-------------- > > include/linux/sunrpc/svc_xprt.h | 39 +++++++++++++++++++++------------------ > > include/linux/sunrpc/svcauth.h | 29 ++++++++++++++++------------- > > include/linux/sunrpc/xprtsock.h | 25 +++++++++++++------------ > > 5 files changed, 77 insertions(+), 61 deletions(-) > > > > diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h > > index 518bd28f5ab8..3cc4f4f0c764 100644 > > --- a/include/linux/sunrpc/cache.h > > +++ b/include/linux/sunrpc/cache.h > > @@ -56,10 +56,13 @@ struct cache_head { > > struct kref ref; > > unsigned long flags; > > }; > > -#define CACHE_VALID 0 /* Entry contains valid data */ > > -#define CACHE_NEGATIVE 1 /* Negative entry - there is no match for the key */ > > -#define CACHE_PENDING 2 /* An upcall has been sent but no reply received yet*/ > > -#define CACHE_CLEANED 3 /* Entry has been cleaned from cache */ > > +/* cache_head.flags */ > > +enum { > > + CACHE_VALID, /* Entry contains valid data */ > > + CACHE_NEGATIVE, /* Negative entry - there is no match for the key */ > > + CACHE_PENDING, /* An upcall has been sent but no reply received yet*/ > > + CACHE_CLEANED, /* Entry has been cleaned from cache */ > > +}; > > Weird comment of the day: Please use a double-tab before the comments > to leave room for larger flag names in the future. > > > > #define CACHE_NEW_EXPIRY 120 /* keep new things pending confirmation for 120 seconds */ > > > > diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h > > index f3df7f963653..83f31a09c853 100644 > > --- a/include/linux/sunrpc/svc.h > > +++ b/include/linux/sunrpc/svc.h > > @@ -31,7 +31,7 @@ > > * node traffic on multi-node NUMA NFS servers. > > */ > > struct svc_pool { > > - unsigned int sp_id; /* pool id; also node id on NUMA */ > > + unsigned int sp_id; /* pool id; also node id on NUMA */ > > spinlock_t sp_lock; /* protects all fields */ > > struct list_head sp_sockets; /* pending sockets */ > > unsigned int sp_nrthreads; /* # of threads in pool */ > > @@ -44,12 +44,15 @@ struct svc_pool { > > struct percpu_counter sp_threads_starved; > > struct percpu_counter sp_threads_no_work; > > > > -#define SP_TASK_PENDING (0) /* still work to do even if no > > - * xprt is queued. */ > > -#define SP_CONGESTED (1) > > unsigned long sp_flags; > > } ____cacheline_aligned_in_smp; > > > > +/* bits for sp_flags */ > > +enum { > > + SP_TASK_PENDING, /* still work to do even if no xprt is queued */ > > + SP_CONGESTED, /* all threads are busy, none idle */ > > +}; > > + > > /* > > * RPC service. > > * > > @@ -232,16 +235,6 @@ struct svc_rqst { > > u32 rq_proc; /* procedure number */ > > u32 rq_prot; /* IP protocol */ > > int rq_cachetype; /* catering to nfsd */ > > -#define RQ_SECURE (0) /* secure port */ > > -#define RQ_LOCAL (1) /* local request */ > > -#define RQ_USEDEFERRAL (2) /* use deferral */ > > -#define RQ_DROPME (3) /* drop current reply */ > > -#define RQ_SPLICE_OK (4) /* turned off in gss privacy > > - * to prevent encrypting page > > - * cache pages */ > > -#define RQ_VICTIM (5) /* about to be shut down */ > > -#define RQ_BUSY (6) /* request is busy */ > > -#define RQ_DATA (7) /* request has data */ > > unsigned long rq_flags; /* flags field */ > > ktime_t rq_qtime; /* enqueue time */ > > > > @@ -272,6 +265,19 @@ struct svc_rqst { > > void ** rq_lease_breaker; /* The v4 client breaking a lease */ > > }; > > > > +/* bits for rq_flags */ > > +enum { > > + RQ_SECURE, /* secure port */ > > + RQ_LOCAL, /* local request */ > > + RQ_USEDEFERRAL, /* use deferral */ > > + RQ_DROPME, /* drop current reply */ > > + RQ_SPLICE_OK, /* turned off in gss privacy to prevent encrypting page > > + * cache pages */ > > + RQ_VICTIM, /* about to be shut down */ > > + RQ_BUSY, /* request is busy */ > > + RQ_DATA, /* request has data */ > > +}; > > + > > Also here -- two tab stops instead of one. > > > > #define SVC_NET(rqst) (rqst->rq_xprt ? rqst->rq_xprt->xpt_net : rqst->rq_bc_net) > > > > /* > > diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h > > index a6b12631db21..af383d0349b3 100644 > > --- a/include/linux/sunrpc/svc_xprt.h > > +++ b/include/linux/sunrpc/svc_xprt.h > > @@ -56,26 +56,9 @@ struct svc_xprt { > > struct list_head xpt_list; > > struct list_head xpt_ready; > > unsigned long xpt_flags; > > -#define XPT_BUSY 0 /* enqueued/receiving */ > > -#define XPT_CONN 1 /* conn pending */ > > -#define XPT_CLOSE 2 /* dead or dying */ > > -#define XPT_DATA 3 /* data pending */ > > -#define XPT_TEMP 4 /* connected transport */ > > -#define XPT_DEAD 6 /* transport closed */ > > -#define XPT_CHNGBUF 7 /* need to change snd/rcv buf sizes */ > > -#define XPT_DEFERRED 8 /* deferred request pending */ > > -#define XPT_OLD 9 /* used for xprt aging mark+sweep */ > > -#define XPT_LISTENER 10 /* listening endpoint */ > > -#define XPT_CACHE_AUTH 11 /* cache auth info */ > > -#define XPT_LOCAL 12 /* connection from loopback interface */ > > -#define XPT_KILL_TEMP 13 /* call xpo_kill_temp_xprt before closing */ > > -#define XPT_CONG_CTRL 14 /* has congestion control */ > > -#define XPT_HANDSHAKE 15 /* xprt requests a handshake */ > > -#define XPT_TLS_SESSION 16 /* transport-layer security established */ > > -#define XPT_PEER_AUTH 17 /* peer has been authenticated */ > > > > struct svc_serv *xpt_server; /* service for transport */ > > - atomic_t xpt_reserved; /* space on outq that is rsvd */ > > + atomic_t xpt_reserved; /* space on outq that is rsvd */ > > atomic_t xpt_nr_rqsts; /* Number of requests */ > > struct mutex xpt_mutex; /* to serialize sending data */ > > spinlock_t xpt_lock; /* protects sk_deferred > > @@ -96,6 +79,26 @@ struct svc_xprt { > > struct rpc_xprt *xpt_bc_xprt; /* NFSv4.1 backchannel */ > > struct rpc_xprt_switch *xpt_bc_xps; /* NFSv4.1 backchannel */ > > }; > > +/* flag bits for xpt_flags */ > > +enum { > > + XPT_BUSY, /* enqueued/receiving */ > > + XPT_CONN, /* conn pending */ > > + XPT_CLOSE, /* dead or dying */ > > + XPT_DATA, /* data pending */ > > + XPT_TEMP, /* connected transport */ > > + XPT_DEAD, /* transport closed */ > > + XPT_CHNGBUF, /* need to change snd/rcv buf sizes */ > > + XPT_DEFERRED, /* deferred request pending */ > > + XPT_OLD, /* used for xprt aging mark+sweep */ > > + XPT_LISTENER, /* listening endpoint */ > > + XPT_CACHE_AUTH, /* cache auth info */ > > + XPT_LOCAL, /* connection from loopback interface */ > > + XPT_KILL_TEMP, /* call xpo_kill_temp_xprt before closing */ > > + XPT_CONG_CTRL, /* has congestion control */ > > + XPT_HANDSHAKE, /* xprt requests a handshake */ > > + XPT_TLS_SESSION, /* transport-layer security established */ > > + XPT_PEER_AUTH, /* peer has been authenticated */ > > +}; > > > > static inline void unregister_xpt_user(struct svc_xprt *xpt, struct svc_xpt_user *u) > > { > > diff --git a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h > > index 6d9cc9080aca..8d1d0d0721d2 100644 > > --- a/include/linux/sunrpc/svcauth.h > > +++ b/include/linux/sunrpc/svcauth.h > > @@ -133,19 +133,22 @@ struct auth_ops { > > int (*set_client)(struct svc_rqst *rq); > > }; > > > > -#define SVC_GARBAGE 1 > > -#define SVC_SYSERR 2 > > -#define SVC_VALID 3 > > -#define SVC_NEGATIVE 4 > > -#define SVC_OK 5 > > -#define SVC_DROP 6 > > -#define SVC_CLOSE 7 /* Like SVC_DROP, but request is definitely > > - * lost so if there is a tcp connection, it > > - * should be closed > > - */ > > -#define SVC_DENIED 8 > > -#define SVC_PENDING 9 > > -#define SVC_COMPLETE 10 > > +/*return values for svc functions that analyse request */ > > +enum { > > + SVC_GARBAGE, > > + SVC_SYSERR, > > + SVC_VALID, > > + SVC_NEGATIVE, > > + SVC_OK, > > + SVC_DROP, > > + SVC_CLOSE, /* Like SVC_DROP, but request is definitely > > + * lost so if there is a tcp connection, it > > + * should be closed > > + */ > > + SVC_DENIED, > > + SVC_PENDING, > > + SVC_COMPLETE, > > +}; > > > > struct svc_xprt; > > > > diff --git a/include/linux/sunrpc/xprtsock.h b/include/linux/sunrpc/xprtsock.h > > index 700a1e6c047c..1ed2f446010b 100644 > > --- a/include/linux/sunrpc/xprtsock.h > > +++ b/include/linux/sunrpc/xprtsock.h > > @@ -81,17 +81,18 @@ struct sock_xprt { > > }; > > > > /* > > - * TCP RPC flags > > + * TCP RPC flags in ->sock_state > > */ > > -#define XPRT_SOCK_CONNECTING 1U > > -#define XPRT_SOCK_DATA_READY (2) > > -#define XPRT_SOCK_UPD_TIMEOUT (3) > > -#define XPRT_SOCK_WAKE_ERROR (4) > > -#define XPRT_SOCK_WAKE_WRITE (5) > > -#define XPRT_SOCK_WAKE_PENDING (6) > > -#define XPRT_SOCK_WAKE_DISCONNECT (7) > > -#define XPRT_SOCK_CONNECT_SENT (8) > > -#define XPRT_SOCK_NOSPACE (9) > > -#define XPRT_SOCK_IGNORE_RECV (10) > > - > > +enum { > > + XPRT_SOCK_CONNECTING, > > + XPRT_SOCK_DATA_READY, > > + XPRT_SOCK_UPD_TIMEOUT, > > + XPRT_SOCK_WAKE_ERROR, > > + XPRT_SOCK_WAKE_WRITE, > > + XPRT_SOCK_WAKE_PENDING, > > + XPRT_SOCK_WAKE_DISCONNECT, > > + XPRT_SOCK_CONNECT_SENT, > > + XPRT_SOCK_NOSPACE, > > + XPRT_SOCK_IGNORE_RECV, > > +}; > > #endif /* _LINUX_SUNRPC_XPRTSOCK_H */ > > > > > > Let's not change client-side code in this patch. Please split this > hunk out and send it to Trond and Anna separately. > -- Chuck Lever