mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-28 15:20:41 +00:00
nfsd: fix jiffies/time_t mixup in LRU list
commit9594497f2c
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:7919d0a27f
("nfsd: add a LRU list for blocked locks") Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: J. Bruce Fields <bfields@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7558ea7f5e
commit
a0f808e559
2 changed files with 2 additions and 2 deletions
|
@ -6040,7 +6040,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
|
|||
}
|
||||
|
||||
if (fl_flags & FL_SLEEP) {
|
||||
nbl->nbl_time = jiffies;
|
||||
nbl->nbl_time = get_seconds();
|
||||
spin_lock(&nn->blocked_locks_lock);
|
||||
list_add_tail(&nbl->nbl_list, &lock_sop->lo_blocked);
|
||||
list_add_tail(&nbl->nbl_lru, &nn->blocked_locks_lru);
|
||||
|
|
|
@ -591,7 +591,7 @@ static inline bool nfsd4_stateid_generation_after(stateid_t *a, stateid_t *b)
|
|||
struct nfsd4_blocked_lock {
|
||||
struct list_head nbl_list;
|
||||
struct list_head nbl_lru;
|
||||
unsigned long nbl_time;
|
||||
time_t nbl_time;
|
||||
struct file_lock nbl_lock;
|
||||
struct knfsd_fh nbl_fh;
|
||||
struct nfsd4_callback nbl_cb;
|
||||
|
|
Loading…
Reference in a new issue