LINUX: move afs_notify_change to osi_vnodeops.c
authorAndrew Deason <adeason@sinenomine.net>
Wed, 22 Feb 2012 21:36:37 +0000 (15:36 -0600)
committerDerrick Brashear <shadow@dementix.org>
Thu, 23 Feb 2012 18:01:19 +0000 (10:01 -0800)
afs_notify_change is almost always used solely in inode_operations
structs, and is more similar to the other per-vnode functions. Put it
with the other per-vnode functions for better organization, and so
they can use the same static functions.

Move the helper functions iattr2vattr and vattr2inode along with it.

Change-Id: I47a69fe673cfc3318ce583596ba25cbeb9cb0b96
Reviewed-on: http://gerrit.openafs.org/6775
Reviewed-by: Derrick Brashear <shadow@dementix.org>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/afs/LINUX/osi_vfsops.c
src/afs/LINUX/osi_vnodeops.c
src/afs/LINUX24/osi_vfsops.c
src/afs/LINUX24/osi_vnodeops.c

index 2fbb349..4c44988 100644 (file)
@@ -39,7 +39,6 @@ extern struct afs_q VLRU;
 extern struct dentry_operations afs_dentry_operations;
 
 /* Forward declarations */
-static void iattr2vattr(struct vattr *vattrp, struct iattr *iattrp);
 static int afs_root(struct super_block *afsp);
 int afs_fill_super(struct super_block *sb, void *data, int silent);
 
@@ -202,33 +201,6 @@ afs_root(struct super_block *afsp)
 
 /* super_operations */
 
-/* afs_notify_change
- * Linux version of setattr call. What to change is in the iattr struct.
- * We need to set bits in both the Linux inode as well as the vcache.
- */
-int
-afs_notify_change(struct dentry *dp, struct iattr *iattrp)
-{
-    struct vattr vattr;
-    cred_t *credp = crref();
-    struct inode *ip = dp->d_inode;
-    int code;
-
-    VATTR_NULL(&vattr);
-    iattr2vattr(&vattr, iattrp);       /* Convert for AFS vnodeops call. */
-
-    AFS_GLOCK();
-    code = afs_setattr(VTOAFS(ip), &vattr, credp);
-    if (!code) {
-       afs_getattr(VTOAFS(ip), &vattr, credp);
-       vattr2inode(ip, &vattr);
-    }
-    AFS_GUNLOCK();
-    crfree(credp);
-    return -code;
-}
-
-
 #if defined(STRUCT_SUPER_OPERATIONS_HAS_ALLOC_INODE)
 static afs_kmem_cache_t *afs_inode_cachep;
 
@@ -400,70 +372,3 @@ struct super_operations afs_sops = {
   .put_super =         afs_put_super,
   .statfs =            afs_statfs,
 };
-
-/************** Support routines ************************/
-
-/* vattr_setattr
- * Set iattr data into vattr. Assume vattr cleared before call.
- */
-static void
-iattr2vattr(struct vattr *vattrp, struct iattr *iattrp)
-{
-    vattrp->va_mask = iattrp->ia_valid;
-    if (iattrp->ia_valid & ATTR_MODE)
-       vattrp->va_mode = iattrp->ia_mode;
-    if (iattrp->ia_valid & ATTR_UID)
-       vattrp->va_uid = iattrp->ia_uid;
-    if (iattrp->ia_valid & ATTR_GID)
-       vattrp->va_gid = iattrp->ia_gid;
-    if (iattrp->ia_valid & ATTR_SIZE)
-       vattrp->va_size = iattrp->ia_size;
-    if (iattrp->ia_valid & ATTR_ATIME) {
-       vattrp->va_atime.tv_sec = iattrp->ia_atime.tv_sec;
-       vattrp->va_atime.tv_usec = 0;
-    }
-    if (iattrp->ia_valid & ATTR_MTIME) {
-       vattrp->va_mtime.tv_sec = iattrp->ia_mtime.tv_sec;
-       vattrp->va_mtime.tv_usec = 0;
-    }
-    if (iattrp->ia_valid & ATTR_CTIME) {
-       vattrp->va_ctime.tv_sec = iattrp->ia_ctime.tv_sec;
-       vattrp->va_ctime.tv_usec = 0;
-    }
-}
-
-/* vattr2inode
- * Rewrite the inode cache from the attr. Assumes all vattr fields are valid.
- */
-void
-vattr2inode(struct inode *ip, struct vattr *vp)
-{
-    ip->i_ino = vp->va_nodeid;
-#ifdef HAVE_LINUX_SET_NLINK
-    set_nlink(ip, vp->va_nlink);
-#else
-    ip->i_nlink = vp->va_nlink;
-#endif
-    ip->i_blocks = vp->va_blocks;
-#ifdef STRUCT_INODE_HAS_I_BLKBITS
-    ip->i_blkbits = AFS_BLKBITS;
-#endif
-#ifdef STRUCT_INODE_HAS_I_BLKSIZE
-    ip->i_blksize = vp->va_blocksize;
-#endif
-    ip->i_rdev = vp->va_rdev;
-    ip->i_mode = vp->va_mode;
-    ip->i_uid = vp->va_uid;
-    ip->i_gid = vp->va_gid;
-    i_size_write(ip, vp->va_size);
-    ip->i_atime.tv_sec = vp->va_atime.tv_sec;
-    ip->i_atime.tv_nsec = 0;
-    ip->i_mtime.tv_sec = vp->va_mtime.tv_sec;
-    /* Set the mtime nanoseconds to the sysname generation number.
-     * This convinces NFS clients that all directories have changed
-     * any time the sysname list changes.
-     */
-    ip->i_mtime.tv_nsec = afs_sysnamegen;
-    ip->i_ctime.tv_sec = vp->va_ctime.tv_sec;
-    ip->i_ctime.tv_nsec = 0;
-}
index ae17006..1754a5c 100644 (file)
@@ -49,7 +49,6 @@
 extern struct backing_dev_info *afs_backing_dev_info;
 
 extern struct vcache *afs_globalVp;
-extern int afs_notify_change(struct dentry *dp, struct iattr *iattrp);
 
 /* This function converts a positive error code from AFS into a negative
  * code suitable for passing into the Linux VFS layer. It checks that the
@@ -873,6 +872,97 @@ afs_linux_revalidate(struct dentry *dp)
     return afs_convert_code(code);
 }
 
+/* vattr_setattr
+ * Set iattr data into vattr. Assume vattr cleared before call.
+ */
+static void
+iattr2vattr(struct vattr *vattrp, struct iattr *iattrp)
+{
+    vattrp->va_mask = iattrp->ia_valid;
+    if (iattrp->ia_valid & ATTR_MODE)
+       vattrp->va_mode = iattrp->ia_mode;
+    if (iattrp->ia_valid & ATTR_UID)
+       vattrp->va_uid = iattrp->ia_uid;
+    if (iattrp->ia_valid & ATTR_GID)
+       vattrp->va_gid = iattrp->ia_gid;
+    if (iattrp->ia_valid & ATTR_SIZE)
+       vattrp->va_size = iattrp->ia_size;
+    if (iattrp->ia_valid & ATTR_ATIME) {
+       vattrp->va_atime.tv_sec = iattrp->ia_atime.tv_sec;
+       vattrp->va_atime.tv_usec = 0;
+    }
+    if (iattrp->ia_valid & ATTR_MTIME) {
+       vattrp->va_mtime.tv_sec = iattrp->ia_mtime.tv_sec;
+       vattrp->va_mtime.tv_usec = 0;
+    }
+    if (iattrp->ia_valid & ATTR_CTIME) {
+       vattrp->va_ctime.tv_sec = iattrp->ia_ctime.tv_sec;
+       vattrp->va_ctime.tv_usec = 0;
+    }
+}
+
+/* vattr2inode
+ * Rewrite the inode cache from the attr. Assumes all vattr fields are valid.
+ */
+void
+vattr2inode(struct inode *ip, struct vattr *vp)
+{
+    ip->i_ino = vp->va_nodeid;
+#ifdef HAVE_LINUX_SET_NLINK
+    set_nlink(ip, vp->va_nlink);
+#else
+    ip->i_nlink = vp->va_nlink;
+#endif
+    ip->i_blocks = vp->va_blocks;
+#ifdef STRUCT_INODE_HAS_I_BLKBITS
+    ip->i_blkbits = AFS_BLKBITS;
+#endif
+#ifdef STRUCT_INODE_HAS_I_BLKSIZE
+    ip->i_blksize = vp->va_blocksize;
+#endif
+    ip->i_rdev = vp->va_rdev;
+    ip->i_mode = vp->va_mode;
+    ip->i_uid = vp->va_uid;
+    ip->i_gid = vp->va_gid;
+    i_size_write(ip, vp->va_size);
+    ip->i_atime.tv_sec = vp->va_atime.tv_sec;
+    ip->i_atime.tv_nsec = 0;
+    ip->i_mtime.tv_sec = vp->va_mtime.tv_sec;
+    /* Set the mtime nanoseconds to the sysname generation number.
+     * This convinces NFS clients that all directories have changed
+     * any time the sysname list changes.
+     */
+    ip->i_mtime.tv_nsec = afs_sysnamegen;
+    ip->i_ctime.tv_sec = vp->va_ctime.tv_sec;
+    ip->i_ctime.tv_nsec = 0;
+}
+
+/* afs_notify_change
+ * Linux version of setattr call. What to change is in the iattr struct.
+ * We need to set bits in both the Linux inode as well as the vcache.
+ */
+static int
+afs_notify_change(struct dentry *dp, struct iattr *iattrp)
+{
+    struct vattr vattr;
+    cred_t *credp = crref();
+    struct inode *ip = dp->d_inode;
+    int code;
+
+    VATTR_NULL(&vattr);
+    iattr2vattr(&vattr, iattrp);       /* Convert for AFS vnodeops call. */
+
+    AFS_GLOCK();
+    code = afs_setattr(VTOAFS(ip), &vattr, credp);
+    if (!code) {
+       afs_getattr(VTOAFS(ip), &vattr, credp);
+       vattr2inode(ip, &vattr);
+    }
+    AFS_GUNLOCK();
+    crfree(credp);
+    return -code;
+}
+
 static int
 afs_linux_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
 {
index 8b9cdea..77b821b 100644 (file)
@@ -39,9 +39,9 @@ extern afs_rwlock_t afs_xvcache;
 extern struct afs_q VLRU;
 
 extern struct dentry_operations afs_dentry_operations;
+extern int afs_notify_change(struct dentry *dp, struct iattr *iattrp);
 
 /* Forward declarations */
-static void iattr2vattr(struct vattr *vattrp, struct iattr *iattrp);
 static int afs_root(struct super_block *afsp);
 struct super_block *afs_read_super(struct super_block *sb, void *data, int silent);
 int afs_fill_super(struct super_block *sb, void *data, int silent);
@@ -175,33 +175,6 @@ afs_root(struct super_block *afsp)
 
 /* super_operations */
 
-/* afs_notify_change
- * Linux version of setattr call. What to change is in the iattr struct.
- * We need to set bits in both the Linux inode as well as the vcache.
- */
-int
-afs_notify_change(struct dentry *dp, struct iattr *iattrp)
-{
-    struct vattr vattr;
-    cred_t *credp = crref();
-    struct inode *ip = dp->d_inode;
-    int code;
-
-    VATTR_NULL(&vattr);
-    iattr2vattr(&vattr, iattrp);       /* Convert for AFS vnodeops call. */
-
-    AFS_GLOCK();
-    code = afs_setattr(VTOAFS(ip), &vattr, credp);
-    if (!code) {
-       afs_getattr(VTOAFS(ip), &vattr, credp);
-       vattr2inode(ip, &vattr);
-    }
-    AFS_GUNLOCK();
-    crfree(credp);
-    return -code;
-}
-
-
 #if defined(STRUCT_SUPER_OPERATIONS_HAS_ALLOC_INODE)
 #if defined(HAVE_KMEM_CACHE_T)
 static kmem_cache_t *afs_inode_cachep;
@@ -395,59 +368,3 @@ struct super_operations afs_sops = {
   .notify_change =     afs_notify_change,
 #endif
 };
-
-/************** Support routines ************************/
-
-/* vattr_setattr
- * Set iattr data into vattr. Assume vattr cleared before call.
- */
-static void
-iattr2vattr(struct vattr *vattrp, struct iattr *iattrp)
-{
-    vattrp->va_mask = iattrp->ia_valid;
-    if (iattrp->ia_valid & ATTR_MODE)
-       vattrp->va_mode = iattrp->ia_mode;
-    if (iattrp->ia_valid & ATTR_UID)
-       vattrp->va_uid = iattrp->ia_uid;
-    if (iattrp->ia_valid & ATTR_GID)
-       vattrp->va_gid = iattrp->ia_gid;
-    if (iattrp->ia_valid & ATTR_SIZE)
-       vattrp->va_size = iattrp->ia_size;
-    if (iattrp->ia_valid & ATTR_ATIME) {
-       vattrp->va_atime.tv_sec = iattrp->ia_atime;
-       vattrp->va_atime.tv_usec = 0;
-    }
-    if (iattrp->ia_valid & ATTR_MTIME) {
-       vattrp->va_mtime.tv_sec = iattrp->ia_mtime;
-       vattrp->va_mtime.tv_usec = 0;
-    }
-    if (iattrp->ia_valid & ATTR_CTIME) {
-       vattrp->va_ctime.tv_sec = iattrp->ia_ctime;
-       vattrp->va_ctime.tv_usec = 0;
-    }
-}
-
-/* vattr2inode
- * Rewrite the inode cache from the attr. Assumes all vattr fields are valid.
- */
-void
-vattr2inode(struct inode *ip, struct vattr *vp)
-{
-    ip->i_ino = vp->va_nodeid;
-    ip->i_nlink = vp->va_nlink;
-    ip->i_blocks = vp->va_blocks;
-#ifdef STRUCT_INODE_HAS_I_BLKBITS
-    ip->i_blkbits = AFS_BLKBITS;
-#endif
-#ifdef STRUCT_INODE_HAS_I_BLKSIZE
-    ip->i_blksize = vp->va_blocksize;
-#endif
-    ip->i_rdev = vp->va_rdev;
-    ip->i_mode = vp->va_mode;
-    ip->i_uid = vp->va_uid;
-    ip->i_gid = vp->va_gid;
-    i_size_write(ip, vp->va_size);
-    ip->i_atime = vp->va_atime.tv_sec;
-    ip->i_mtime = vp->va_mtime.tv_sec;
-    ip->i_ctime = vp->va_ctime.tv_sec;
-}
index 8744691..aebc051 100644 (file)
@@ -47,7 +47,6 @@
 #endif
 
 extern struct vcache *afs_globalVp;
-extern int afs_notify_change(struct dentry *dp, struct iattr *iattrp);
 #if defined(AFS_LINUX24_ENV)
 /* Some uses of BKL are perhaps not needed for bypass or memcache--
  * why don't we try it out? */
@@ -888,6 +887,86 @@ afs_linux_revalidate(struct dentry *dp)
     return afs_convert_code(code);
 }
 
+/* vattr_setattr
+ * Set iattr data into vattr. Assume vattr cleared before call.
+ */
+static void
+iattr2vattr(struct vattr *vattrp, struct iattr *iattrp)
+{
+    vattrp->va_mask = iattrp->ia_valid;
+    if (iattrp->ia_valid & ATTR_MODE)
+       vattrp->va_mode = iattrp->ia_mode;
+    if (iattrp->ia_valid & ATTR_UID)
+       vattrp->va_uid = iattrp->ia_uid;
+    if (iattrp->ia_valid & ATTR_GID)
+       vattrp->va_gid = iattrp->ia_gid;
+    if (iattrp->ia_valid & ATTR_SIZE)
+       vattrp->va_size = iattrp->ia_size;
+    if (iattrp->ia_valid & ATTR_ATIME) {
+       vattrp->va_atime.tv_sec = iattrp->ia_atime;
+       vattrp->va_atime.tv_usec = 0;
+    }
+    if (iattrp->ia_valid & ATTR_MTIME) {
+       vattrp->va_mtime.tv_sec = iattrp->ia_mtime;
+       vattrp->va_mtime.tv_usec = 0;
+    }
+    if (iattrp->ia_valid & ATTR_CTIME) {
+       vattrp->va_ctime.tv_sec = iattrp->ia_ctime;
+       vattrp->va_ctime.tv_usec = 0;
+    }
+}
+
+/* vattr2inode
+ * Rewrite the inode cache from the attr. Assumes all vattr fields are valid.
+ */
+void
+vattr2inode(struct inode *ip, struct vattr *vp)
+{
+    ip->i_ino = vp->va_nodeid;
+    ip->i_nlink = vp->va_nlink;
+    ip->i_blocks = vp->va_blocks;
+#ifdef STRUCT_INODE_HAS_I_BLKBITS
+    ip->i_blkbits = AFS_BLKBITS;
+#endif
+#ifdef STRUCT_INODE_HAS_I_BLKSIZE
+    ip->i_blksize = vp->va_blocksize;
+#endif
+    ip->i_rdev = vp->va_rdev;
+    ip->i_mode = vp->va_mode;
+    ip->i_uid = vp->va_uid;
+    ip->i_gid = vp->va_gid;
+    i_size_write(ip, vp->va_size);
+    ip->i_atime = vp->va_atime.tv_sec;
+    ip->i_mtime = vp->va_mtime.tv_sec;
+    ip->i_ctime = vp->va_ctime.tv_sec;
+}
+
+/* afs_notify_change
+ * Linux version of setattr call. What to change is in the iattr struct.
+ * We need to set bits in both the Linux inode as well as the vcache.
+ */
+int
+afs_notify_change(struct dentry *dp, struct iattr *iattrp)
+{
+    struct vattr vattr;
+    cred_t *credp = crref();
+    struct inode *ip = dp->d_inode;
+    int code;
+
+    VATTR_NULL(&vattr);
+    iattr2vattr(&vattr, iattrp);       /* Convert for AFS vnodeops call. */
+
+    AFS_GLOCK();
+    code = afs_setattr(VTOAFS(ip), &vattr, credp);
+    if (!code) {
+       afs_getattr(VTOAFS(ip), &vattr, credp);
+       vattr2inode(ip, &vattr);
+    }
+    AFS_GUNLOCK();
+    crfree(credp);
+    return -code;
+}
+
 /* Validate a dentry. Return 1 if unchanged, 0 if VFS layer should re-evaluate.
  * In kernels 2.2.10 and above, we are passed an additional flags var which
  * may have either the LOOKUP_FOLLOW OR LOOKUP_DIRECTORY set in which case