Skip to content

Commit dc52877

Browse files
bharathsm-mssmfrench
authored andcommitted
cifs: defer close file handles having RH lease
Previously we only deferred closing file handles with RHW lease. To enhance performance benefits from deferred closes, we now include handles with RH leases as well. Signed-off-by: Bharath SM <bharathsm@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
1 parent 279d44c commit dc52877

1 file changed

Lines changed: 15 additions & 4 deletions

File tree

fs/smb/client/file.c

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,6 +1073,19 @@ void smb2_deferred_work_close(struct work_struct *work)
10731073
_cifsFileInfo_put(cfile, true, false);
10741074
}
10751075

1076+
static bool
1077+
smb2_can_defer_close(struct inode *inode, struct cifs_deferred_close *dclose)
1078+
{
1079+
struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
1080+
struct cifsInodeInfo *cinode = CIFS_I(inode);
1081+
1082+
return (cifs_sb->ctx->closetimeo && cinode->lease_granted && dclose &&
1083+
(cinode->oplock == CIFS_CACHE_RHW_FLG ||
1084+
cinode->oplock == CIFS_CACHE_RH_FLG) &&
1085+
!test_bit(CIFS_INO_CLOSE_ON_LOCK, &cinode->flags));
1086+
1087+
}
1088+
10761089
int cifs_close(struct inode *inode, struct file *file)
10771090
{
10781091
struct cifsFileInfo *cfile;
@@ -1086,10 +1099,8 @@ int cifs_close(struct inode *inode, struct file *file)
10861099
cfile = file->private_data;
10871100
file->private_data = NULL;
10881101
dclose = kmalloc(sizeof(struct cifs_deferred_close), GFP_KERNEL);
1089-
if ((cifs_sb->ctx->closetimeo && cinode->oplock == CIFS_CACHE_RHW_FLG)
1090-
&& cinode->lease_granted &&
1091-
!test_bit(CIFS_INO_CLOSE_ON_LOCK, &cinode->flags) &&
1092-
dclose && !(cfile->status_file_deleted)) {
1102+
if ((cfile->status_file_deleted == false) &&
1103+
(smb2_can_defer_close(inode, dclose))) {
10931104
if (test_and_clear_bit(CIFS_INO_MODIFIED_ATTR, &cinode->flags)) {
10941105
inode_set_mtime_to_ts(inode,
10951106
inode_set_ctime_current(inode));

0 commit comments

Comments
 (0)