mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
nfsd: make nfsd_stats.th_cnt atomic_t
This allows us to move the updates for th_cnt out of the mutex. This is a step towards reducing mutex coverage in nfsd(). Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
ec52361df9
commit
9b6c8c9beb
@ -57,7 +57,7 @@ static __be32 nfsd_init_request(struct svc_rqst *,
|
||||
/*
|
||||
* nfsd_mutex protects nn->nfsd_serv -- both the pointer itself and the members
|
||||
* of the svc_serv struct. In particular, ->sv_nrthreads but also to some
|
||||
* extent ->sv_temp_socks and ->sv_permsocks. It also protects nfsdstats.th_cnt
|
||||
* extent ->sv_temp_socks and ->sv_permsocks.
|
||||
*
|
||||
* If (out side the lock) nn->nfsd_serv is non-NULL, then it must point to a
|
||||
* properly initialised 'struct svc_serv' with ->sv_nrthreads > 0 (unless
|
||||
@ -955,8 +955,8 @@ nfsd(void *vrqstp)
|
||||
allow_signal(SIGINT);
|
||||
allow_signal(SIGQUIT);
|
||||
|
||||
nfsdstats.th_cnt++;
|
||||
mutex_unlock(&nfsd_mutex);
|
||||
atomic_inc(&nfsdstats.th_cnt);
|
||||
|
||||
set_freezable();
|
||||
|
||||
@ -983,8 +983,8 @@ nfsd(void *vrqstp)
|
||||
/* Clear signals before calling svc_exit_thread() */
|
||||
flush_signals(current);
|
||||
|
||||
atomic_dec(&nfsdstats.th_cnt);
|
||||
mutex_lock(&nfsd_mutex);
|
||||
nfsdstats.th_cnt --;
|
||||
|
||||
out:
|
||||
/* Take an extra ref so that the svc_put in svc_exit_thread()
|
||||
|
@ -45,7 +45,7 @@ static int nfsd_proc_show(struct seq_file *seq, void *v)
|
||||
percpu_counter_sum_positive(&nfsdstats.counter[NFSD_STATS_IO_WRITE]));
|
||||
|
||||
/* thread usage: */
|
||||
seq_printf(seq, "th %u 0", nfsdstats.th_cnt);
|
||||
seq_printf(seq, "th %u 0", atomic_read(&nfsdstats.th_cnt));
|
||||
|
||||
/* deprecated thread usage histogram stats */
|
||||
for (i = 0; i < 10; i++)
|
||||
|
@ -29,11 +29,9 @@ enum {
|
||||
struct nfsd_stats {
|
||||
struct percpu_counter counter[NFSD_STATS_COUNTERS_NUM];
|
||||
|
||||
/* Protected by nfsd_mutex */
|
||||
unsigned int th_cnt; /* number of available threads */
|
||||
atomic_t th_cnt; /* number of available threads */
|
||||
};
|
||||
|
||||
|
||||
extern struct nfsd_stats nfsdstats;
|
||||
|
||||
extern struct svc_stat nfsd_svcstats;
|
||||
|
Loading…
Reference in New Issue
Block a user