diff options
author | David Chinner <david@fromorbit.com> | 2008-10-30 02:36:14 -0400 |
---|---|---|
committer | Lachlan McIlroy <lachlan@sgi.com> | 2008-10-30 02:36:14 -0400 |
commit | bf904248a2adb3f3be4eb4fb1837ce3bb28cca76 (patch) | |
tree | 288306924f640f19d881166a3b50fa59b6e9e7e7 /fs/xfs/xfs_inode.h | |
parent | 8290c35f87304a6b73d4fd17b03580b4f7425de8 (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.h | 9 |
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 */ |
299 | static inline struct xfs_inode *XFS_I(struct inode *inode) | 302 | static 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 */ |
305 | static inline struct inode *VFS_I(struct xfs_inode *ip) | 308 | static 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 | /* |