On 10/05/12 12:18, Ben Myers wrote:
Index: xfs/fs/xfs/xfs_mount.h =================================================================== --- xfs.orig/fs/xfs/xfs_mount.h +++ xfs/fs/xfs/xfs_mount.h @@ -198,7 +198,6 @@ typedef struct xfs_mount { #endif struct xfs_mru_cache *m_filestream; /* per-mount filestream data */ struct delayed_work m_reclaim_work; /* background inode reclaim */ - struct work_struct m_flush_work; /* background inode flush */ __int64_t m_update_flags; /* sb flags we need to update on the next remount,rw */ struct shrinker m_inode_shrink; /* inode reclaim shrinker */ @@ -381,6 +380,27 @@ extern int xfs_dev_is_read_only(struct x extern void xfs_set_low_space_thresholds(struct xfs_mount *); +/* + * Flush all dirty data to disk. Must not be called while holding an XFS_ILOCK + * or a page lock. + * + * We have to hold the s_umount lock here, but because this call can nest + * inside i_mutex (the parent directory in the create case, held by the VFS), + * we have to use down_read_trylock() to avoid potential deadlocks. In + * practice, this trylock will succeed on almost every attempt as + * unmount/remount type operations are exceedingly rare. + */ +static inline void +xfs_flush_inodes(struct xfs_mount *mp) +{ + struct super_block *sb = mp->m_super; + + if (down_read_trylock(&sb->s_umount)) { + sync_inodes_sb(sb); + up_read(&sb->s_umount); + } +} +
Was this suppose to be in xfs_inode.h? Otherwise.... Reviewed-by: Mark Tinguely <tinguely@xxxxxxx> _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs