[CIFS] CIFS readdir perf optimizations part 1

Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
Steve French 2006-02-28 03:45:48 +00:00
parent 4b8f930ff8
commit d47d7c1a85
3 changed files with 27 additions and 11 deletions

View File

@ -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

View File

@ -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;

View File

@ -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) {