diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-14 02:17:49 +0400 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-14 02:17:49 +0400 | 
| commit | 9ea319b61613085f501a79cf8d405cb221d084f3 (patch) | |
| tree | 5bf7e1b9f104a0df029d355927fa9eb398db37bb /fs/xfs/xfs_inode.h | |
| parent | 3e11acd4306d558249c31cf6cac09f218f2de52e (diff) | |
| parent | c6a7b0f8a49aa71792dd108efc535435f462bf79 (diff) | |
| download | linux-9ea319b61613085f501a79cf8d405cb221d084f3.tar.xz | |
Merge git://oss.sgi.com:8090/xfs/linux-2.6
* git://oss.sgi.com:8090/xfs/linux-2.6: (45 commits)
  [XFS] Fix use after free in xfs_log_done().
  [XFS] Make xfs_bmap_*_count_leaves void.
  [XFS] Use KM_NOFS for debug trace buffers
  [XFS] use KM_MAYFAIL in xfs_mountfs
  [XFS] refactor xfs_mount_free
  [XFS] don't call xfs_freesb from xfs_unmountfs
  [XFS] xfs_unmountfs should return void
  [XFS] cleanup xfs_mountfs
  [XFS] move root inode IRELE into xfs_unmountfs
  [XFS] stop using file_update_time
  [XFS] optimize xfs_ichgtime
  [XFS] update timestamp in xfs_ialloc manually
  [XFS] remove the sema_t from XFS.
  [XFS] replace dquot flush semaphore with a completion
  [XFS] replace inode flush semaphore with a completion
  [XFS] extend completions to provide XFS object flush requirements
  [XFS] replace the XFS buf iodone semaphore with a completion
  [XFS] clean up stale references to semaphores
  [XFS] use get_unaligned_* helpers
  [XFS] Fix compile failure in xfs_buf_trace()
  ...
Diffstat (limited to 'fs/xfs/xfs_inode.h')
| -rw-r--r-- | fs/xfs/xfs_inode.h | 46 | 
1 files changed, 36 insertions, 10 deletions
| diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 17a04b6321ed..1420c49674d7 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -87,8 +87,7 @@ typedef struct xfs_ifork {   * Flags for xfs_ichgtime().   */  #define	XFS_ICHGTIME_MOD	0x1	/* data fork modification timestamp */ -#define	XFS_ICHGTIME_ACC	0x2	/* data fork access timestamp */ -#define	XFS_ICHGTIME_CHG	0x4	/* inode field change timestamp */ +#define	XFS_ICHGTIME_CHG	0x2	/* inode field change timestamp */  /*   * Per-fork incore inode flags. @@ -204,7 +203,7 @@ typedef struct xfs_inode {  	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 */ -	bhv_vnode_t		*i_vnode;	/* vnode backpointer */ +	struct inode		*i_vnode;	/* vnode backpointer */  	struct xfs_dquot	*i_udquot;	/* user dquot */  	struct xfs_dquot	*i_gdquot;	/* group dquot */ @@ -223,7 +222,7 @@ typedef struct xfs_inode {  	struct xfs_inode_log_item *i_itemp;	/* logging information */  	mrlock_t		i_lock;		/* inode lock */  	mrlock_t		i_iolock;	/* inode IO lock */ -	sema_t			i_flock;	/* inode flush lock */ +	struct completion	i_flush;	/* inode flush completion q */  	atomic_t		i_pincount;	/* inode pin count */  	wait_queue_head_t	i_ipin_wait;	/* inode pinning wait queue */  	spinlock_t		i_flags_lock;	/* inode i_flags lock */ @@ -263,6 +262,18 @@ typedef struct xfs_inode {  #define XFS_ISIZE(ip)	(((ip)->i_d.di_mode & S_IFMT) == S_IFREG) ? \  				(ip)->i_size : (ip)->i_d.di_size; +/* Convert from vfs inode to xfs inode */ +static inline struct xfs_inode *XFS_I(struct inode *inode) +{ +	return (struct xfs_inode *)inode->i_private; +} + +/* convert from xfs inode to vfs inode */ +static inline struct inode *VFS_I(struct xfs_inode *ip) +{ +	return (struct inode *)ip->i_vnode; +} +  /*   * i_flags helper functions   */ @@ -439,9 +450,6 @@ xfs_iflags_test_and_clear(xfs_inode_t *ip, unsigned short flags)  #define	XFS_ITRUNC_DEFINITE	0x1  #define	XFS_ITRUNC_MAYBE	0x2 -#define	XFS_ITOV(ip)		((ip)->i_vnode) -#define	XFS_ITOV_NULL(ip)	((ip)->i_vnode) -  /*   * For multiple groups support: if S_ISGID bit is set in the parent   * directory, group of new file is set to that of the parent, and @@ -473,11 +481,8 @@ int		xfs_ilock_nowait(xfs_inode_t *, uint);  void		xfs_iunlock(xfs_inode_t *, uint);  void		xfs_ilock_demote(xfs_inode_t *, uint);  int		xfs_isilocked(xfs_inode_t *, uint); -void		xfs_iflock(xfs_inode_t *); -int		xfs_iflock_nowait(xfs_inode_t *);  uint		xfs_ilock_map_shared(xfs_inode_t *);  void		xfs_iunlock_map_shared(xfs_inode_t *, uint); -void		xfs_ifunlock(xfs_inode_t *);  void		xfs_ireclaim(xfs_inode_t *);  int		xfs_finish_reclaim(xfs_inode_t *, int, int);  int		xfs_finish_reclaim_all(struct xfs_mount *, int); @@ -522,6 +527,7 @@ void		xfs_iflush_all(struct xfs_mount *);  void		xfs_ichgtime(xfs_inode_t *, int);  xfs_fsize_t	xfs_file_last_byte(xfs_inode_t *);  void		xfs_lock_inodes(xfs_inode_t **, int, uint); +void		xfs_lock_two_inodes(xfs_inode_t *, xfs_inode_t *, uint);  void		xfs_synchronize_atime(xfs_inode_t *);  void		xfs_mark_inode_dirty_sync(xfs_inode_t *); @@ -570,6 +576,26 @@ extern struct kmem_zone	*xfs_ifork_zone;  extern struct kmem_zone	*xfs_inode_zone;  extern struct kmem_zone	*xfs_ili_zone; +/* + * Manage the i_flush queue embedded in the inode.  This completion + * queue synchronizes processes attempting to flush the in-core + * inode back to disk. + */ +static inline void xfs_iflock(xfs_inode_t *ip) +{ +	wait_for_completion(&ip->i_flush); +} + +static inline int xfs_iflock_nowait(xfs_inode_t *ip) +{ +	return try_wait_for_completion(&ip->i_flush); +} + +static inline void xfs_ifunlock(xfs_inode_t *ip) +{ +	complete(&ip->i_flush); +} +  #endif	/* __KERNEL__ */  #endif	/* __XFS_INODE_H__ */ | 
