diff options
author | Darrick J. Wong <djwong@kernel.org> | 2021-01-05 17:45:15 -0800 |
---|---|---|
committer | Darrick J. Wong <djwong@kernel.org> | 2021-03-25 17:08:29 -0700 |
commit | f75a489f1c2486abaaf13f8fea67e9ebbf9a1406 (patch) | |
tree | aed676974db73204d0abfe6094d6cc810fdb369d /fs/xfs/scrub/scrub.c | |
parent | b2cb1106091b74c66d98e164ef3c385413c05c59 (diff) |
xfs: create temporary files and directories for online repair
Teach the online repair code how to create temporary files or
directories. These temporary files can be used to stage reconstructed
information until we're ready to perform an atomic extent swap to commit
the new metadata.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Diffstat (limited to 'fs/xfs/scrub/scrub.c')
-rw-r--r-- | fs/xfs/scrub/scrub.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/fs/xfs/scrub/scrub.c b/fs/xfs/scrub/scrub.c index 2fcd3409bc9b..22da6fd48420 100644 --- a/fs/xfs/scrub/scrub.c +++ b/fs/xfs/scrub/scrub.c @@ -19,6 +19,7 @@ #include "xfs_scrub.h" #include "xfs_btree.h" #include "xfs_btree_staging.h" +#include "xfs_log.h" #include "scrub/scrub.h" #include "scrub/common.h" #include "scrub/trace.h" @@ -168,6 +169,10 @@ xchk_teardown( xfs_irele(sc->ip); sc->ip = NULL; } + if (sc->flags & XREP_ATOMIC_SWAPEXT) { + xlog_drop_incompat_feat(sc->mp->m_log); + sc->flags &= ~XREP_ATOMIC_SWAPEXT; + } if (sc->flags & XCHK_FS_FROZEN) { int err2 = xchk_fs_thaw(sc); @@ -193,6 +198,12 @@ xchk_teardown( sc->buf_cleanup = NULL; sc->buf = NULL; } + if (sc->tempip) { + if (sc->temp_ilock_flags) + xfs_iunlock(sc->tempip, sc->temp_ilock_flags); + xfs_irele(sc->tempip); + sc->tempip = NULL; + } return error; } |