Commit 6c7699c0 authored by David Chinner's avatar David Chinner Committed by Lachlan McIlroy

[XFS] remove the mount inode list

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: default avatarDavid Chinner <david@fromorbit.com>
Signed-off-by: default avatarLachlan McIlroy <lachlan@sgi.com>
Signed-off-by: default avatarChristoph Hellwig <hch@infradead.org>
parent 60197e8d
...@@ -76,7 +76,6 @@ xfs_iget_core( ...@@ -76,7 +76,6 @@ xfs_iget_core(
{ {
struct inode *old_inode; struct inode *old_inode;
xfs_inode_t *ip; xfs_inode_t *ip;
xfs_inode_t *iq;
int error; int error;
unsigned long first_index, mask; unsigned long first_index, mask;
xfs_perag_t *pag; xfs_perag_t *pag;
...@@ -255,24 +254,6 @@ finish_inode: ...@@ -255,24 +254,6 @@ finish_inode:
write_unlock(&pag->pag_ici_lock); write_unlock(&pag->pag_ici_lock);
radix_tree_preload_end(); 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); xfs_put_perag(mp, pag);
return_ip: return_ip:
...@@ -493,36 +474,15 @@ xfs_iextract( ...@@ -493,36 +474,15 @@ xfs_iextract(
{ {
xfs_mount_t *mp = ip->i_mount; xfs_mount_t *mp = ip->i_mount;
xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino); xfs_perag_t *pag = xfs_get_perag(mp, ip->i_ino);
xfs_inode_t *iq;
write_lock(&pag->pag_ici_lock); write_lock(&pag->pag_ici_lock);
radix_tree_delete(&pag->pag_ici_root, XFS_INO_TO_AGINO(mp, ip->i_ino)); radix_tree_delete(&pag->pag_ici_root, XFS_INO_TO_AGINO(mp, ip->i_ino));
write_unlock(&pag->pag_ici_lock); write_unlock(&pag->pag_ici_lock);
xfs_put_perag(mp, pag); 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 */ /* Deal with the deleted inodes list */
XFS_MOUNT_ILOCK(mp);
list_del_init(&ip->i_reclaim); list_del_init(&ip->i_reclaim);
mp->m_ireclaims++; mp->m_ireclaims++;
XFS_MOUNT_IUNLOCK(mp); XFS_MOUNT_IUNLOCK(mp);
} }
......
...@@ -233,16 +233,8 @@ typedef struct dm_attrs_s { ...@@ -233,16 +233,8 @@ typedef struct dm_attrs_s {
__uint16_t da_pad; /* DMIG extra padding */ __uint16_t da_pad; /* DMIG extra padding */
} dm_attrs_t; } 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 { typedef struct xfs_inode {
/* Inode linking and identification information. */ /* 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 xfs_mount *i_mount; /* fs mount struct ptr */
struct list_head i_reclaim; /* reclaim list */ struct list_head i_reclaim; /* reclaim list */
struct inode *i_vnode; /* vnode backpointer */ struct inode *i_vnode; /* vnode backpointer */
......
...@@ -1282,11 +1282,6 @@ xfs_unmountfs( ...@@ -1282,11 +1282,6 @@ xfs_unmountfs(
xfs_unmountfs_wait(mp); /* wait for async bufs */ xfs_unmountfs_wait(mp); /* wait for async bufs */
xfs_log_unmount(mp); /* Done! No more fs ops. */ 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) if ((mp->m_flags & XFS_MOUNT_NOUUID) == 0)
uuid_table_remove(&mp->m_sb.sb_uuid); uuid_table_remove(&mp->m_sb.sb_uuid);
......
...@@ -248,7 +248,6 @@ typedef struct xfs_mount { ...@@ -248,7 +248,6 @@ typedef struct xfs_mount {
xfs_agnumber_t m_agirotor; /* last ag dir inode alloced */ xfs_agnumber_t m_agirotor; /* last ag dir inode alloced */
spinlock_t m_agirotor_lock;/* .. and lock protecting it */ spinlock_t m_agirotor_lock;/* .. and lock protecting it */
xfs_agnumber_t m_maxagi; /* highest inode alloc group */ 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 */ struct list_head m_del_inodes; /* inodes to reclaim */
mutex_t m_ilock; /* inode list mutex */ mutex_t m_ilock; /* inode list mutex */
uint m_ireclaims; /* count of calls to reclaim*/ uint m_ireclaims; /* count of calls to reclaim*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment