The Samba-Bugzilla – Attachment 5746 Details for
Bug 7433
busy inodes after umount problem with CIFS
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
possible patch 1
0001-cifs-clean-up-arguments-to-cifs_open_inode_helper.patch (text/plain), 3.78 KB, created by
Jeff Layton
on 2010-05-28 08:57:28 UTC
(
hide
)
Description:
possible patch 1
Filename:
MIME Type:
Creator:
Jeff Layton
Created:
2010-05-28 08:57:28 UTC
Size:
3.78 KB
patch
obsolete
>From c77728f1b5c862e798815e80727ec18266005a0e Mon Sep 17 00:00:00 2001 >From: Jeff Layton <jlayton@redhat.com> >Date: Fri, 28 May 2010 09:53:43 -0400 >Subject: [PATCH] cifs: clean up arguments to cifs_open_inode_helper > >...which takes a ton of unneeded arguments and does a lot more pointer >dereferencing than is really needed. > >Also call that function before calling cifs_new_fileinfo. If it returns >an error, then the cifsFileInfo is currently leaked and I don't believe >the caller calls the ->release op in that case. > >Signed-off-by: Jeff Layton <jlayton@redhat.com> >--- > fs/cifs/file.c | 33 +++++++++++++++++---------------- > 1 files changed, 17 insertions(+), 16 deletions(-) > >diff --git a/fs/cifs/file.c b/fs/cifs/file.c >index 29ca398..e89ba54 100644 >--- a/fs/cifs/file.c >+++ b/fs/cifs/file.c >@@ -163,11 +163,11 @@ psx_client_can_cache: > } > > /* all arguments to this function must be checked for validity in caller */ >-static inline int cifs_open_inode_helper(struct inode *inode, struct file *file, >- struct cifsInodeInfo *pCifsInode, struct cifsFileInfo *pCifsFile, >+static inline int cifs_open_inode_helper(struct inode *inode, > struct cifsTconInfo *pTcon, int *oplock, FILE_ALL_INFO *buf, > char *full_path, int xid) > { >+ struct cifsInodeInfo *pCifsInode = CIFS_I(inode); > struct timespec temp; > int rc; > >@@ -181,36 +181,35 @@ static inline int cifs_open_inode_helper(struct inode *inode, struct file *file, > /* if not oplocked, invalidate inode pages if mtime or file > size changed */ > temp = cifs_NTtimeToUnix(buf->LastWriteTime); >- if (timespec_equal(&file->f_path.dentry->d_inode->i_mtime, &temp) && >- (file->f_path.dentry->d_inode->i_size == >+ if (timespec_equal(&inode->i_mtime, &temp) && >+ (inode->i_size == > (loff_t)le64_to_cpu(buf->EndOfFile))) { > cFYI(1, "inode unchanged on server"); > } else { >- if (file->f_path.dentry->d_inode->i_mapping) { >+ if (inode->i_mapping) { > /* BB no need to lock inode until after invalidate > since namei code should already have it locked? */ >- rc = filemap_write_and_wait(file->f_path.dentry->d_inode->i_mapping); >+ rc = filemap_write_and_wait(inode->i_mapping); > if (rc != 0) >- CIFS_I(file->f_path.dentry->d_inode)->write_behind_rc = rc; >+ pCifsInode->write_behind_rc = rc; > } > cFYI(1, "invalidating remote inode since open detected it " > "changed"); >- invalidate_remote_inode(file->f_path.dentry->d_inode); >+ invalidate_remote_inode(inode); > } > > client_can_cache: > if (pTcon->unix_ext) >- rc = cifs_get_inode_info_unix(&file->f_path.dentry->d_inode, >- full_path, inode->i_sb, xid); >+ rc = cifs_get_inode_info_unix(&inode, full_path, inode->i_sb, >+ xid); > else >- rc = cifs_get_inode_info(&file->f_path.dentry->d_inode, >- full_path, buf, inode->i_sb, xid, NULL); >+ rc = cifs_get_inode_info(&inode, full_path, buf, inode->i_sb, >+ xid, NULL); > > if ((*oplock & 0xF) == OPLOCK_EXCLUSIVE) { > pCifsInode->clientCanCacheAll = true; > pCifsInode->clientCanCacheRead = true; >- cFYI(1, "Exclusive Oplock granted on inode %p", >- file->f_path.dentry->d_inode); >+ cFYI(1, "Exclusive Oplock granted on inode %p", inode); > } else if ((*oplock & 0xF) == OPLOCK_READ) > pCifsInode->clientCanCacheRead = true; > >@@ -360,6 +359,10 @@ int cifs_open(struct inode *inode, struct file *file) > goto out; > } > >+ rc = cifs_open_inode_helper(inode, tcon, &oplock, buf, full_path, xid); >+ if (rc) >+ goto out; >+ > pCifsFile = cifs_new_fileinfo(inode, netfid, file, file->f_path.mnt, > file->f_flags); > if (pCifsFile == NULL) { >@@ -367,8 +370,6 @@ int cifs_open(struct inode *inode, struct file *file) > goto out; > } > >- rc = cifs_open_inode_helper(inode, file, pCifsInode, pCifsFile, tcon, >- &oplock, buf, full_path, xid); > > if (oplock & CIFS_CREATE_ACTION) { > /* time to set mode which we can not set earlier due to >-- >1.6.6.1 >
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 7433
: 5746