vfs: move the rest of int fields to struct mount
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 25 Nov 2011 05:57:42 +0000 (00:57 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 4 Jan 2012 03:57:10 +0000 (22:57 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/mount.h
fs/namespace.c
fs/pnode.c
include/linux/mount.h

index c7bd401960eacdbf7605bcaf90ea6efb38f92c72..9217e03ba5e7b0371c3611636cd5b3c9c248cd3d 100644 (file)
@@ -28,6 +28,9 @@ struct mount {
        struct mnt_namespace *mnt_ns;   /* containing namespace */
        int mnt_id;                     /* mount identifier */
        int mnt_group_id;               /* peer group identifier */
+       int mnt_expiry_mark;            /* true if marked for expiry */
+       int mnt_pinned;
+       int mnt_ghosts;
 };
 
 static inline struct mount *real_mount(struct vfsmount *mnt)
index dfed9a25f20479a8dd0ec80fe1a599f48b98fd17..c7b8dbc88fe524b39b6b54ad2531832c47e2dd50 100644 (file)
@@ -787,9 +787,9 @@ put_again:
                return;
        br_write_lock(vfsmount_lock);
 #endif
-       if (unlikely(mnt->mnt.mnt_pinned)) {
-               mnt_add_count(mnt, mnt->mnt.mnt_pinned + 1);
-               mnt->mnt.mnt_pinned = 0;
+       if (unlikely(mnt->mnt_pinned)) {
+               mnt_add_count(mnt, mnt->mnt_pinned + 1);
+               mnt->mnt_pinned = 0;
                br_write_unlock(vfsmount_lock);
                acct_auto_close_mnt(&mnt->mnt);
                goto put_again;
@@ -801,10 +801,11 @@ put_again:
 void mntput(struct vfsmount *mnt)
 {
        if (mnt) {
+               struct mount *m = real_mount(mnt);
                /* avoid cacheline pingpong, hope gcc doesn't get "smart" */
-               if (unlikely(mnt->mnt_expiry_mark))
-                       mnt->mnt_expiry_mark = 0;
-               mntput_no_expire(real_mount(mnt));
+               if (unlikely(m->mnt_expiry_mark))
+                       m->mnt_expiry_mark = 0;
+               mntput_no_expire(m);
        }
 }
 EXPORT_SYMBOL(mntput);
@@ -820,16 +821,17 @@ EXPORT_SYMBOL(mntget);
 void mnt_pin(struct vfsmount *mnt)
 {
        br_write_lock(vfsmount_lock);
-       mnt->mnt_pinned++;
+       real_mount(mnt)->mnt_pinned++;
        br_write_unlock(vfsmount_lock);
 }
 EXPORT_SYMBOL(mnt_pin);
 
-void mnt_unpin(struct vfsmount *mnt)
+void mnt_unpin(struct vfsmount *m)
 {
+       struct mount *mnt = real_mount(m);
        br_write_lock(vfsmount_lock);
        if (mnt->mnt_pinned) {
-               mnt_add_count(real_mount(mnt), 1);
+               mnt_add_count(mnt, 1);
                mnt->mnt_pinned--;
        }
        br_write_unlock(vfsmount_lock);
@@ -1200,17 +1202,17 @@ void release_mounts(struct list_head *head)
                list_del_init(&mnt->mnt_hash);
                if (mnt_has_parent(mnt)) {
                        struct dentry *dentry;
-                       struct vfsmount *m;
+                       struct mount *m;
 
                        br_write_lock(vfsmount_lock);
                        dentry = mnt->mnt_mountpoint;
-                       m = &mnt->mnt_parent->mnt;
+                       m = mnt->mnt_parent;
                        mnt->mnt_mountpoint = mnt->mnt.mnt_root;
                        mnt->mnt_parent = mnt;
                        m->mnt_ghosts--;
                        br_write_unlock(vfsmount_lock);
                        dput(dentry);
-                       mntput(m);
+                       mntput(&m->mnt);
                }
                mntput(&mnt->mnt);
        }
@@ -1239,7 +1241,7 @@ void umount_tree(struct mount *mnt, int propagate, struct list_head *kill)
                __mnt_make_shortterm(p);
                list_del_init(&p->mnt_child);
                if (mnt_has_parent(p)) {
-                       p->mnt_parent->mnt.mnt_ghosts++;
+                       p->mnt_parent->mnt_ghosts++;
                        dentry_reset_mounted(p->mnt_mountpoint);
                }
                change_mnt_propagation(p, MS_PRIVATE);
@@ -1281,7 +1283,7 @@ static int do_umount(struct mount *mnt, int flags)
                }
                br_write_unlock(vfsmount_lock);
 
-               if (!xchg(&mnt->mnt.mnt_expiry_mark, 1))
+               if (!xchg(&mnt->mnt_expiry_mark, 1))
                        return -EAGAIN;
        }
 
@@ -2106,7 +2108,7 @@ void mark_mounts_for_expiry(struct list_head *mounts)
         *   cleared by mntput())
         */
        list_for_each_entry_safe(mnt, next, mounts, mnt_expire) {
-               if (!xchg(&mnt->mnt.mnt_expiry_mark, 1) ||
+               if (!xchg(&mnt->mnt_expiry_mark, 1) ||
                        propagate_mount_busy(mnt, 1))
                        continue;
                list_move(&mnt->mnt_expire, &graveyard);
index 001c8b0df379feb11c147a03c8d5c07c1773d11e..a40abf20f35e42c78a24a828b92e0481b5338c4b 100644 (file)
@@ -272,7 +272,7 @@ out:
  */
 static inline int do_refcount_check(struct mount *mnt, int count)
 {
-       int mycount = mnt_get_count(mnt) - mnt->mnt.mnt_ghosts;
+       int mycount = mnt_get_count(mnt) - mnt->mnt_ghosts;
        return (mycount > count);
 }
 
index b26dc40bfafc824f6e934361f3d91d466e32a462..080e3088ca81fbfe5c6ff60342b8df6a33da0dd0 100644 (file)
@@ -58,9 +58,6 @@ struct vfsmount {
 #endif
        const char *mnt_devname;        /* Name of device e.g. /dev/dsk/hda1 */
        struct list_head mnt_list;
-       int mnt_expiry_mark;            /* true if marked for expiry */
-       int mnt_pinned;
-       int mnt_ghosts;
 };
 
 struct file; /* forward dec */