Commit 48ff4045 authored by Darrick J. Wong's avatar Darrick J. Wong

xfs: standardize GFP flags usage in online scrub

Memory allocation usage is the same throughout online fsck -- we want
kernel memory, we have to be able to back out if we can't allocate
memory, and we don't want to spray dmesg with memory allocation failure
reports.  Standardize the GFP flag usage and document these requirements.
Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
parent b255fab0
...@@ -737,7 +737,7 @@ xchk_agfl( ...@@ -737,7 +737,7 @@ xchk_agfl(
goto out; goto out;
} }
sai.entries = kvcalloc(sai.agflcount, sizeof(xfs_agblock_t), sai.entries = kvcalloc(sai.agflcount, sizeof(xfs_agblock_t),
GFP_KERNEL | __GFP_RETRY_MAYFAIL); XCHK_GFP_FLAGS);
if (!sai.entries) { if (!sai.entries) {
error = -ENOMEM; error = -ENOMEM;
goto out; goto out;
......
...@@ -79,7 +79,8 @@ xchk_setup_xattr( ...@@ -79,7 +79,8 @@ xchk_setup_xattr(
* without the inode lock held, which means we can sleep. * without the inode lock held, which means we can sleep.
*/ */
if (sc->flags & XCHK_TRY_HARDER) { if (sc->flags & XCHK_TRY_HARDER) {
error = xchk_setup_xattr_buf(sc, XATTR_SIZE_MAX, GFP_KERNEL); error = xchk_setup_xattr_buf(sc, XATTR_SIZE_MAX,
XCHK_GFP_FLAGS);
if (error) if (error)
return error; return error;
} }
...@@ -138,8 +139,7 @@ xchk_xattr_listent( ...@@ -138,8 +139,7 @@ xchk_xattr_listent(
* doesn't work, we overload the seen_enough variable to convey * doesn't work, we overload the seen_enough variable to convey
* the error message back to the main scrub function. * the error message back to the main scrub function.
*/ */
error = xchk_setup_xattr_buf(sx->sc, valuelen, error = xchk_setup_xattr_buf(sx->sc, valuelen, XCHK_GFP_FLAGS);
GFP_KERNEL | __GFP_RETRY_MAYFAIL);
if (error == -ENOMEM) if (error == -ENOMEM)
error = -EDEADLOCK; error = -EDEADLOCK;
if (error) { if (error) {
...@@ -324,8 +324,7 @@ xchk_xattr_block( ...@@ -324,8 +324,7 @@ xchk_xattr_block(
return 0; return 0;
/* Allocate memory for block usage checking. */ /* Allocate memory for block usage checking. */
error = xchk_setup_xattr_buf(ds->sc, 0, error = xchk_setup_xattr_buf(ds->sc, 0, XCHK_GFP_FLAGS);
GFP_KERNEL | __GFP_RETRY_MAYFAIL);
if (error == -ENOMEM) if (error == -ENOMEM)
return -EDEADLOCK; return -EDEADLOCK;
if (error) if (error)
......
...@@ -8,6 +8,15 @@ ...@@ -8,6 +8,15 @@
struct xfs_scrub; struct xfs_scrub;
/*
* Standard flags for allocating memory within scrub. NOFS context is
* configured by the process allocation scope. Scrub and repair must be able
* to back out gracefully if there isn't enough memory. Force-cast to avoid
* complaints from static checkers.
*/
#define XCHK_GFP_FLAGS ((__force gfp_t)(GFP_KERNEL | __GFP_NOWARN | \
__GFP_RETRY_MAYFAIL))
/* Type info and names for the scrub types. */ /* Type info and names for the scrub types. */
enum xchk_type { enum xchk_type {
ST_NONE = 1, /* disabled */ ST_NONE = 1, /* disabled */
......
...@@ -21,7 +21,7 @@ xchk_setup_symlink( ...@@ -21,7 +21,7 @@ xchk_setup_symlink(
struct xfs_scrub *sc) struct xfs_scrub *sc)
{ {
/* Allocate the buffer without the inode lock held. */ /* Allocate the buffer without the inode lock held. */
sc->buf = kvzalloc(XFS_SYMLINK_MAXLEN + 1, GFP_KERNEL); sc->buf = kvzalloc(XFS_SYMLINK_MAXLEN + 1, XCHK_GFP_FLAGS);
if (!sc->buf) if (!sc->buf)
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment