Re: broken cifsFileInfo handling in cifs_reopen_file codepath

Jeff Layton <[email protected]>
Newsgroups gmane.linux.file-systems.cifs
Message-ID <[email protected]>
On Fri, 18 Sep 2009 13:06:33 -0400
Jeff Layton <[email protected]> wrote:

> I've found a pretty nasty set of bugs relating to how cifsFileInfo
> structs are handled when reopening a file. This patch added support for
> reopening a file after a reconnect using posix opens:
> 
> commit 7fc8f4e95bf9564045985bb206af8e28a5e4e28f
> Author: Steve French <[email protected]>
> Date:   Mon Feb 23 20:43:11 2009 +0000
> 
>     [CIFS] reopen file via newer posix open protocol operation if available
>     
>     If the network connection crashes, and we have to reopen files, preferentially
>     use the newer cifs posix open protocol operation if the server supports it.
>     
>     Signed-off-by: Steve French <[email protected]>
> 
> ...the problem here is that cifs_posix_open allocates a new
> cifsFileInfo struct on a successful open. That new struct is apparently
> ignored however. The private_data pointer for the VFS file struct is
> never updated to point to the new cifsFileInfo.
> 
> It seems like this will leak cifsFileInfo structs on reconnect at the
> very least. It may have other more harmful effects since you'll have
> dangling entries sitting on the "flist" for an inode.
> 
> I don't think it's sufficient to "put" the existing cifsFileInfo struct
> in favor of the new one since you may have other codepaths that have
> pointers and active references to the cifsFileInfo struct.
> 
> Steve, any chance you could fix this? I find this code a bit hard to
> follow and am not clear on how you intended it to work.
> 


It turns out that I'm mistaken here...cifs_reopen_file calls
cifs_posix_open with the inode pointer set to NULL. This short-circuits
the code that calls cifs_fill_fileinfo and prevents the leak I
described above.

I still wouldn't mind seeing this code consolidated some and have some
patches for that I'll send along after testing them a bit.

-- 
Jeff Layton <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.