NFS client llseek

From: Trond Myklebust (trond.myklebust@fys.uio.no)
Date: Fri Dec 14 2001 - 07:51:36 EST


>>>>> " " == dzafman <dzafman@kahuna.cag.cpqcorp.net> writes:

> linux-2.4.16/fs/nfs/file.c
> --- linux-2.4.16.orig/fs/nfs/file.c Sun Sep 23 09:48:01 2001
> +++ linux-2.4.16/fs/nfs/file.c Thu Dec 13 15:35:05 2001
> @@ -39,9 +39,10 @@
> static ssize_t nfs_file_write(struct file *, const char *,
> size_t, loff_t *); static int nfs_file_flush(struct file *);
> static int nfs_fsync(struct file *, struct dentry *dentry, int
> datasync);
> +static loff_t nfs_file_llseek(struct file *, loff_t, int
> origin);
 
> struct file_operations nfs_file_operations = {
> - llseek: generic_file_llseek,
> + llseek: nfs_file_llseek,
> read: nfs_file_read, write: nfs_file_write, mmap:
> nfs_file_mmap,
> @@ -142,6 +143,24 @@
> } unlock_kernel(); return status;
> +} + +static loff_t +nfs_file_llseek(struct file *file, loff_t
> offset, int origin) +{
> + struct dentry * dentry = file->f_dentry;
> + struct inode * inode = dentry->d_inode;
> + loff_t result;
> +
> + /*
> + * Make sure inode fields are up-to-date, since
> generic_file_llseek()
> + * might look at anything in the inode. Currently, i_size may
> be
> + * used.
> + */
> + result = nfs_revalidate_inode(NFS_SERVER(inode), inode);
> + if (!result)
> + result = generic_file_llseek(file, offset, origin);
> + return result;
> }
 
Just one comment: Isn't it easier to do this in generic_file_llseek()
itself using inode->i_op->revalidate()? That would make it work for
coda and smbfs too...

Cheers,
   Trond
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Dec 15 2001 - 21:00:28 EST