cifs: add a timestamp to track when the lease of the cached dir was taken
authorRonnie Sahlberg <lsahlber@redhat.com>
Mon, 8 Mar 2021 23:07:33 +0000 (09:07 +1000)
committerSteve French <stfrench@microsoft.com>
Sun, 25 Apr 2021 21:28:23 +0000 (16:28 -0500)
and clear the timestamp when we receive a lease break.

Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/cifsglob.h
fs/cifs/smb2misc.c
fs/cifs/smb2ops.c

index 64a1095..b23a0ee 100644 (file)
@@ -988,6 +988,7 @@ struct cached_fid {
        bool is_valid:1;        /* Do we have a useable root fid */
        bool file_all_info_is_valid:1;
        bool has_lease:1;
+       unsigned long time; /* jiffies of when lease was taken */
        struct kref refcount;
        struct cifs_fid *fid;
        struct mutex fid_mutex;
index aac384f..06d555d 100644 (file)
@@ -667,6 +667,7 @@ smb2_is_valid_lease_break(char *buffer)
                                    !memcmp(rsp->LeaseKey,
                                            tcon->crfid.fid->lease_key,
                                            SMB2_LEASE_KEY_SIZE)) {
+                                       tcon->crfid.time = 0;
                                        INIT_WORK(&tcon->crfid.lease_break,
                                                  smb2_cached_lease_break);
                                        queue_work(cifsiod_wq,
index 65d3034..49cdc6e 100644 (file)
@@ -912,6 +912,8 @@ int open_cached_dir(unsigned int xid, struct cifs_tcon *tcon,
                                &rsp_iov[1], sizeof(struct smb2_file_all_info),
                                (char *)&tcon->crfid.file_all_info))
                tcon->crfid.file_all_info_is_valid = true;
+       tcon->crfid.time = jiffies;
+
 
 oshr_exit:
        mutex_unlock(&tcon->crfid.fid_mutex);