[patch] cifs: fix revalidation test in cifs_llseek()

Dan Carpenter dan.carpenter at oracle.com
Thu Apr 19 15:06:19 MDT 2012

This test is always true so it means we revalidate the length every
time, which generates more network traffic.  This was introduced in
06222e491e "fs: handle SEEK_HOLE/SEEK_DATA properly in all fs's that
define their own llseek".

Signed-off-by: Dan Carpenter <dan.carpenter at oracle.com>
Josef, there were three other places that had this same problem but I
think they've all been fixed now.  Except that I had a question about
nfs_file_llseek().  Isn't that reversed?  It seems like it only
revalidates when it's not supposed to.  I chose to copy what
fuse_file_llseek() does instead.

diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
index d342128..97d26c7 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -695,7 +695,7 @@ static loff_t cifs_llseek(struct file *file, loff_t offset, int origin)
 	 * origin == SEEK_END || SEEK_DATA || SEEK_HOLE => we must revalidate
 	 * the cached file length
-	if (origin != SEEK_SET || origin != SEEK_CUR) {
+	if (origin == SEEK_SET || origin == SEEK_CUR) {
 		int rc;
 		struct inode *inode = file->f_path.dentry->d_inode;

More information about the samba-technical mailing list