From: John Garry <john.g.garry@oracle.com>
To: brauner@kernel.org, djwong@kernel.org, cem@kernel.org,
dchinner@redhat.com, hch@lst.de, ritesh.list@gmail.com
Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-kernel@vger.kernel.org, martin.petersen@oracle.com,
John Garry <john.g.garry@oracle.com>
Subject: [PATCH v3 6/7] xfs: Add RT atomic write unit max to xfs_mount
Date: Thu, 2 Jan 2025 14:04:10 +0000 [thread overview]
Message-ID: <20250102140411.14617-7-john.g.garry@oracle.com> (raw)
In-Reply-To: <20250102140411.14617-1-john.g.garry@oracle.com>
rtvol guarantees alloc unit alignment through rt_extsize. As such, it is
possible to atomically write multiple FS blocks in a rtvol (up to
rt_extsize).
Add a member to xfs_mount to hold the pre-calculated atomic write unit max.
The value in rt_extsize is not necessarily a power-of-2, so find the
largest power-of-2 evenly divisible into rt_extsize.
Signed-off-by: John Garry <john.g.garry@oracle.com>
---
fs/xfs/libxfs/xfs_sb.c | 3 +++
fs/xfs/xfs_mount.h | 1 +
fs/xfs/xfs_rtalloc.c | 23 +++++++++++++++++++++++
fs/xfs/xfs_rtalloc.h | 4 ++++
4 files changed, 31 insertions(+)
diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
index 3b5623611eba..6381060df901 100644
--- a/fs/xfs/libxfs/xfs_sb.c
+++ b/fs/xfs/libxfs/xfs_sb.c
@@ -25,6 +25,7 @@
#include "xfs_da_format.h"
#include "xfs_health.h"
#include "xfs_ag.h"
+#include "xfs_rtalloc.h"
#include "xfs_rtbitmap.h"
#include "xfs_exchrange.h"
#include "xfs_rtgroup.h"
@@ -1149,6 +1150,8 @@ xfs_sb_mount_rextsize(
rgs->blklog = 0;
rgs->blkmask = (uint64_t)-1;
}
+
+ xfs_rt_awu_update(mp);
}
/* Update incore sb rt extent size, then recompute the cached rt geometry. */
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
index db9dade7d22a..f2f1d2c667cc 100644
--- a/fs/xfs/xfs_mount.h
+++ b/fs/xfs/xfs_mount.h
@@ -191,6 +191,7 @@ typedef struct xfs_mount {
bool m_fail_unmount;
bool m_finobt_nores; /* no per-AG finobt resv. */
bool m_update_sb; /* sb needs update in mount */
+ xfs_extlen_t m_rt_awu_max; /* rt atomic write unit max */
/*
* Bitsets of per-fs metadata that have been checked and/or are sick.
diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c
index fcfa6e0eb3ad..e3093f3c7670 100644
--- a/fs/xfs/xfs_rtalloc.c
+++ b/fs/xfs/xfs_rtalloc.c
@@ -735,6 +735,28 @@ xfs_rtginode_ensure(
return xfs_rtginode_create(rtg, type, true);
}
+void
+xfs_rt_awu_update(
+ struct xfs_mount *mp)
+{
+ xfs_agblock_t rsize = mp->m_sb.sb_rextsize;
+ xfs_extlen_t awu_max;
+
+ if (is_power_of_2(rsize)) {
+ mp->m_rt_awu_max = rsize;
+ return;
+ }
+
+ /* Find highest power-of-2 evenly divisible into sb_rextsize */
+ awu_max = 1;
+ while (1) {
+ if (rsize % (awu_max * 2))
+ break;
+ awu_max *= 2;
+ }
+ mp->m_rt_awu_max = awu_max;
+}
+
static struct xfs_mount *
xfs_growfs_rt_alloc_fake_mount(
const struct xfs_mount *mp,
@@ -969,6 +991,7 @@ xfs_growfs_rt_bmblock(
*/
mp->m_rsumlevels = nmp->m_rsumlevels;
mp->m_rsumblocks = nmp->m_rsumblocks;
+ mp->m_rt_awu_max = nmp->m_rt_awu_max;
/*
* Recompute the growfsrt reservation from the new rsumsize.
diff --git a/fs/xfs/xfs_rtalloc.h b/fs/xfs/xfs_rtalloc.h
index 8e2a07b8174b..fcb7bb3df470 100644
--- a/fs/xfs/xfs_rtalloc.h
+++ b/fs/xfs/xfs_rtalloc.h
@@ -42,6 +42,10 @@ xfs_growfs_rt(
struct xfs_mount *mp, /* file system mount structure */
xfs_growfs_rt_t *in); /* user supplied growfs struct */
+void
+xfs_rt_awu_update(
+ struct xfs_mount *mp);
+
int xfs_rtalloc_reinit_frextents(struct xfs_mount *mp);
#else
# define xfs_growfs_rt(mp,in) (-ENOSYS)
--
2.31.1
next prev parent reply other threads:[~2025-01-02 14:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-02 14:04 [PATCH v3 0/7] large atomic writes for xfs John Garry
2025-01-02 14:04 ` [PATCH v3 1/7] iomap: Increase iomap_dio_zero() size limit John Garry
2025-01-02 14:04 ` [PATCH v3 2/7] iomap: Add zero unwritten mappings dio support John Garry
2025-01-02 14:04 ` [PATCH v3 3/7] iomap: Lift blocksize restriction on atomic writes John Garry
2025-01-08 0:41 ` Darrick J. Wong
2025-01-02 14:04 ` [PATCH v3 4/7] xfs: Add extent zeroing support for " John Garry
2025-01-02 14:04 ` [PATCH v3 5/7] xfs: Switch atomic write size check in xfs_file_write_iter() John Garry
2025-01-08 0:50 ` Darrick J. Wong
2025-01-02 14:04 ` John Garry [this message]
2025-01-08 0:55 ` [PATCH v3 6/7] xfs: Add RT atomic write unit max to xfs_mount Darrick J. Wong
2025-01-02 14:04 ` [PATCH v3 7/7] xfs: Update xfs_get_atomic_write_attr() for large atomic writes John Garry
2025-01-08 0:56 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250102140411.14617-7-john.g.garry@oracle.com \
--to=john.g.garry@oracle.com \
--cc=brauner@kernel.org \
--cc=cem@kernel.org \
--cc=dchinner@redhat.com \
--cc=djwong@kernel.org \
--cc=hch@lst.de \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=ritesh.list@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.