diff mbox

[linux-cifs-client] fix a regression in cifs caused during lookup intent code patch

Message ID 4a4634330905011316o65609395pb05c5676d66783f3@mail.gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Shirish Pargaonkar May 1, 2009, 8:16 p.m. UTC
Remove adding open file entry twice to lists in case of posix opens

Do not fill file info twice in case of posix opens and creates

This fixes the regression in cifs which resulted in failure to pass
connectathon tests.

        if (pCifsInode == NULL) {
@@ -145,17 +142,6 @@ static inline int
cifs_posix_open_inode_helper(struct inode *inode,
                return -EINVAL;
        }

-       /* want handles we can use to read with first
-          in the list so we do not have to walk the
-          list to search for one in write_begin */
-       if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
-               list_add_tail(&pCifsFile->flist,
-                             &pCifsInode->openFileList);
-       } else {
-               list_add(&pCifsFile->flist,
-                        &pCifsInode->openFileList);
-       }
-
        if (pCifsInode->clientCanCacheRead) {
                /* we have the inode open somewhere else
                   no need to discard cache data */
~
~

Comments

Shirish Pargaonkar May 1, 2009, 9:21 p.m. UTC | #1
On Fri, May 1, 2009 at 3:16 PM, Shirish Pargaonkar
<shirishpargaonkar@gmail.com> wrote:
> Remove adding open file entry twice to lists in case of posix opens
>
> Do not fill file info twice in case of posix opens and creates
>
> This fixes the regression in cifs which resulted in failure to pass
> connectathon tests.
>
> diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
> index 461750e..97f68bd 100644
> --- a/fs/cifs/dir.c
> +++ b/fs/cifs/dir.c
> @@ -464,10 +464,8 @@ cifs_create_set_dentry:
>        if ((nd == NULL) || (!(nd->flags & LOOKUP_OPEN))) {
>                /* mknod case - do not leave file open */
>                CIFSSMBClose(xid, tcon, fileHandle);
> -       } else if (newinode) {
> -                       cifs_fill_fileinfo(newinode, fileHandle,
> -                                       cifs_sb->tcon, write_only);
>        }
> +
>  cifs_create_out:
>        kfree(buf);
>        kfree(full_path);
> diff --git a/fs/cifs/file.c b/fs/cifs/file.c
> index 50ca088..38c06f8 100644
> --- a/fs/cifs/file.c
> +++ b/fs/cifs/file.c
> @@ -129,15 +129,12 @@ static inline int
> cifs_posix_open_inode_helper(struct inode *inode,
>                        struct file *file, struct cifsInodeInfo *pCifsInode,
>                        struct cifsFileInfo *pCifsFile, int oplock, u16 netfid)
>  {
> -       struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
> -/*     struct timespec temp; */   /* BB REMOVEME BB */
>
>        file->private_data = kmalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
>        if (file->private_data == NULL)
>                return -ENOMEM;
>        pCifsFile = cifs_init_private(file->private_data, inode, file, netfid);
>        write_lock(&GlobalSMBSeslock);
> -       list_add(&pCifsFile->tlist, &cifs_sb->tcon->openFileList);
>
>        pCifsInode = CIFS_I(file->f_path.dentry->d_inode);
>        if (pCifsInode == NULL) {
> @@ -145,17 +142,6 @@ static inline int
> cifs_posix_open_inode_helper(struct inode *inode,
>                return -EINVAL;
>        }
>
> -       /* want handles we can use to read with first
> -          in the list so we do not have to walk the
> -          list to search for one in write_begin */
> -       if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
> -               list_add_tail(&pCifsFile->flist,
> -                             &pCifsInode->openFileList);
> -       } else {
> -               list_add(&pCifsFile->flist,
> -                        &pCifsInode->openFileList);
> -       }
> -
>        if (pCifsInode->clientCanCacheRead) {
>                /* we have the inode open somewhere else
>                   no need to discard cache data */
> ~
> ~
>

This patch can be ignored, spoke too soon, before testing against old
samba server.
Will post a patch which calls cifs_fill_fileinfo from cifs_create only
in non-posix cases.
diff mbox

Patch

diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
index 461750e..97f68bd 100644
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -464,10 +464,8 @@  cifs_create_set_dentry:
        if ((nd == NULL) || (!(nd->flags & LOOKUP_OPEN))) {
                /* mknod case - do not leave file open */
                CIFSSMBClose(xid, tcon, fileHandle);
-       } else if (newinode) {
-                       cifs_fill_fileinfo(newinode, fileHandle,
-                                       cifs_sb->tcon, write_only);
        }
+
 cifs_create_out:
        kfree(buf);
        kfree(full_path);
diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 50ca088..38c06f8 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -129,15 +129,12 @@  static inline int
cifs_posix_open_inode_helper(struct inode *inode,
                        struct file *file, struct cifsInodeInfo *pCifsInode,
                        struct cifsFileInfo *pCifsFile, int oplock, u16 netfid)
 {
-       struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
-/*     struct timespec temp; */   /* BB REMOVEME BB */

        file->private_data = kmalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
        if (file->private_data == NULL)
                return -ENOMEM;
        pCifsFile = cifs_init_private(file->private_data, inode, file, netfid);
        write_lock(&GlobalSMBSeslock);
-       list_add(&pCifsFile->tlist, &cifs_sb->tcon->openFileList);

        pCifsInode = CIFS_I(file->f_path.dentry->d_inode);