[XFS] Combine the XFS and Linux inodes
To avoid issues with different lifecycles of XFS and Linux inodes, embedd the linux inode inside the XFS inode. This means that the linux inode has the same lifecycle as the XFS inode, even when it has been released by the OS. XFS inodes don't live much longer than this (a short stint in reclaim at most), so there isn't significant memory usage penalties here. Version 3 o kill xfs_icount() Version 2 o remove unused commented out code from xfs_iget(). o kill useless cast in VFS_I() SGI-PV: 988141 SGI-Modid: xfs-linux-melb:xfs-kern:32323a Signed-off-by: David Chinner <david@fromorbit.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com> Signed-off-by: Christoph Hellwig <hch@infradead.org>
This commit is contained in:
committed by
Lachlan McIlroy
parent
8290c35f87
commit
bf904248a2
@@ -64,14 +64,14 @@ xfs_synchronize_atime(
|
||||
{
|
||||
struct inode *inode = VFS_I(ip);
|
||||
|
||||
if (inode) {
|
||||
if (!(inode->i_state & I_CLEAR)) {
|
||||
ip->i_d.di_atime.t_sec = (__int32_t)inode->i_atime.tv_sec;
|
||||
ip->i_d.di_atime.t_nsec = (__int32_t)inode->i_atime.tv_nsec;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If the linux inode exists, mark it dirty.
|
||||
* If the linux inode is valid, mark it dirty.
|
||||
* Used when commiting a dirty inode into a transaction so that
|
||||
* the inode will get written back by the linux code
|
||||
*/
|
||||
@@ -81,7 +81,7 @@ xfs_mark_inode_dirty_sync(
|
||||
{
|
||||
struct inode *inode = VFS_I(ip);
|
||||
|
||||
if (inode)
|
||||
if (!(inode->i_state & (I_WILL_FREE|I_FREEING|I_CLEAR)))
|
||||
mark_inode_dirty_sync(inode);
|
||||
}
|
||||
|
||||
@@ -766,12 +766,21 @@ xfs_diflags_to_iflags(
|
||||
* When reading existing inodes from disk this is called directly
|
||||
* from xfs_iget, when creating a new inode it is called from
|
||||
* xfs_ialloc after setting up the inode.
|
||||
*
|
||||
* We are always called with an uninitialised linux inode here.
|
||||
* We need to initialise the necessary fields and take a reference
|
||||
* on it.
|
||||
*/
|
||||
void
|
||||
xfs_setup_inode(
|
||||
struct xfs_inode *ip)
|
||||
{
|
||||
struct inode *inode = ip->i_vnode;
|
||||
struct inode *inode = &ip->i_vnode;
|
||||
|
||||
inode->i_ino = ip->i_ino;
|
||||
inode->i_state = I_NEW|I_LOCK;
|
||||
inode_add_to_lists(ip->i_mount->m_super, inode);
|
||||
ASSERT(atomic_read(&inode->i_count) == 1);
|
||||
|
||||
inode->i_mode = ip->i_d.di_mode;
|
||||
inode->i_nlink = ip->i_d.di_nlink;
|
||||
|
||||
Reference in New Issue
Block a user