|
@@ -223,7 +223,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 */
|
|
@@ -482,11 +482,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);
|
|
@@ -580,6 +577,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__ */
|