summaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_log_recover.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2013-08-09 10:49:58 +0200
committerJan Kara <jack@suse.cz>2013-08-09 10:49:58 +0200
commit97a2847d064e2fdd2e3cd4ff14cad2f377f0677a (patch)
treee49ce105dc6febc25dc3ceba6070ea3998c7330c /fs/xfs/xfs_log_recover.c
parente99a03c6f50a699d63b5751e3e88f84e43b037a7 (diff)
parentd2d0395fd1778d4bf714adc5bfd23a5d748d7802 (diff)
downloadop-kernel-dev-97a2847d064e2fdd2e3cd4ff14cad2f377f0677a.zip
op-kernel-dev-97a2847d064e2fdd2e3cd4ff14cad2f377f0677a.tar.gz
Merge branch 'for-3.12' of git://git.kernel.org/pub/scm/linux/kernel/git/jeffm/linux-reiserfs into for_next_testing
Reiserfs locking fixes.
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
-rw-r--r--fs/xfs/xfs_log_recover.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index 6fcc910a..7681b19 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -2592,8 +2592,16 @@ xlog_recover_inode_pass2(
goto error;
}
- /* Skip replay when the on disk inode is newer than the log one */
- if (dicp->di_flushiter < be16_to_cpu(dip->di_flushiter)) {
+ /*
+ * di_flushiter is only valid for v1/2 inodes. All changes for v3 inodes
+ * are transactional and if ordering is necessary we can determine that
+ * more accurately by the LSN field in the V3 inode core. Don't trust
+ * the inode versions we might be changing them here - use the
+ * superblock flag to determine whether we need to look at di_flushiter
+ * to skip replay when the on disk inode is newer than the log one
+ */
+ if (!xfs_sb_version_hascrc(&mp->m_sb) &&
+ dicp->di_flushiter < be16_to_cpu(dip->di_flushiter)) {
/*
* Deal with the wrap case, DI_MAX_FLUSH is less
* than smaller numbers
@@ -2608,6 +2616,7 @@ xlog_recover_inode_pass2(
goto error;
}
}
+
/* Take the opportunity to reset the flush iteration count */
dicp->di_flushiter = 0;
OpenPOWER on IntegriCloud