aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_inode.h
diff options
context:
space:
mode:
authorDavid Chinner <david@fromorbit.com>2008-10-30 02:36:14 -0400
committerLachlan McIlroy <lachlan@sgi.com>2008-10-30 02:36:14 -0400
commitbf904248a2adb3f3be4eb4fb1837ce3bb28cca76 (patch)
tree288306924f640f19d881166a3b50fa59b6e9e7e7 /fs/xfs/xfs_inode.h
parent8290c35f87304a6b73d4fd17b03580b4f7425de8 (diff)
[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>
Diffstat (limited to 'fs/xfs/xfs_inode.h')
-rw-r--r--fs/xfs/xfs_inode.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
index 6fd20fc179a4..345b43a90eb5 100644
--- a/fs/xfs/xfs_inode.h
+++ b/fs/xfs/xfs_inode.h
@@ -236,7 +236,6 @@ typedef struct xfs_inode {
236 /* Inode linking and identification information. */ 236 /* Inode linking and identification information. */
237 struct xfs_mount *i_mount; /* fs mount struct ptr */ 237 struct xfs_mount *i_mount; /* fs mount struct ptr */
238 struct list_head i_reclaim; /* reclaim list */ 238 struct list_head i_reclaim; /* reclaim list */
239 struct inode *i_vnode; /* vnode backpointer */
240 struct xfs_dquot *i_udquot; /* user dquot */ 239 struct xfs_dquot *i_udquot; /* user dquot */
241 struct xfs_dquot *i_gdquot; /* group dquot */ 240 struct xfs_dquot *i_gdquot; /* group dquot */
242 241
@@ -271,6 +270,10 @@ typedef struct xfs_inode {
271 xfs_fsize_t i_size; /* in-memory size */ 270 xfs_fsize_t i_size; /* in-memory size */
272 xfs_fsize_t i_new_size; /* size when write completes */ 271 xfs_fsize_t i_new_size; /* size when write completes */
273 atomic_t i_iocount; /* outstanding I/O count */ 272 atomic_t i_iocount; /* outstanding I/O count */
273
274 /* VFS inode */
275 struct inode i_vnode; /* embedded VFS inode */
276
274 /* Trace buffers per inode. */ 277 /* Trace buffers per inode. */
275#ifdef XFS_INODE_TRACE 278#ifdef XFS_INODE_TRACE
276 struct ktrace *i_trace; /* general inode trace */ 279 struct ktrace *i_trace; /* general inode trace */
@@ -298,13 +301,13 @@ typedef struct xfs_inode {
298/* Convert from vfs inode to xfs inode */ 301/* Convert from vfs inode to xfs inode */
299static inline struct xfs_inode *XFS_I(struct inode *inode) 302static inline struct xfs_inode *XFS_I(struct inode *inode)
300{ 303{
301 return (struct xfs_inode *)inode->i_private; 304 return container_of(inode, struct xfs_inode, i_vnode);
302} 305}
303 306
304/* convert from xfs inode to vfs inode */ 307/* convert from xfs inode to vfs inode */
305static inline struct inode *VFS_I(struct xfs_inode *ip) 308static inline struct inode *VFS_I(struct xfs_inode *ip)
306{ 309{
307 return (struct inode *)ip->i_vnode; 310 return &ip->i_vnode;
308} 311}
309 312
310/* 313/*