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->unicode = FALSE;
|
||||||
|
|
||||||
psrch_inf->ntwrk_buf_start = (char *)pSMBr;
|
psrch_inf->ntwrk_buf_start = (char *)pSMBr;
|
||||||
|
psrch_inf->smallBuf = 0;
|
||||||
psrch_inf->srch_entries_start =
|
psrch_inf->srch_entries_start =
|
||||||
(char *) &pSMBr->hdr.Protocol +
|
(char *) &pSMBr->hdr.Protocol +
|
||||||
le16_to_cpu(pSMBr->t2.DataOffset);
|
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;
|
parms = (T2_FNEXT_RSP_PARMS *)response_data;
|
||||||
response_data = (char *)&pSMBr->hdr.Protocol +
|
response_data = (char *)&pSMBr->hdr.Protocol +
|
||||||
le16_to_cpu(pSMBr->t2.DataOffset);
|
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);
|
cifs_buf_release(psrch_inf->ntwrk_buf_start);
|
||||||
psrch_inf->srch_entries_start = response_data;
|
psrch_inf->srch_entries_start = response_data;
|
||||||
psrch_inf->ntwrk_buf_start = (char *)pSMB;
|
psrch_inf->ntwrk_buf_start = (char *)pSMB;
|
||||||
|
psrch_inf->smallBuf = 0;
|
||||||
if(parms->EndofSearch)
|
if(parms->EndofSearch)
|
||||||
psrch_inf->endOfSearch = TRUE;
|
psrch_inf->endOfSearch = TRUE;
|
||||||
else
|
else
|
||||||
|
|
|
@ -555,6 +555,9 @@ int cifs_closedir(struct inode *inode, struct file *file)
|
||||||
if (ptmp) {
|
if (ptmp) {
|
||||||
cFYI(1, ("closedir free smb buf in srch struct"));
|
cFYI(1, ("closedir free smb buf in srch struct"));
|
||||||
pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
|
pCFileStruct->srch_inf.ntwrk_buf_start = NULL;
|
||||||
|
if(pCFileStruct->srch_inf.smallBuf)
|
||||||
|
cifs_small_buf_release(ptmp);
|
||||||
|
else
|
||||||
cifs_buf_release(ptmp);
|
cifs_buf_release(ptmp);
|
||||||
}
|
}
|
||||||
ptmp = pCFileStruct->search_resume_name;
|
ptmp = pCFileStruct->search_resume_name;
|
||||||
|
@ -592,11 +595,11 @@ int cifs_lock(struct file *file, int cmd, struct file_lock *pfLock)
|
||||||
pfLock->fl_end));
|
pfLock->fl_end));
|
||||||
|
|
||||||
if (pfLock->fl_flags & FL_POSIX)
|
if (pfLock->fl_flags & FL_POSIX)
|
||||||
cFYI(1, ("Posix "));
|
cFYI(1, ("Posix"));
|
||||||
if (pfLock->fl_flags & FL_FLOCK)
|
if (pfLock->fl_flags & FL_FLOCK)
|
||||||
cFYI(1, ("Flock "));
|
cFYI(1, ("Flock"));
|
||||||
if (pfLock->fl_flags & FL_SLEEP) {
|
if (pfLock->fl_flags & FL_SLEEP) {
|
||||||
cFYI(1, ("Blocking lock "));
|
cFYI(1, ("Blocking lock"));
|
||||||
wait_flag = TRUE;
|
wait_flag = TRUE;
|
||||||
}
|
}
|
||||||
if (pfLock->fl_flags & FL_ACCESS)
|
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 "));
|
cFYI(1, ("F_WRLCK "));
|
||||||
numLock = 1;
|
numLock = 1;
|
||||||
} else if (pfLock->fl_type == F_UNLCK) {
|
} else if (pfLock->fl_type == F_UNLCK) {
|
||||||
cFYI(1, ("F_UNLCK "));
|
cFYI(1, ("F_UNLCK"));
|
||||||
numUnlock = 1;
|
numUnlock = 1;
|
||||||
|
/* Check if unlock includes more than
|
||||||
|
one lock range */
|
||||||
} else if (pfLock->fl_type == F_RDLCK) {
|
} else if (pfLock->fl_type == F_RDLCK) {
|
||||||
cFYI(1, ("F_RDLCK "));
|
cFYI(1, ("F_RDLCK"));
|
||||||
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
||||||
numLock = 1;
|
numLock = 1;
|
||||||
} else if (pfLock->fl_type == F_EXLCK) {
|
} else if (pfLock->fl_type == F_EXLCK) {
|
||||||
cFYI(1, ("F_EXLCK "));
|
cFYI(1, ("F_EXLCK"));
|
||||||
numLock = 1;
|
numLock = 1;
|
||||||
} else if (pfLock->fl_type == F_SHLCK) {
|
} else if (pfLock->fl_type == F_SHLCK) {
|
||||||
cFYI(1, ("F_SHLCK "));
|
cFYI(1, ("F_SHLCK"));
|
||||||
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
lockType |= LOCKING_ANDX_SHARED_LOCK;
|
||||||
numLock = 1;
|
numLock = 1;
|
||||||
} else
|
} else
|
||||||
cFYI(1, ("Unknown type of lock "));
|
cFYI(1, ("Unknown type of lock"));
|
||||||
|
|
||||||
cifs_sb = CIFS_SB(file->f_dentry->d_sb);
|
cifs_sb = CIFS_SB(file->f_dentry->d_sb);
|
||||||
pTcon = cifs_sb->tcon;
|
pTcon = cifs_sb->tcon;
|
||||||
|
|
|
@ -604,7 +604,12 @@ static int find_cifs_entry(const int xid, struct cifsTconInfo *pTcon,
|
||||||
cifsFile->search_resume_name = NULL;
|
cifsFile->search_resume_name = NULL;
|
||||||
if(cifsFile->srch_inf.ntwrk_buf_start) {
|
if(cifsFile->srch_inf.ntwrk_buf_start) {
|
||||||
cFYI(1,("freeing SMB ff cache buf on search rewind"));
|
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);
|
rc = initiate_cifs_search(xid,file);
|
||||||
if(rc) {
|
if(rc) {
|
||||||
|
|
Loading…
Reference in New Issue