The Samba-Bugzilla – Attachment 1593 Details for
Bug 3206
caching problem accessing non-existing -> existing files ?
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
a slightly better form of the previous patch
negative-dentry-fix-ver2.patch (text/plain), 2.89 KB, created by
Steve French
on 2005-11-25 10:26:06 UTC
(
hide
)
Description:
a slightly better form of the previous patch
Filename:
MIME Type:
Creator:
Steve French
Created:
2005-11-25 10:26:06 UTC
Size:
2.89 KB
patch
obsolete
>diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c >index 16b2152..aa4ea96 100644 >--- a/fs/cifs/dir.c >+++ b/fs/cifs/dir.c >@@ -465,12 +465,20 @@ cifs_lookup(struct inode *parent_dir_ino > direntry->d_op = &cifs_dentry_ops; > d_add(direntry, newInode); > >- /* since paths are not looked up by component - the parent directories are presumed to be good here */ >+ /* since paths are not looked up by component - the parent >+ directories are presumed to be good here */ > renew_parental_timestamps(direntry); > > } else if (rc == -ENOENT) { > rc = 0; >+ direntry->d_time = jiffies; >+ if (pTcon->nocase) >+ direntry->d_op = &cifs_ci_dentry_ops; >+ else >+ direntry->d_op = &cifs_dentry_ops; > d_add(direntry, NULL); >+ /* if it was once a directory (but how can we tell?) we could do >+ shrink_dcache_parent(direntry); */ > } else { > cERROR(1,("Error 0x%x on cifs_get_inode_info in lookup of %s", > rc,full_path)); >@@ -489,21 +497,20 @@ cifs_d_revalidate(struct dentry *direntr > { > int isValid = 1; > >-/* lock_kernel(); *//* surely we do not want to lock the kernel for a whole network round trip which could take seconds */ >- > if (direntry->d_inode) { > if (cifs_revalidate(direntry)) { >- /* unlock_kernel(); */ > return 0; > } > } else { >- cFYI(1, >- ("In cifs_d_revalidate with no inode but name = %s and dentry 0x%p", >- direntry->d_name.name, direntry)); >+ cFYI(1, ("neg dentry 0x%p name = %s", >+ direntry, direntry->d_name.name)); >+ if(time_after(jiffies, direntry->d_time + HZ) || >+ !lookupCacheEnabled) { >+ d_drop(direntry); >+ isValid = 0; >+ } > } > >-/* unlock_kernel(); */ >- > return isValid; > } > >diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c >index 05b5258..d34325c 100644 >--- a/fs/cifs/inode.c >+++ b/fs/cifs/inode.c >@@ -1039,14 +1039,20 @@ int cifs_revalidate(struct dentry *diren > filemap_fdatawrite(direntry->d_inode->i_mapping); > } > if (invalidate_inode) { >- if (direntry->d_inode->i_mapping) >- filemap_fdatawait(direntry->d_inode->i_mapping); >- /* may eventually have to do this for open files too */ >- if (list_empty(&(cifsInode->openFileList))) { >- /* Has changed on server - flush read ahead pages */ >- cFYI(1, ("Invalidating read ahead data on " >- "closed file")); >- invalidate_remote_inode(direntry->d_inode); >+ /* shrink_dcache not necessary now that cifs dentry ops >+ are exported for negative dentries */ >+/* if(S_ISDIR(direntry->d_inode->i_mode)) >+ shrink_dcache_parent(direntry); */ >+ if (S_ISREG(direntry->d_inode->i_mode)) { >+ if (direntry->d_inode->i_mapping) >+ filemap_fdatawait(direntry->d_inode->i_mapping); >+ /* may eventually have to do this for open files too */ >+ if (list_empty(&(cifsInode->openFileList))) { >+ /* changed on server - flush read ahead pages */ >+ cFYI(1, ("Invalidating read ahead data on " >+ "closed file")); >+ invalidate_remote_inode(direntry->d_inode); >+ } > } > } > /* up(&direntry->d_inode->i_sem); */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 3206
:
1591
|
1592
| 1593