diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_super.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_super.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c index 064f964d4f3c..c51faaa5e291 100644 --- a/fs/xfs/linux-2.6/xfs_super.c +++ b/fs/xfs/linux-2.6/xfs_super.c | |||
@@ -834,8 +834,11 @@ xfsaild_wakeup( | |||
834 | struct xfs_ail *ailp, | 834 | struct xfs_ail *ailp, |
835 | xfs_lsn_t threshold_lsn) | 835 | xfs_lsn_t threshold_lsn) |
836 | { | 836 | { |
837 | ailp->xa_target = threshold_lsn; | 837 | /* only ever move the target forwards */ |
838 | wake_up_process(ailp->xa_task); | 838 | if (XFS_LSN_CMP(threshold_lsn, ailp->xa_target) > 0) { |
839 | ailp->xa_target = threshold_lsn; | ||
840 | wake_up_process(ailp->xa_task); | ||
841 | } | ||
839 | } | 842 | } |
840 | 843 | ||
841 | STATIC int | 844 | STATIC int |
@@ -847,8 +850,17 @@ xfsaild( | |||
847 | long tout = 0; /* milliseconds */ | 850 | long tout = 0; /* milliseconds */ |
848 | 851 | ||
849 | while (!kthread_should_stop()) { | 852 | while (!kthread_should_stop()) { |
850 | schedule_timeout_interruptible(tout ? | 853 | /* |
851 | msecs_to_jiffies(tout) : MAX_SCHEDULE_TIMEOUT); | 854 | * for short sleeps indicating congestion, don't allow us to |
855 | * get woken early. Otherwise all we do is bang on the AIL lock | ||
856 | * without making progress. | ||
857 | */ | ||
858 | if (tout && tout <= 20) | ||
859 | __set_current_state(TASK_KILLABLE); | ||
860 | else | ||
861 | __set_current_state(TASK_INTERRUPTIBLE); | ||
862 | schedule_timeout(tout ? | ||
863 | msecs_to_jiffies(tout) : MAX_SCHEDULE_TIMEOUT); | ||
852 | 864 | ||
853 | /* swsusp */ | 865 | /* swsusp */ |
854 | try_to_freeze(); | 866 | try_to_freeze(); |
@@ -1118,6 +1130,8 @@ xfs_fs_evict_inode( | |||
1118 | */ | 1130 | */ |
1119 | ASSERT(!rwsem_is_locked(&ip->i_iolock.mr_lock)); | 1131 | ASSERT(!rwsem_is_locked(&ip->i_iolock.mr_lock)); |
1120 | mrlock_init(&ip->i_iolock, MRLOCK_BARRIER, "xfsio", ip->i_ino); | 1132 | mrlock_init(&ip->i_iolock, MRLOCK_BARRIER, "xfsio", ip->i_ino); |
1133 | lockdep_set_class_and_name(&ip->i_iolock.mr_lock, | ||
1134 | &xfs_iolock_reclaimable, "xfs_iolock_reclaimable"); | ||
1121 | 1135 | ||
1122 | xfs_inactive(ip); | 1136 | xfs_inactive(ip); |
1123 | } | 1137 | } |