[linux-cifs-client] [PATCH 1/3] cifs: always revalidate hardlinked inodes

Jeff Layton jlayton at redhat.com
Mon May 17 10:36:44 MDT 2010


On Mon, 17 May 2010 10:34:03 -0500
Steve French <smfrench at gmail.com> wrote:

> Seems odd to turn off metadata caching completely for hardlinked
> files.  Wouldn't it be easier, and less invasive, to simply set
> cifs_i->time to zero on source and destination inodes when the client
> does the hardlink (so we revalidate the first time after the link is
> done, but otherwise treat hardlinked files the same, and continue to
> allow limited metadata caching on them)?
> 

I do agree that this makes little sense, but what you suggest won't
solve the problem. cifs_hardlink already does this:

        d_drop(direntry);       /* force new lookup from server of target */

...and:
                cifsInode = CIFS_I(old_file->d_inode);
		...
                /* if not oplocked will force revalidate to get info
                   on source file from srv */
                cifsInode->time = 0;

...the reason the test doesn't pass is that the link count doesn't drop
on the inode attached to one of the dentries when you unlink the other.

What probably makes the most sense is to refuse to allow hardlinking of
inodes when noserverino is set, but that might be considered a
regression since older kernels allowed it.

In short, it's a mess but this gets the behavior back to what it was
originally.

-- 
Jeff Layton <jlayton at redhat.com>


More information about the linux-cifs-client mailing list