diff options
-rw-r--r-- | fs/xfs/xfs_log.c | 13 | ||||
-rw-r--r-- | fs/xfs/xfs_log.h | 1 | ||||
-rw-r--r-- | fs/xfs/xfs_log_priv.h | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 525367567feb..8af9e530d7ad 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -1474,11 +1474,17 @@ xlog_clear_incompat( if (down_write_trylock(&log->l_incompat_xattrs)) incompat_mask |= XFS_SB_FEAT_INCOMPAT_LOG_XATTRS; + if (down_write_trylock(&log->l_incompat_swapext)) + incompat_mask |= XFS_SB_FEAT_INCOMPAT_LOG_SWAPEXT; + if (!incompat_mask) return; xfs_clear_incompat_log_features(mp, incompat_mask); + if (incompat_mask & XFS_SB_FEAT_INCOMPAT_LOG_SWAPEXT) + up_write(&log->l_incompat_swapext); + if (incompat_mask & XFS_SB_FEAT_INCOMPAT_LOG_XATTRS) up_write(&log->l_incompat_xattrs); } @@ -1598,6 +1604,7 @@ xlog_alloc_log( log->l_sectBBsize = 1 << log2_size; init_rwsem(&log->l_incompat_xattrs); + init_rwsem(&log->l_incompat_swapext); xlog_get_iclog_buffer_size(mp, log); @@ -3906,6 +3913,9 @@ xlog_use_incompat_feat( case XLOG_INCOMPAT_FEAT_XATTRS: down_read(&log->l_incompat_xattrs); break; + case XLOG_INCOMPAT_FEAT_SWAPEXT: + down_read(&log->l_incompat_swapext); + break; } } @@ -3919,5 +3929,8 @@ xlog_drop_incompat_feat( case XLOG_INCOMPAT_FEAT_XATTRS: up_read(&log->l_incompat_xattrs); break; + case XLOG_INCOMPAT_FEAT_SWAPEXT: + up_read(&log->l_incompat_swapext); + break; } } diff --git a/fs/xfs/xfs_log.h b/fs/xfs/xfs_log.h index d187f6445909..30bdbf8ee25c 100644 --- a/fs/xfs/xfs_log.h +++ b/fs/xfs/xfs_log.h @@ -161,6 +161,7 @@ bool xlog_force_shutdown(struct xlog *log, uint32_t shutdown_flags); enum xlog_incompat_feat { XLOG_INCOMPAT_FEAT_XATTRS = XFS_SB_FEAT_INCOMPAT_LOG_XATTRS, + XLOG_INCOMPAT_FEAT_SWAPEXT = XFS_SB_FEAT_INCOMPAT_LOG_SWAPEXT }; void xlog_use_incompat_feat(struct xlog *log, enum xlog_incompat_feat what); diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h index a13b5b6b744d..6cbee6996de5 100644 --- a/fs/xfs/xfs_log_priv.h +++ b/fs/xfs/xfs_log_priv.h @@ -448,6 +448,7 @@ struct xlog { /* Users of log incompat features should take a read lock. */ struct rw_semaphore l_incompat_xattrs; + struct rw_semaphore l_incompat_swapext; }; /* |