From patchwork Mon Mar 18 21:30:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13595867 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30DB85915F for ; Mon, 18 Mar 2024 21:30:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710797421; cv=none; b=DgVApazC1ZFw+CDivWTY4wPWo0mtVjq5kaRrpxy7cDxyWecHpUfdyOSWHHN9sFV09Z6zcO6gZGULEZbh5Of8vqek7hQoYEbHPfpPht/IlgZtx6XmKjSG5575g+h3tQaxR8FAyRaBbp+vwjXpsrroTZc8h0328iUwXAzebD2/WVc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710797421; c=relaxed/simple; bh=A99JDx4QgR/3W02wXHYxe8MkecrSaw1/RS5vSTBfhvU=; h=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tgUi3WntVez7Z7mL6ua46RtCEQio4Rj2ZAVnoPLMM+C8oVy0r0loDq/o1AmSW1Pq5rGtdySH6M1+MLyqLDZBC5Rfwb+MrABfNnjupeg05y6je1gSsX+QK6KNwx7zD8DocJc8xpOt76caN1Jh18p+n+95wkjNs1Ir6/sgBX+cl9A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=f/BixPWi; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="f/BixPWi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AD46BC43394; Mon, 18 Mar 2024 21:30:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710797420; bh=A99JDx4QgR/3W02wXHYxe8MkecrSaw1/RS5vSTBfhvU=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=f/BixPWipsmb8XvpxnW35MClPqsQUy7Ta+0hCuAofMgnp+rokeU7MHcEqQuNu53AR ajHV+b9grtotAN9vxdj9YB3R7isdP+4QvGEHSN+nQq9LnHMmc57iNgXIYHwaPC5R2J 7bxpZPKbud8pOo3pFM8nbkoRckFW87x356oMcM9kIZnhhTp2thpbMLNRrfpvEkczyU iGxo0G233rBqmDQcF8x11QdO7ZtDqbgz0NtdBWkVX3RNXKBvL//HhL5WRREUKv/zlG Lz5fJccPPjdcntbCM1pkeaU6SQSJ++ayL3A6UNpSsof7+pSbghLInW1z2ujkCAu/Gm 1kfc0eqk1rVxQ== Date: Mon, 18 Mar 2024 14:30:20 -0700 Subject: [PATCH 1/4] xfs_db: fix alignment checks in getbitval From: "Darrick J. Wong" To: cem@kernel.org, djwong@kernel.org Cc: linux-xfs@vger.kernel.org Message-ID: <171079732990.3790235.13146250511500557326.stgit@frogsfrogsfrogs> In-Reply-To: <171079732970.3790235.16378128492758082769.stgit@frogsfrogsfrogs> References: <171079732970.3790235.16378128492758082769.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Darrick J. Wong For some reason, getbitval insists upon collecting a u64 from a pointer bit by bit if it's not aligned to a 16-byte boundary. Modern day systems only seem to require N-byte alignment for an N-byte quantity, so let's do that instead. Signed-off-by: Darrick J. Wong --- db/bit.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/db/bit.c b/db/bit.c index c9bfd2eb025f..42ea8daf814a 100644 --- a/db/bit.c +++ b/db/bit.c @@ -62,24 +62,24 @@ getbitval( p = (char *)obj + byteize(bitoff); bit = bitoffs(bitoff); signext = (flags & BVSIGNED) != 0; - z4 = ((intptr_t)p & 0xf) == 0 && bit == 0; + z4 = ((intptr_t)p & (sizeof(uint64_t) - 1)) == 0 && bit == 0; if (nbits == 64 && z4) return be64_to_cpu(*(__be64 *)p); - z3 = ((intptr_t)p & 0x7) == 0 && bit == 0; + z3 = ((intptr_t)p & (sizeof(uint32_t) - 1)) == 0 && bit == 0; if (nbits == 32 && z3) { if (signext) return (__s32)be32_to_cpu(*(__be32 *)p); else return (__u32)be32_to_cpu(*(__be32 *)p); } - z2 = ((intptr_t)p & 0x3) == 0 && bit == 0; + z2 = ((intptr_t)p & (sizeof(uint16_t) - 1)) == 0 && bit == 0; if (nbits == 16 && z2) { if (signext) return (__s16)be16_to_cpu(*(__be16 *)p); else return (__u16)be16_to_cpu(*(__be16 *)p); } - z1 = ((intptr_t)p & 0x1) == 0 && bit == 0; + z1 = bit == 0; if (nbits == 8 && z1) { if (signext) return *(__s8 *)p; @@ -87,7 +87,6 @@ getbitval( return *(__u8 *)p; } - for (i = 0, rval = 0LL; i < nbits; i++) { if (getbit_l(p, bit + i)) { /* If the last bit is on and we care about sign From patchwork Mon Mar 18 21:30:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13595868 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E804E5A4D8 for ; Mon, 18 Mar 2024 21:30:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710797437; cv=none; b=ReGhbwBX/m27QaCEgJ6yviJ0y4dW8l6DfpXEKEjlOeGroAoQLMkbn1//Eribno9AXbQQAaYQ15oaoR3+y0k4SnSBfX8eHLHONRr4CoQCW4BAVOmG94AVEVq29hl4G8alMU6TpJ0NeYsw27K2ELn8vI9PfmV4ZEMnrcNqXvTv2vU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710797437; c=relaxed/simple; bh=UCHhkStYLy5HgnsYFzJaTmQ4BDCfxwCXiAKPazue0mg=; h=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=U6mykGb/KWvPiz+QvHL4OhaEQQ4hHKQ9h9J6knhJrC8cVDFu1Ru2x/bWJL99iZbem+iZJ9Nng47CPVLjFVZff7IXTbwTaaCghdBIOZdSRQYhuKrj9CiWfey4xcLKwTQg+CciaSSVQFwrTQu7liLpuD9l5W3aGuQ1bOt9OxGSsxA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DPjJJcl3; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DPjJJcl3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 58686C433C7; Mon, 18 Mar 2024 21:30:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710797436; bh=UCHhkStYLy5HgnsYFzJaTmQ4BDCfxwCXiAKPazue0mg=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=DPjJJcl3a4l8RfEZNHyAdv9K1gmIR3nurACzAXz0ifQBtSQg+vDFVfsqj8CtnE/Kh fyMUQZhS6fQRS2hyu6qF9/sldF34ke2hFWytf7ebsgxscIfMCxdlrhHCjs5vmJwCDt hsZiAZ3/DjY2tK6QXX5fihWJ+l9T611ZIL+XRJeeLxH5ib3fg2MlPh3ZCj1dnQJEHV XCodHGSNGhSDjd4tsnXXB4QT88mKduJv3XnFx+KIiEYJx8K9n/Sa+WyMksEqClr+FV rJmkgHXAV16WqLpl5uqfGdFzMEReto/2ztZAAj0kolu/ptbwb581JTeAJvwqn4c4gS gtAqTYRU2HbSA== Date: Mon, 18 Mar 2024 14:30:35 -0700 Subject: [PATCH 2/4] xfs_scrub: fix threadcount estimates for phase 6 From: "Darrick J. Wong" To: cem@kernel.org, djwong@kernel.org Cc: linux-xfs@vger.kernel.org Message-ID: <171079733004.3790235.15832282031548480309.stgit@frogsfrogsfrogs> In-Reply-To: <171079732970.3790235.16378128492758082769.stgit@frogsfrogsfrogs> References: <171079732970.3790235.16378128492758082769.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Darrick J. Wong If a filesystem has a realtime device or an external log device, the media scan can start up a separate readverify controller (and workqueue) to handle that. Each of those controllers can call progress_add, so we need to bump up nr_threads so that the progress reports controller knows to make its ptvar big enough to handle all these threads. Signed-off-by: Darrick J. Wong --- scrub/phase6.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scrub/phase6.c b/scrub/phase6.c index 99a32bc79620..98d6f08e4727 100644 --- a/scrub/phase6.c +++ b/scrub/phase6.c @@ -744,6 +744,10 @@ phase6_estimate( *items = cvt_off_fsb_to_b(&ctx->mnt, (d_blocks - d_bfree) + (r_blocks - r_bfree)); *nr_threads = disk_heads(ctx->datadev); + if (ctx->rtdev) + *nr_threads += disk_heads(ctx->rtdev); + if (ctx->logdev) + *nr_threads += disk_heads(ctx->logdev); *rshift = 20; return 0; } From patchwork Mon Mar 18 21:30:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13595869 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 832CA535D3 for ; Mon, 18 Mar 2024 21:30:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710797452; cv=none; b=sj/VcR/fL3hcxVAuDwr8XTSTMPpqLnmYChv7G0AiukAyT0MNAkAyrZXcO2qo6Mc1G8SwD/KIzq7QZ4HYA52pMoXiTV0XbGNdiruG5y0foFsobjCsVcLKKEcMpUui/gYPPhslODTOCi+Jem2kKKro5dUhXYLQqUHZZPvlQ7dao8Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710797452; c=relaxed/simple; bh=AVPWje2OVSQOCQWIT0mn9DDdzc2NB9mxj6I4lg6JKcQ=; h=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tn/OVugNeQcmGyjK4yyw/kc+Z7I3r3UT+cM2R3UNDg4pla2C/341ueaSewV6isulxBbiUpSdn/l+nOFGMVp1urShSoxtS+90cCEJ6x9JS0VwkU6LQ4WNUqPXnsP777glOaId0ilaw2qY69iIGjKj0P+qsjJqZaG+WKG3rYlEa3A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=u1CU4SSq; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="u1CU4SSq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0822DC433C7; Mon, 18 Mar 2024 21:30:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710797452; bh=AVPWje2OVSQOCQWIT0mn9DDdzc2NB9mxj6I4lg6JKcQ=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=u1CU4SSqk5ugygob0zdCrj/ISNQbRgK8o4KY0STcmFekut2Qi8qIFLqTV39TAVreA apILLz7ujA9XzZKyMX2FPI0HJ+C3l2hBM6RKIaNxrb+kAqKddiGrpgYrxDho/+p6yj xcMtiEFq2XMJCjINcflCWogxm9i+Mj3Cjo5nrhV6fCMY9pO/5HWlesQjVwV+yZpjo4 UHMA7YwJU57oncuv5gDbmPlrdJuGO7cdz3cMVCokBpNXOU94Qi31OIS5E2/pPv/ksc OKizxic4LsKYZeHMZ6Mhh4nnGqiG5LoTMMMlDqa+K1LEpE5oLN1Ya++2e2oqM39Dwc t86ATe4ihAbfQ== Date: Mon, 18 Mar 2024 14:30:51 -0700 Subject: [PATCH 3/4] xfs_scrub: don't fail while reporting media scan errors From: "Darrick J. Wong" To: cem@kernel.org, djwong@kernel.org Cc: linux-xfs@vger.kernel.org Message-ID: <171079733018.3790235.7889481812512181335.stgit@frogsfrogsfrogs> In-Reply-To: <171079732970.3790235.16378128492758082769.stgit@frogsfrogsfrogs> References: <171079732970.3790235.16378128492758082769.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Darrick J. Wong If we can't open a file to report that it has media errors, just log that fact and move on. In this case we want to keep going with phase 6 so we report as many errors as possible. Signed-off-by: Darrick J. Wong --- scrub/phase6.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/scrub/phase6.c b/scrub/phase6.c index 98d6f08e4727..daf2fcee3b5c 100644 --- a/scrub/phase6.c +++ b/scrub/phase6.c @@ -21,6 +21,7 @@ #include "read_verify.h" #include "spacemap.h" #include "vfs.h" +#include "common.h" /* * Phase 6: Verify data file integrity. @@ -291,13 +292,14 @@ report_inode_loss( /* Try to open the inode. */ fd = scrub_open_handle(handle); if (fd < 0) { - error = errno; - if (error == ESTALE) - return error; + /* Handle is stale, try again. */ + if (errno == ESTALE) + return ESTALE; - str_info(ctx, descr, -_("Disappeared during read error reporting.")); - return error; + str_error(ctx, descr, + _("Could not open to report read errors: %s."), + strerror(errno)); + return 0; } /* Go find the badness. */ @@ -353,10 +355,18 @@ report_dirent_loss( fd = openat(dir_fd, dirent->d_name, O_RDONLY | O_NOATIME | O_NOFOLLOW | O_NOCTTY); if (fd < 0) { + char descr[PATH_MAX + 1]; + if (errno == ENOENT) return 0; - str_errno(ctx, path); - return errno; + + snprintf(descr, PATH_MAX, "%s/%s", path, dirent->d_name); + descr[PATH_MAX] = 0; + + str_error(ctx, descr, + _("Could not open to report read errors: %s."), + strerror(errno)); + return 0; } /* Go find the badness. */ From patchwork Mon Mar 18 21:31:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 13595870 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2869D1862C for ; Mon, 18 Mar 2024 21:31:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710797468; cv=none; b=AuRuLOeydljEjzyry1Nungd3xK75qC2ITJahm79pXKPy98ktTaQdher8ok2r3NeMp5KjLtTPU26Mnur/9kIQv4gvXAcqMx1w4R3VfH735j50zGpOBaQ9x6CsvQkywJ8ZwdqnBDI2YD/kvsFv0MJTZJeQH16rr+SkYGASEsOO/9w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710797468; c=relaxed/simple; bh=jcueFUfpffxGdQDgwub3MPg2R+UGsMQrWb8YGrpFgJE=; h=Date:Subject:From:To:Cc:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kPja2CuRTr6teswd7EkD58TzijbiVAvAQGd7mjRFduSRr43U/yddOYyER6QVG3UDJ8pY92mzZZy2MHOck0UlCUBoGYAqylJpKkyaTD+hhL6uP9N2b2X/kxNeZkdOyA4Gbo8QNdIA06egKEQKW4rLyJjRquYzZlcQla+Vu/ad8us= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=g0eNYDez; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="g0eNYDez" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A2811C433F1; Mon, 18 Mar 2024 21:31:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710797467; bh=jcueFUfpffxGdQDgwub3MPg2R+UGsMQrWb8YGrpFgJE=; h=Date:Subject:From:To:Cc:In-Reply-To:References:From; b=g0eNYDezR2PRhsHX1AuXOYIV10b9xwCYfCSCGp1FSC1Pksld08+28hJ8nVh0hDETW 34u/Z2xapXOC43SWtQbtbQngvX1xiJlExi2aOQPFVmpv2b1a6BI6E6baBez2X+B6Br pPM7/I8Go7lwvRTtYFNtmH0awuH6FOUjYZ7tzgNkdH72bnDrN6phdgPaQs8EEgkqte /kiHhniiPmC82xWCmI8wCIQwP9ER9/WgqNT15lmYLE3OrEZmoFjezeKJszdGllL+uv lRzRqpSYF8XT5NpzWeb78Wsent8ln52m2+JAAFEqMiwxszK+rUDIVSHOJVDT5j1W2V eyDG1wlfzbZ+A== Date: Mon, 18 Mar 2024 14:31:07 -0700 Subject: [PATCH 4/4] xfs_io: add linux madvise advice codes From: "Darrick J. Wong" To: cem@kernel.org, djwong@kernel.org Cc: linux-xfs@vger.kernel.org Message-ID: <171079733032.3790235.1241181436907477385.stgit@frogsfrogsfrogs> In-Reply-To: <171079732970.3790235.16378128492758082769.stgit@frogsfrogsfrogs> References: <171079732970.3790235.16378128492758082769.stgit@frogsfrogsfrogs> User-Agent: StGit/0.19 Precedence: bulk X-Mailing-List: linux-xfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Darrick J. Wong Add all the Linux-specific madvise codes. We're going to need MADV_POPULATE_READ for a regression test. Signed-off-by: Darrick J. Wong --- io/madvise.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/io/madvise.c b/io/madvise.c index 6e9c5b121d72..ede233955ced 100644 --- a/io/madvise.c +++ b/io/madvise.c @@ -9,6 +9,7 @@ #include #include "init.h" #include "io.h" +#include static cmdinfo_t madvise_cmd; @@ -26,6 +27,31 @@ madvise_help(void) " -r -- expect random page references (POSIX_MADV_RANDOM)\n" " -s -- expect sequential page references (POSIX_MADV_SEQUENTIAL)\n" " -w -- will need these pages (POSIX_MADV_WILLNEED) [*]\n" +"\n" +"The following Linux-specific advise values are available:\n" +#ifdef MADV_COLLAPSE +" -c -- try to collapse range into transparent hugepages (MADV_COLLAPSE)\n" +#endif +#ifdef MADV_COLD +" -D -- deactivate the range (MADV_COLD)\n" +#endif +" -f -- free the range (MADV_FREE)\n" +" -h -- disable transparent hugepages (MADV_NOHUGEPAGE)\n" +" -H -- enable transparent hugepages (MADV_HUGEPAGE)\n" +" -m -- mark the range mergeable (MADV_MERGEABLE)\n" +" -M -- mark the range unmergeable (MADV_UNMERGEABLE)\n" +" -o -- mark the range offline (MADV_SOFT_OFFLINE)\n" +" -p -- punch a hole in the file (MADV_REMOVE)\n" +" -P -- poison the page cache (MADV_HWPOISON)\n" +#ifdef MADV_POPULATE_READ +" -R -- prefault in the range for read (MADV_POPULATE_READ)\n" +#endif +#ifdef MADV_POPULATE_WRITE +" -W -- prefault in the range for write (MADV_POPULATE_WRITE)\n" +#endif +#ifdef MADV_PAGEOUT +" -X -- reclaim the range (MADV_PAGEOUT)\n" +#endif " Notes:\n" " NORMAL sets the default readahead setting on the file.\n" " RANDOM sets the readahead setting on the file to zero.\n" @@ -45,20 +71,69 @@ madvise_f( int advise = MADV_NORMAL, c; size_t blocksize, sectsize; - while ((c = getopt(argc, argv, "drsw")) != EOF) { + while ((c = getopt(argc, argv, "cdDfhHmMopPrRswWX")) != EOF) { switch (c) { +#ifdef MADV_COLLAPSE + case 'c': /* collapse to thp */ + advise = MADV_COLLAPSE; + break; +#endif case 'd': /* Don't need these pages */ advise = MADV_DONTNEED; break; +#ifdef MADV_COLD + case 'D': /* make more likely to be reclaimed */ + advise = MADV_COLD; + break; +#endif + case 'f': /* page range out of memory */ + advise = MADV_FREE; + break; + case 'h': /* enable thp memory */ + advise = MADV_HUGEPAGE; + break; + case 'H': /* disable thp memory */ + advise = MADV_NOHUGEPAGE; + break; + case 'm': /* enable merging */ + advise = MADV_MERGEABLE; + break; + case 'M': /* disable merging */ + advise = MADV_UNMERGEABLE; + break; + case 'o': /* offline */ + advise = MADV_SOFT_OFFLINE; + break; + case 'p': /* punch hole */ + advise = MADV_REMOVE; + break; + case 'P': /* poison */ + advise = MADV_HWPOISON; + break; case 'r': /* Expect random page references */ advise = MADV_RANDOM; break; +#ifdef MADV_POPULATE_READ + case 'R': /* fault in pages for read */ + advise = MADV_POPULATE_READ; + break; +#endif case 's': /* Expect sequential page references */ advise = MADV_SEQUENTIAL; break; case 'w': /* Will need these pages */ advise = MADV_WILLNEED; break; +#ifdef MADV_POPULATE_WRITE + case 'W': /* fault in pages for write */ + advise = MADV_POPULATE_WRITE; + break; +#endif +#ifdef MADV_PAGEOUT + case 'X': /* reclaim memory */ + advise = MADV_PAGEOUT; + break; +#endif default: exitcode = 1; return command_usage(&madvise_cmd);