[patch][linux-cifs-client] fix a regression in cifs caused during
lookup intent code patch
Shirish Pargaonkar
shirishpargaonkar at gmail.com
Fri May 1 21:21:16 GMT 2009
On Fri, May 1, 2009 at 3:16 PM, Shirish Pargaonkar
<shirishpargaonkar at 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.
More information about the linux-cifs-client
mailing list