linux/fs/xfs
Brian Foster 76e8f13866 xfs: check for stale inode before acquiring iflock on push
An inode in the AIL can be flush locked and marked stale if
a cluster free transaction occurs at the right time. The
inode item is then marked as flushing, which causes xfsaild
to spin and leaves the filesystem stalled. This is
reproduced by running xfstests 273 in a loop for an
extended period of time.

Check for stale inodes before the flush lock. This marks
the inode as pinned, leads to a log flush and allows the
filesystem to proceed.

Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
2012-06-21 10:53:43 -05:00
..
Kconfig
kmem.c xfs: switch to proper __bitwise type for KM_... flags 2012-05-29 23:28:32 -04:00
kmem.h xfs: switch to proper __bitwise type for KM_... flags 2012-05-29 23:28:32 -04:00
Makefile xfs: move xfs_do_force_shutdown() and kill xfs_rw.c 2012-05-14 16:20:59 -05:00
mrlock.h
time.h
uuid.c
uuid.h
xfs_acl.c xfs: fix acl count validation in xfs_acl_from_disk() 2011-12-16 15:17:42 -06:00
xfs_acl.h
xfs_ag.h xfs: move busy extent handling to it's own file 2012-05-14 16:20:55 -05:00
xfs_alloc_btree.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_alloc_btree.h
xfs_alloc.c xfs: fix debug_object WARN at xfs_alloc_vextent() 2012-06-14 12:28:21 -05:00
xfs_alloc.h xfs: move busy extent handling to it's own file 2012-05-14 16:20:55 -05:00
xfs_aops.c xfs: m_maxioffset is redundant 2012-06-14 12:28:22 -05:00
xfs_aops.h xfs: log file size updates at I/O completion time 2012-03-13 16:30:49 -05:00
xfs_attr_leaf.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_attr_leaf.h
xfs_attr_sf.h
xfs_attr.c xfs: move xfs_get_extsz_hint() and kill xfs_rw.h 2012-05-14 16:20:58 -05:00
xfs_attr.h
xfs_bit.c
xfs_bit.h
xfs_bmap_btree.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_bmap_btree.h
xfs_bmap.c xfs: make largest supported offset less shouty 2012-06-14 12:28:24 -05:00
xfs_bmap.h xfs: move xfs_fsb_to_db to xfs_bmap.h 2012-05-14 16:20:57 -05:00
xfs_btree.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_btree.h
xfs_buf_item.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_buf_item.h
xfs_buf.c xfs: make XBF_MAPPED the default behaviour 2012-05-14 16:21:03 -05:00
xfs_buf.h xfs: make XBF_MAPPED the default behaviour 2012-05-14 16:21:03 -05:00
xfs_da_btree.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_da_btree.h
xfs_dfrag.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_dfrag.h
xfs_dinode.h xfs: fix typo in comment of xfs_dinode_t. 2012-06-14 12:28:26 -05:00
xfs_dir2_block.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_dir2_data.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_dir2_format.h
xfs_dir2_leaf.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_dir2_node.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_dir2_priv.h
xfs_dir2_sf.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_dir2.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_dir2.h
xfs_discard.c xfs: clean up busy extent naming 2012-05-14 16:20:56 -05:00
xfs_discard.h
xfs_dquot_item.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_dquot_item.h
xfs_dquot.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_dquot.h xfs: on-stack delayed write buffer lists 2012-05-14 16:20:31 -05:00
xfs_error.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_error.h
xfs_export.c ->encode_fh() API change 2012-05-29 23:28:33 -04:00
xfs_export.h
xfs_extent_busy.c xfs: make xfs_extent_busy_trim not static 2012-05-14 16:21:04 -05:00
xfs_extent_busy.h xfs: make xfs_extent_busy_trim not static 2012-05-14 16:21:04 -05:00
xfs_extfree_item.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_extfree_item.h
xfs_file.c xfs: kill copy and paste segment checks in xfs_file_aio_read 2012-06-14 12:28:25 -05:00
xfs_filestream.c
xfs_filestream.h
xfs_fs_subr.c xfs: remove the i_size field in struct xfs_inode 2012-01-17 15:08:53 -06:00
xfs_fs.h
xfs_fsops.c xfs: make XBF_MAPPED the default behaviour 2012-05-14 16:21:03 -05:00
xfs_fsops.h
xfs_globals.c
xfs_ialloc_btree.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_ialloc_btree.h
xfs_ialloc.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_ialloc.h xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_iget.c xfs: fix memory reclaim deadlock on agi buffer 2012-05-21 10:45:44 -05:00
xfs_inode_item.c xfs: check for stale inode before acquiring iflock on push 2012-06-21 10:53:43 -05:00
xfs_inode_item.h xfs: pass shutdown method into xfs_trans_ail_delete_bulk 2012-05-14 16:20:33 -05:00
xfs_inode.c xfs: make largest supported offset less shouty 2012-06-14 12:28:24 -05:00
xfs_inode.h xfs: move xfs_get_extsz_hint() and kill xfs_rw.h 2012-05-14 16:20:58 -05:00
xfs_inum.h xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_ioctl32.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_ioctl32.h
xfs_ioctl.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_ioctl.h
xfs_iomap.c xfs: make largest supported offset less shouty 2012-06-14 12:28:24 -05:00
xfs_iomap.h
xfs_iops.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_iops.h
xfs_itable.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_itable.h
xfs_linux.h
xfs_log_cil.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_log_priv.h xfs: switch to proper __bitwise type for KM_... flags 2012-05-29 23:28:32 -04:00
xfs_log_recover.c xfs: make XBF_MAPPED the default behaviour 2012-05-14 16:21:03 -05:00
xfs_log_recover.h
xfs_log.c xfs: switch to proper __bitwise type for KM_... flags 2012-05-29 23:28:32 -04:00
xfs_log.h xfs: allow assigning the tail lsn with the AIL lock held 2012-05-14 16:20:26 -05:00
xfs_message.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_message.h treewide: use __printf not __attribute__((format(printf,...))) 2011-10-31 17:30:54 -07:00
xfs_mount.c xfs: m_maxioffset is redundant 2012-06-14 12:28:22 -05:00
xfs_mount.h xfs: make largest supported offset less shouty 2012-06-14 12:28:24 -05:00
xfs_mru_cache.c
xfs_mru_cache.h
xfs_qm_bhv.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_qm_syscalls.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_qm.c xfs: make largest supported offset less shouty 2012-06-14 12:28:24 -05:00
xfs_qm.h xfs: remove the global xfs_Gqm structure 2012-03-14 12:06:32 -05:00
xfs_quota_priv.h xfs: use per-filesystem radix trees for dquot lookup 2012-03-14 11:09:06 -05:00
xfs_quota.h Define new macro XFS_ALL_QUOTA_ACTIVE and simply some usage 2012-02-03 11:32:20 -06:00
xfs_quotaops.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_rename.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_rtalloc.c xfs: move xfs_get_extsz_hint() and kill xfs_rw.h 2012-05-14 16:20:58 -05:00
xfs_rtalloc.h
xfs_sb.h xfs: kill the unused XFS_BB_FSB_OFFSET macro 2012-02-02 17:08:04 -06:00
xfs_stats.c xfs: use common code for quota statistics 2012-03-14 11:09:06 -05:00
xfs_stats.h xfs: use common code for quota statistics 2012-03-14 11:09:06 -05:00
xfs_super.c avoid iput() from flusher thread 2012-05-28 09:54:45 -07:00
xfs_super.h xfs: remove the global xfs_Gqm structure 2012-03-14 12:06:32 -05:00
xfs_sync.c xfs: protect xfs_sync_worker with s_umount semaphore 2012-05-15 14:35:43 -05:00
xfs_sync.h xfs: log timestamp updates 2012-03-13 17:01:15 -05:00
xfs_sysctl.c
xfs_sysctl.h
xfs_trace.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_trace.h xfs: add trace points for log forces 2012-05-21 10:45:44 -05:00
xfs_trans_ail.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_trans_buf.c xfs: make XBF_MAPPED the default behaviour 2012-05-14 16:21:03 -05:00
xfs_trans_dquot.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_trans_extfree.c xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_trans_inode.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_trans_priv.h xfs: pass shutdown method into xfs_trans_ail_delete_bulk 2012-05-14 16:20:33 -05:00
xfs_trans_space.h
xfs_trans.c xfs: switch to proper __bitwise type for KM_... flags 2012-05-29 23:28:32 -04:00
xfs_trans.h xfs: switch to proper __bitwise type for KM_... flags 2012-05-29 23:28:32 -04:00
xfs_types.h xfs: move xfsagino_t to xfs_types.h 2012-05-14 16:20:54 -05:00
xfs_utils.c xfs: clean up xfs_bit.h includes 2012-05-14 16:21:00 -05:00
xfs_utils.h xfs: propagate umode_t 2012-01-03 22:55:00 -05:00
xfs_vnode.h xfs: remove remaining scraps of struct xfs_iomap 2012-03-15 13:40:16 -05:00
xfs_vnodeops.c xfs: make largest supported offset less shouty 2012-06-14 12:28:24 -05:00
xfs_vnodeops.h xfs: remove remaining scraps of struct xfs_iomap 2012-03-15 13:40:16 -05:00
xfs_xattr.c
xfs.h