[XFS] remove the mount inode list
authorDavid Chinner <david@fromorbit.com>
Thu, 30 Oct 2008 06:11:29 +0000 (17:11 +1100)
committerLachlan McIlroy <lachlan@sgi.com>
Thu, 30 Oct 2008 06:11:29 +0000 (17:11 +1100)
Now we've removed all users of the mount inode list, we can kill it. This
reduces the size of the xfs_inode by 2 pointers.

SGI-PV: 988139

SGI-Modid: xfs-linux-melb:xfs-kern:32293a

Signed-off-by: David Chinner <david@fromorbit.com>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Signed-off-by: Christoph Hellwig <hch@infradead.org>
fs/xfs/xfs_iget.c
fs/xfs/xfs_inode.h
fs/xfs/xfs_mount.c
fs/xfs/xfs_mount.h

index 4c92d19..1256746 100644 (file)
@@ -76,7 +76,6 @@ xfs_iget_core(
 {
        struct inode    *old_inode;
        xfs_inode_t     *ip;
-       xfs_inode_t     *iq;
        int             error;
        unsigned long   first_index, mask;
        xfs_perag_t     *pag;
@@ -255,24 +254,6 @@ finish_inode:
 
        write_unlock(&pag->pag_ici_lock);
        radix_tree_preload_end();
-
-       /*
-        * Link ip to its mount and thread it on the mount's inode list.
-        */
-       XFS_MOUNT_ILOCK(mp);
-       if ((iq = mp->m_inodes)) {
-               ASSERT(iq->i_mprev->i_mnext == iq);
-               ip->i_mprev = iq->i_mprev;
-               iq->i_mprev->i_mnext = ip;
-               iq->i_mprev = ip;
-               ip->i_mnext = iq;
-       } else {
-               ip->i_mnext = ip;
-               ip->i_mprev = ip;
-       }
-       mp->m_inodes = ip;
-
-       XFS_MOUNT_IUNLOCK(mp);
        xfs_put_perag(mp, pag);
 
  return_ip:
@@ -493,36 +474,15 @@ xfs_iextract(
 {
        xfs_mount_t     *mp = ip->i_mount;
        xfs_perag_t     *pag = xfs_get_perag(mp, ip->i_ino);
-       xfs_inode_t     *iq;
 
        write_lock(&pag->pag_ici_lock);
        radix_tree_delete(&pag->pag_ici_root, XFS_INO_TO_AGINO(mp, ip->i_ino));
        write_unlock(&pag->pag_ici_lock);
        xfs_put_perag(mp, pag);
 
-       /*
-        * Remove from mount's inode list.
-        */
-       XFS_MOUNT_ILOCK(mp);
-       ASSERT((ip->i_mnext != NULL) && (ip->i_mprev != NULL));
-       iq = ip->i_mnext;
-       iq->i_mprev = ip->i_mprev;
-       ip->i_mprev->i_mnext = iq;
-
-       /*
-        * Fix up the head pointer if it points to the inode being deleted.
-        */
-       if (mp->m_inodes == ip) {
-               if (ip == iq) {
-                       mp->m_inodes = NULL;
-               } else {
-                       mp->m_inodes = iq;
-               }
-       }
-
        /* Deal with the deleted inodes list */
+       XFS_MOUNT_ILOCK(mp);
        list_del_init(&ip->i_reclaim);
-
        mp->m_ireclaims++;
        XFS_MOUNT_IUNLOCK(mp);
 }
index 104623b..55d50b8 100644 (file)
@@ -233,16 +233,8 @@ typedef struct dm_attrs_s {
        __uint16_t      da_pad;         /* DMIG extra padding */
 } dm_attrs_t;
 
-typedef struct {
-       struct xfs_inode        *ip_mnext;      /* next inode in mount list */
-       struct xfs_inode        *ip_mprev;      /* ptr to prev inode */
-       struct xfs_mount        *ip_mount;      /* fs mount struct ptr */
-} xfs_iptr_t;
-
 typedef struct xfs_inode {
        /* Inode linking and identification information. */
-       struct xfs_inode        *i_mnext;       /* next inode in mount list */
-       struct xfs_inode        *i_mprev;       /* ptr to prev inode */
        struct xfs_mount        *i_mount;       /* fs mount struct ptr */
        struct list_head        i_reclaim;      /* reclaim list */
        struct inode            *i_vnode;       /* vnode backpointer */
index 40338ff..43e5917 100644 (file)
@@ -1282,11 +1282,6 @@ xfs_unmountfs(
        xfs_unmountfs_wait(mp);                 /* wait for async bufs */
        xfs_log_unmount(mp);                    /* Done! No more fs ops. */
 
-       /*
-        * All inodes from this mount point should be freed.
-        */
-       ASSERT(mp->m_inodes == NULL);
-
        if ((mp->m_flags & XFS_MOUNT_NOUUID) == 0)
                uuid_table_remove(&mp->m_sb.sb_uuid);
 
index f4644d7..0ba0526 100644 (file)
@@ -248,7 +248,6 @@ typedef struct xfs_mount {
        xfs_agnumber_t          m_agirotor;     /* last ag dir inode alloced */
        spinlock_t              m_agirotor_lock;/* .. and lock protecting it */
        xfs_agnumber_t          m_maxagi;       /* highest inode alloc group */
-       struct xfs_inode        *m_inodes;      /* active inode list */
        struct list_head        m_del_inodes;   /* inodes to reclaim */
        mutex_t                 m_ilock;        /* inode list mutex */
        uint                    m_ireclaims;    /* count of calls to reclaim*/