mirror of https://gitee.com/openkylin/linux.git
[CIFS] CIFS readdir perf optimizations part 1
Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
4b8f930ff8
commit
d47d7c1a85
|
@ -3026,6 +3026,7 @@ CIFSFindFirst(const int xid, struct cifsTconInfo *tcon,
|
|||
psrch_inf->unicode = FALSE;
|
||||
|
||||
psrch_inf->ntwrk_buf_start = (char *)pSMBr;
|
||||
psrch_inf->smallBuf = 0;
|
||||
psrch_inf->srch_entries_start =
|
||||
(char *) &pSMBr->hdr.Protocol +
|
||||
le16_to_cpu(pSMBr->t2.DataOffset);
|
||||
|
@ -3146,9 +3147,14 @@ int CIFSFindNext(const int xid, struct cifsTconInfo *tcon,
|
|||
parms = (T2_FNEXT_RSP_PARMS *)response_data;
|
||||
response_data = (char *)&pSMBr->hdr.Protocol +
|
||||
le16_to_cpu(pSMBr->t2.DataOffset);
|
||||
if(psrch_inf->smallBuf)
|
||||
cifs_small_buf_release(
|
||||
psrch_inf->ntwrk_buf_start);
|
||||
else
|
||||
cifs_buf_release(psrch_inf->ntwrk_buf_start);
|
||||
psrch_inf->srch_entries_start = response_data;
|
||||
psrch_inf->ntwrk_buf_start = (char *)pSMB;
|
||||
psrch_inf->smallBuf = 0;
|
||||
if(parms->EndofSearch)
|
||||
psrch_inf->endOfSearch = TRUE;
|
||||
else
|
||||
|
|
|
@ -555,6 +555,9 @@ int cifs_closedir(struct inode *inode, struct file *file)
|
|||
if (ptmp) {
|
||||
cFYI(1, ("closedir free smb buf in srch struct"));
|
||||
pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
|
||||
if(pCFileStruct->srch_inf.smallBuf)
|
||||
cifs_small_buf_release(ptmp);
|
||||
else
|
||||
cifs_buf_release(ptmp);
|
||||
}
|
||||
ptmp = pCFileStruct->search_resume_name;
|
||||
|
@ -592,11 +595,11 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
|
|||
pfLock->fl_end));
|
||||
|
||||
if (pfLock->fl_flags & FL_POSIX)
|
||||
cFYI(1, ("Posix "));
|
||||
cFYI(1, ("Posix"));
|
||||
if (pfLock->fl_flags & FL_FLOCK)
|
||||
cFYI(1, ("Flock "));
|
||||
cFYI(1, ("Flock"));
|
||||
if (pfLock->fl_flags & FL_SLEEP) {
|
||||
cFYI(1, ("Blocking lock "));
|
||||
cFYI(1, ("Blocking lock"));
|
||||
wait_flag = TRUE;
|
||||
}
|
||||
if (pfLock->fl_flags & FL_ACCESS)
|
||||
|
@ -612,21 +615,23 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
|
|||
cFYI(1, ("F_WRLCK "));
|
||||
numLock = 1;
|
||||
} else if (pfLock->fl_type == F_UNLCK) {
|
||||
cFYI(1, ("F_UNLCK "));
|
||||
cFYI(1, ("F_UNLCK"));
|
||||
numUnlock = 1;
|
||||
/* Check if unlock includes more than
|
||||
one lock range */
|
||||
} else if (pfLock->fl_type == F_RDLCK) {
|
||||
cFYI(1, ("F_RDLCK "));
|
||||
cFYI(1, ("F_RDLCK"));
|
||||
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
||||
numLock = 1;
|
||||
} else if (pfLock->fl_type == F_EXLCK) {
|
||||
cFYI(1, ("F_EXLCK "));
|
||||
cFYI(1, ("F_EXLCK"));
|
||||
numLock = 1;
|
||||
} else if (pfLock->fl_type == F_SHLCK) {
|
||||
cFYI(1, ("F_SHLCK "));
|
||||
cFYI(1, ("F_SHLCK"));
|
||||
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
||||
numLock = 1;
|
||||
} else
|
||||
cFYI(1, ("Unknown type of lock "));
|
||||
cFYI(1, ("Unknown type of lock"));
|
||||
|
||||
cifs_sb = CIFS_SB(file->f_dentry->d_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
|
|
@ -604,7 +604,12 @@ static int find_cifs_entry(const int xid, struct cifsTconInfo *pTcon,
|
|||
cifsFile->search_resume_name = NULL;
|
||||
if(cifsFile->srch_inf.ntwrk_buf_start) {
|
||||
cFYI(1,("freeing SMB ff cache buf on search rewind"));
|
||||
cifs_buf_release(cifsFile->srch_inf.ntwrk_buf_start);
|
||||
if(cifsFile->srch_inf.smallBuf)
|
||||
cifs_small_buf_release(cifsFile->srch_inf.
|
||||
ntwrk_buf_start);
|
||||
else
|
||||
cifs_buf_release(cifsFile->srch_inf.
|
||||
ntwrk_buf_start);
|
||||
}
|
||||
rc = initiate_cifs_search(xid,file);
|
||||
if(rc) {
|
||||
|
|
Loading…
Reference in New Issue