-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create a probe scrubber with id 0. This will be used by xfs_scrub to probe the kernel's abilities to scrub (and repair) the metadata. We do this by validating the ioctl inputs from userspace, preparing the filesystem for a scrub (or a repair) operation, and immediately returning to userspace. Userspace can use the returned errno and structure state to decide (in broad terms) if scrub/repair are supported by the running kernel. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com>
- Loading branch information
Darrick J. Wong
committed
Oct 26, 2017
1 parent
a563718
commit dcb660f
Showing
7 changed files
with
150 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -143,6 +143,7 @@ ifeq ($(CONFIG_XFS_ONLINE_SCRUB),y) | |
|
||
xfs-y += $(addprefix scrub/, \ | ||
trace.o \ | ||
common.o \ | ||
scrub.o \ | ||
) | ||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* | ||
* Copyright (C) 2017 Oracle. All Rights Reserved. | ||
* | ||
* Author: Darrick J. Wong <darrick.wong@oracle.com> | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version 2 | ||
* of the License, or (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it would be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. | ||
*/ | ||
#include "xfs.h" | ||
#include "xfs_fs.h" | ||
#include "xfs_shared.h" | ||
#include "xfs_format.h" | ||
#include "xfs_trans_resv.h" | ||
#include "xfs_mount.h" | ||
#include "xfs_defer.h" | ||
#include "xfs_btree.h" | ||
#include "xfs_bit.h" | ||
#include "xfs_log_format.h" | ||
#include "xfs_trans.h" | ||
#include "xfs_sb.h" | ||
#include "xfs_inode.h" | ||
#include "xfs_alloc.h" | ||
#include "xfs_alloc_btree.h" | ||
#include "xfs_bmap.h" | ||
#include "xfs_bmap_btree.h" | ||
#include "xfs_ialloc.h" | ||
#include "xfs_ialloc_btree.h" | ||
#include "xfs_refcount.h" | ||
#include "xfs_refcount_btree.h" | ||
#include "xfs_rmap.h" | ||
#include "xfs_rmap_btree.h" | ||
#include "scrub/xfs_scrub.h" | ||
#include "scrub/scrub.h" | ||
#include "scrub/common.h" | ||
#include "scrub/trace.h" | ||
|
||
/* Common code for the metadata scrubbers. */ | ||
|
||
/* Per-scrubber setup functions */ | ||
|
||
/* Set us up with a transaction and an empty context. */ | ||
int | ||
xfs_scrub_setup_fs( | ||
struct xfs_scrub_context *sc, | ||
struct xfs_inode *ip) | ||
{ | ||
return xfs_scrub_trans_alloc(sc->sm, sc->mp, &sc->tp); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/* | ||
* Copyright (C) 2017 Oracle. All Rights Reserved. | ||
* | ||
* Author: Darrick J. Wong <darrick.wong@oracle.com> | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version 2 | ||
* of the License, or (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it would be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. | ||
*/ | ||
#ifndef __XFS_SCRUB_COMMON_H__ | ||
#define __XFS_SCRUB_COMMON_H__ | ||
|
||
/* | ||
* We /could/ terminate a scrub/repair operation early. If we're not | ||
* in a good place to continue (fatal signal, etc.) then bail out. | ||
* Note that we're careful not to make any judgements about *error. | ||
*/ | ||
static inline bool | ||
xfs_scrub_should_terminate( | ||
struct xfs_scrub_context *sc, | ||
int *error) | ||
{ | ||
if (fatal_signal_pending(current)) { | ||
if (*error == 0) | ||
*error = -EAGAIN; | ||
return true; | ||
} | ||
return false; | ||
} | ||
|
||
/* | ||
* Grab an empty transaction so that we can re-grab locked buffers if | ||
* one of our btrees turns out to be cyclic. | ||
*/ | ||
static inline int | ||
xfs_scrub_trans_alloc( | ||
struct xfs_scrub_metadata *sm, | ||
struct xfs_mount *mp, | ||
struct xfs_trans **tpp) | ||
{ | ||
return xfs_trans_alloc_empty(mp, tpp); | ||
} | ||
|
||
/* Setup functions */ | ||
int xfs_scrub_setup_fs(struct xfs_scrub_context *sc, struct xfs_inode *ip); | ||
|
||
#endif /* __XFS_SCRUB_COMMON_H__ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters