]> err.no Git - linux-2.6/commitdiff
NFS: add comments clarifying the use of nfs_post_op_update()
authorChuck Lever <chuck.lever@oracle.com>
Wed, 20 Sep 2006 18:33:04 +0000 (14:33 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Sat, 23 Sep 2006 03:25:05 +0000 (23:25 -0400)
Comments-only change to clarify a detail of the NFS protocol and how it is
implemented in Linux.

Test plan:
None.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/inode.c
fs/nfs/write.c

index a56add0bc5b718575d3a010843aad8efc0002bb0..e8c143d182c4db83a8a352a05a0f58f777b947c8 100644 (file)
@@ -840,6 +840,12 @@ int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
  *
  * After an operation that has changed the inode metadata, mark the
  * attribute cache as being invalid, then try to update it.
+ *
+ * NB: if the server didn't return any post op attributes, this
+ * function will force the retrieval of attributes before the next
+ * NFS request.  Thus it should be used only for operations that
+ * are expected to change one or more attributes, to avoid
+ * unnecessary NFS requests and trips through nfs_update_inode().
  */
 int nfs_post_op_update_inode(struct inode *inode, struct nfs_fattr *fattr)
 {
index 38ba5c09af08f5309f57e7dcc6a5638075ccb1a8..c12effb46fe50df5ff959455de5fcb1f2c75533e 100644 (file)
@@ -1253,7 +1253,13 @@ int nfs_writeback_done(struct rpc_task *task, struct nfs_write_data *data)
        dprintk("NFS: %4d nfs_writeback_done (status %d)\n",
                task->tk_pid, task->tk_status);
 
-       /* Call the NFS version-specific code */
+       /*
+        * ->write_done will attempt to use post-op attributes to detect
+        * conflicting writes by other clients.  A strict interpretation
+        * of close-to-open would allow us to continue caching even if
+        * another writer had changed the file, but some applications
+        * depend on tighter cache coherency when writing.
+        */
        status = NFS_PROTO(data->inode)->write_done(task, data);
        if (status != 0)
                return status;