Commit fdbc75c7 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Greg Kroah-Hartman

nfsd: fix jiffies/time_t mixup in LRU list

commit 9594497f upstream.

The nfsd4_blocked_lock->nbl_time timestamp is recorded in jiffies,
but then compared to a CLOCK_REALTIME timestamp later on, which makes
no sense.

For consistency with the other timestamps, change this to use a time_t.

This is a change in behavior, which may cause regressions, but the
current code is not sensible. On a system with CONFIG_HZ=1000,
the 'time_after((unsigned long)nbl->nbl_time, (unsigned long)cutoff))'
check is false for roughly the first 18 days of uptime and then true
for the next 49 days.

Fixes: 7919d0a2 ("nfsd: add a LRU list for blocked locks")
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 70b43a9d
...@@ -6075,7 +6075,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, ...@@ -6075,7 +6075,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
} }
if (fl_flags & FL_SLEEP) { if (fl_flags & FL_SLEEP) {
nbl->nbl_time = jiffies; nbl->nbl_time = get_seconds();
spin_lock(&nn->blocked_locks_lock); spin_lock(&nn->blocked_locks_lock);
list_add_tail(&nbl->nbl_list, &lock_sop->lo_blocked); list_add_tail(&nbl->nbl_list, &lock_sop->lo_blocked);
list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru); list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru);
......
...@@ -592,7 +592,7 @@ static inline bool nfsd4_stateid_generation_after(stateid_t *a, stateid_t *b) ...@@ -592,7 +592,7 @@ static inline bool nfsd4_stateid_generation_after(stateid_t *a, stateid_t *b)
struct nfsd4_blocked_lock { struct nfsd4_blocked_lock {
struct list_head nbl_list; struct list_head nbl_list;
struct list_head nbl_lru; struct list_head nbl_lru;
unsigned long nbl_time; time_t nbl_time;
struct file_lock nbl_lock; struct file_lock nbl_lock;
struct knfsd_fh nbl_fh; struct knfsd_fh nbl_fh;
struct nfsd4_callback nbl_cb; struct nfsd4_callback nbl_cb;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment