From: "Darrick J. Wong" <djwong@kernel.org>
To: djwong@kernel.org, cem@kernel.org
Cc: Carlos Maiolino <cmaiolino@redhat.com>,
Carlos Maiolino <cmaiolino@redhat.com>,
linux-xfs@vger.kernel.org
Subject: [PATCH 090/111] libxfs: partition memfd files to avoid using too many fds
Date: Mon, 03 Jun 2024 12:15:31 -0700 [thread overview]
Message-ID: <171744040717.1443973.13501424159106507957.stgit@frogsfrogsfrogs> (raw)
In-Reply-To: <171744039240.1443973.5959953049110025783.stgit@frogsfrogsfrogs>
From: Darrick J. Wong <djwong@kernel.org>
In a few patchsets from now, we'll transition xfs_repair to use
memfd-backed rmap and rcbag btrees for storing repair data instead of
heap allocations. This allows repair to use libxfs code shared from the
online repair code, which reduces the size of the codebase. It also
reduces heap fragmentation, which might be critical on 32-bit systems.
However, there's one hitch -- userspace xfiles naively allocate one
memfd per data structure, but there's only so many file descriptors that
a process can open. If a filesystem has a lot of allocation groups, we
can run out of fds and fail. xfs_repair already tries to increase
RLIMIT_NOFILE to the maximum (~1M) but this can fail due to system or
memory constraints.
Fortunately, it is possible to compute the upper bound of a memfd btree,
which implies that we can store multiple btrees per memfd. Make it so
that we can partition a memfd file to avoid running out of file
descriptors.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
---
libxfs/xfile.c | 197 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
libxfs/xfile.h | 17 ++++-
2 files changed, 205 insertions(+), 9 deletions(-)
diff --git a/libxfs/xfile.c b/libxfs/xfile.c
index cba173cc1..fdb76f406 100644
--- a/libxfs/xfile.c
+++ b/libxfs/xfile.c
@@ -97,6 +97,149 @@ xfile_create_fd(
return fd;
}
+static LIST_HEAD(fcb_list);
+static pthread_mutex_t fcb_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/* Create a new memfd. */
+static inline int
+xfile_fcb_create(
+ const char *description,
+ struct xfile_fcb **fcbp)
+{
+ struct xfile_fcb *fcb;
+ int fd;
+
+ fd = xfile_create_fd(description);
+ if (fd < 0)
+ return -errno;
+
+ fcb = malloc(sizeof(struct xfile_fcb));
+ if (!fcb) {
+ close(fd);
+ return -ENOMEM;
+ }
+
+ list_head_init(&fcb->fcb_list);
+ fcb->fd = fd;
+ fcb->refcount = 1;
+
+ *fcbp = fcb;
+ return 0;
+}
+
+/* Release an xfile control block */
+static void
+xfile_fcb_irele(
+ struct xfile_fcb *fcb,
+ loff_t pos,
+ uint64_t len)
+{
+ /*
+ * If this memfd is linked only to itself, it's private, so we can
+ * close it without taking any locks.
+ */
+ if (list_empty(&fcb->fcb_list)) {
+ close(fcb->fd);
+ free(fcb);
+ return;
+ }
+
+ pthread_mutex_lock(&fcb_mutex);
+ if (--fcb->refcount == 0) {
+ /* If we're the last user of this memfd file, kill it fast. */
+ list_del(&fcb->fcb_list);
+ close(fcb->fd);
+ free(fcb);
+ } else if (len > 0) {
+ struct stat statbuf;
+ int ret;
+
+ /*
+ * If we were using the end of a partitioned file, free the
+ * address space. IOWs, bonus points if you delete these in
+ * reverse-order of creation.
+ */
+ ret = fstat(fcb->fd, &statbuf);
+ if (!ret && statbuf.st_size == pos + len) {
+ ret = ftruncate(fcb->fd, pos);
+ }
+ }
+ pthread_mutex_unlock(&fcb_mutex);
+}
+
+/*
+ * Find an memfd that can accomodate the given amount of address space.
+ */
+static int
+xfile_fcb_find(
+ const char *description,
+ uint64_t maxbytes,
+ loff_t *posp,
+ struct xfile_fcb **fcbp)
+{
+ struct xfile_fcb *fcb;
+ int ret;
+ int error;
+
+ /* No maximum range means that the caller gets a private memfd. */
+ if (maxbytes == 0) {
+ *posp = 0;
+ return xfile_fcb_create(description, fcbp);
+ }
+
+ /* round up to page granularity so we can do mmap */
+ maxbytes = roundup_64(maxbytes, PAGE_SIZE);
+
+ pthread_mutex_lock(&fcb_mutex);
+
+ /*
+ * If we only need a certain number of byte range, look for one with
+ * available file range.
+ */
+ list_for_each_entry(fcb, &fcb_list, fcb_list) {
+ struct stat statbuf;
+ loff_t pos;
+
+ ret = fstat(fcb->fd, &statbuf);
+ if (ret)
+ continue;
+ pos = roundup_64(statbuf.st_size, PAGE_SIZE);
+
+ /*
+ * Truncate up to ensure that the memfd can actually handle
+ * writes to the end of the range.
+ */
+ ret = ftruncate(fcb->fd, pos + maxbytes);
+ if (ret)
+ continue;
+
+ fcb->refcount++;
+ *posp = pos;
+ *fcbp = fcb;
+ goto out_unlock;
+ }
+
+ /* Otherwise, open a new memfd and add it to our list. */
+ error = xfile_fcb_create(description, &fcb);
+ if (error)
+ return error;
+
+ ret = ftruncate(fcb->fd, maxbytes);
+ if (ret) {
+ error = -errno;
+ xfile_fcb_irele(fcb, 0, maxbytes);
+ return error;
+ }
+
+ list_add_tail(&fcb->fcb_list, &fcb_list);
+ *posp = 0;
+ *fcbp = fcb;
+
+out_unlock:
+ pthread_mutex_unlock(&fcb_mutex);
+ return error;
+}
+
/*
* Create an xfile of the given size. The description will be used in the
* trace output.
@@ -104,6 +247,7 @@ xfile_create_fd(
int
xfile_create(
const char *description,
+ unsigned long long maxbytes,
struct xfile **xfilep)
{
struct xfile *xf;
@@ -113,13 +257,14 @@ xfile_create(
if (!xf)
return -ENOMEM;
- xf->fd = xfile_create_fd(description);
- if (xf->fd < 0) {
- error = -errno;
+ error = xfile_fcb_find(description, maxbytes, &xf->partition_pos,
+ &xf->fcb);
+ if (error) {
kfree(xf);
return error;
}
+ xf->maxbytes = maxbytes;
*xfilep = xf;
return 0;
}
@@ -129,7 +274,7 @@ void
xfile_destroy(
struct xfile *xf)
{
- close(xf->fd);
+ xfile_fcb_irele(xf->fcb, xf->partition_pos, xf->maxbytes);
kfree(xf);
}
@@ -137,6 +282,9 @@ static inline loff_t
xfile_maxbytes(
struct xfile *xf)
{
+ if (xf->maxbytes > 0)
+ return xf->maxbytes;
+
if (sizeof(loff_t) == 8)
return LLONG_MAX;
return LONG_MAX;
@@ -160,7 +308,7 @@ xfile_load(
if (xfile_maxbytes(xf) - pos < count)
return -ENOMEM;
- ret = pread(xf->fd, buf, count, pos);
+ ret = pread(xf->fcb->fd, buf, count, pos + xf->partition_pos);
if (ret < 0)
return -errno;
if (ret != count)
@@ -186,7 +334,7 @@ xfile_store(
if (xfile_maxbytes(xf) - pos < count)
return -EFBIG;
- ret = pwrite(xf->fd, buf, count, pos);
+ ret = pwrite(xf->fcb->fd, buf, count, pos + xf->partition_pos);
if (ret < 0)
return -errno;
if (ret != count)
@@ -194,6 +342,38 @@ xfile_store(
return 0;
}
+/* Compute the number of bytes used by a partitioned xfile. */
+static unsigned long long
+xfile_partition_bytes(
+ struct xfile *xf)
+{
+ loff_t data_pos = xf->partition_pos;
+ loff_t stop_pos = data_pos + xf->maxbytes;
+ loff_t hole_pos;
+ unsigned long long bytes = 0;
+
+ data_pos = lseek(xf->fcb->fd, data_pos, SEEK_DATA);
+ while (data_pos >= 0 && data_pos < stop_pos) {
+ hole_pos = lseek(xf->fcb->fd, data_pos, SEEK_HOLE);
+ if (hole_pos < 0) {
+ /* save error, break */
+ data_pos = hole_pos;
+ break;
+ }
+ if (hole_pos >= stop_pos) {
+ bytes += stop_pos - data_pos;
+ return bytes;
+ }
+ bytes += hole_pos - data_pos;
+
+ data_pos = lseek(xf->fcb->fd, hole_pos, SEEK_DATA);
+ }
+ if (data_pos < 0 && errno != ENXIO)
+ return xf->maxbytes;
+
+ return bytes;
+}
+
/* Compute the number of bytes used by a xfile. */
unsigned long long
xfile_bytes(
@@ -202,7 +382,10 @@ xfile_bytes(
struct stat statbuf;
int error;
- error = fstat(xf->fd, &statbuf);
+ if (xf->maxbytes > 0)
+ return xfile_partition_bytes(xf);
+
+ error = fstat(xf->fcb->fd, &statbuf);
if (error)
return -errno;
diff --git a/libxfs/xfile.h b/libxfs/xfile.h
index d60084011..180a42bbb 100644
--- a/libxfs/xfile.h
+++ b/libxfs/xfile.h
@@ -6,11 +6,24 @@
#ifndef __LIBXFS_XFILE_H__
#define __LIBXFS_XFILE_H__
-struct xfile {
+struct xfile_fcb {
+ struct list_head fcb_list;
int fd;
+ unsigned int refcount;
};
-int xfile_create(const char *description, struct xfile **xfilep);
+struct xfile {
+ struct xfile_fcb *fcb;
+
+ /* File position within fcb->fd where this partition starts */
+ loff_t partition_pos;
+
+ /* Maximum number of bytes that can be written to the partition. */
+ uint64_t maxbytes;
+};
+
+int xfile_create(const char *description, unsigned long long maxbytes,
+ struct xfile **xfilep);
void xfile_destroy(struct xfile *xf);
ssize_t xfile_load(struct xfile *xf, void *buf, size_t count, loff_t pos);
next prev parent reply other threads:[~2024-06-03 19:15 UTC|newest]
Thread overview: 160+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-03 18:45 [PATCHBOMB] xfsprogs: catch us up to 6.9 (final) Darrick J. Wong
2024-06-03 18:48 ` [PATCHSET v30.5 01/10] libxfs: prepare to sync with 6.9 Darrick J. Wong
2024-06-03 18:51 ` [PATCH 1/3] libxfs: actually set m_fsname Darrick J. Wong
2024-06-03 18:51 ` [PATCH 2/3] libxfs: clean up xfs_da_unmount usage Darrick J. Wong
2024-06-03 18:52 ` [PATCH 3/3] libfrog: create a new scrub group for things requiring full inode scans Darrick J. Wong
2024-06-03 18:49 ` [PATCHSET v30.5 02/10] libxfs: sync with 6.9 Darrick J. Wong
2024-06-03 18:52 ` [PATCH 001/111] xfs: convert kmem_zalloc() to kzalloc() Darrick J. Wong
2024-06-03 18:52 ` [PATCH 002/111] xfs: convert kmem_alloc() to kmalloc() Darrick J. Wong
2024-06-03 18:52 ` [PATCH 003/111] xfs: convert remaining kmem_free() to kfree() Darrick J. Wong
2024-06-03 18:53 ` [PATCH 004/111] xfs: use __GFP_NOLOCKDEP instead of GFP_NOFS Darrick J. Wong
2024-06-03 18:53 ` [PATCH 005/111] xfs: use GFP_KERNEL in pure transaction contexts Darrick J. Wong
2024-06-03 18:53 ` [PATCH 006/111] xfs: clean up remaining GFP_NOFS users Darrick J. Wong
2024-06-03 18:53 ` [PATCH 007/111] xfs: use xfs_defer_alloc a bit more Darrick J. Wong
2024-06-03 18:54 ` [PATCH 008/111] xfs: Replace xfs_isilocked with xfs_assert_ilocked Darrick J. Wong
2024-06-03 18:54 ` [PATCH 009/111] xfs: create a static name for the dot entry too Darrick J. Wong
2024-06-03 18:54 ` [PATCH 010/111] xfs: create a predicate to determine if two xfs_names are the same Darrick J. Wong
2024-06-03 18:54 ` [PATCH 011/111] xfs: create a macro for decoding ftypes in tracepoints Darrick J. Wong
2024-06-03 18:55 ` [PATCH 012/111] xfs: report the health of quota counts Darrick J. Wong
2024-06-03 18:55 ` [PATCH 013/111] xfs: implement live quotacheck inode scan Darrick J. Wong
2024-06-03 18:55 ` [PATCH 014/111] xfs: report health of inode link counts Darrick J. Wong
2024-06-03 18:55 ` [PATCH 015/111] xfs: teach scrub to check file nlinks Darrick J. Wong
2024-06-03 18:56 ` [PATCH 016/111] xfs: separate the marking of sick and checked metadata Darrick J. Wong
2024-06-03 18:56 ` [PATCH 017/111] xfs: report fs corruption errors to the health tracking system Darrick J. Wong
2024-06-03 18:56 ` [PATCH 018/111] xfs: report ag header " Darrick J. Wong
2024-06-03 18:57 ` [PATCH 019/111] xfs: report block map " Darrick J. Wong
2024-06-03 18:57 ` [PATCH 020/111] xfs: report btree block corruption errors to the health system Darrick J. Wong
2024-06-03 18:57 ` [PATCH 021/111] xfs: report dir/attr " Darrick J. Wong
2024-06-03 18:57 ` [PATCH 022/111] xfs: report inode " Darrick J. Wong
2024-06-03 18:58 ` [PATCH 023/111] xfs: report realtime metadata " Darrick J. Wong
2024-06-03 18:58 ` [PATCH 024/111] xfs: report XFS_IS_CORRUPT " Darrick J. Wong
2024-06-03 18:58 ` [PATCH 025/111] xfs: add secondary and indirect classes to the health tracking system Darrick J. Wong
2024-06-03 18:58 ` [PATCH 026/111] xfs: remember sick inodes that get inactivated Darrick J. Wong
2024-06-03 18:59 ` [PATCH 027/111] xfs: update health status if we get a clean bill of health Darrick J. Wong
2024-06-03 18:59 ` [PATCH 028/111] xfs: consolidate btree block freeing tracepoints Darrick J. Wong
2024-06-03 18:59 ` [PATCH 029/111] xfs: consolidate btree block allocation tracepoints Darrick J. Wong
2024-06-03 18:59 ` [PATCH 030/111] xfs: set the btree cursor bc_ops in xfs_btree_alloc_cursor Darrick J. Wong
2024-06-03 19:00 ` [PATCH 031/111] xfs: drop XFS_BTREE_CRC_BLOCKS Darrick J. Wong
2024-06-03 19:00 ` [PATCH 032/111] xfs: encode the btree geometry flags in the btree ops structure Darrick J. Wong
2024-06-03 19:00 ` [PATCH 033/111] xfs: remove bc_ino.flags Darrick J. Wong
2024-06-03 19:00 ` [PATCH 034/111] xfs: consolidate the xfs_alloc_lookup_* helpers Darrick J. Wong
2024-06-03 19:01 ` [PATCH 035/111] xfs: turn the allocbt cursor active field into a btree flag Darrick J. Wong
2024-06-03 19:01 ` [PATCH 036/111] xfs: extern some btree ops structures Darrick J. Wong
2024-06-03 19:01 ` [PATCH 037/111] xfs: initialize btree blocks using btree_ops structure Darrick J. Wong
2024-06-03 19:01 ` [PATCH 038/111] xfs: rename btree block/buffer init functions Darrick J. Wong
2024-06-03 19:02 ` [PATCH 039/111] xfs: btree convert xfs_btree_init_block to xfs_btree_init_buf calls Darrick J. Wong
2024-06-03 19:02 ` [PATCH 040/111] xfs: remove the unnecessary daddr paramter to _init_block Darrick J. Wong
2024-06-03 19:02 ` [PATCH 041/111] xfs: set btree block buffer ops in _init_buf Darrick J. Wong
2024-06-03 19:03 ` [PATCH 042/111] xfs: move lru refs to the btree ops structure Darrick J. Wong
2024-06-03 19:03 ` [PATCH 043/111] xfs: move the btree stats offset into struct btree_ops Darrick J. Wong
2024-06-03 19:03 ` [PATCH 044/111] xfs: factor out a xfs_btree_owner helper Darrick J. Wong
2024-06-03 19:03 ` [PATCH 045/111] xfs: factor out a btree block owner check Darrick J. Wong
2024-06-03 19:04 ` [PATCH 046/111] xfs: store the btree pointer length in struct xfs_btree_ops Darrick J. Wong
2024-06-03 19:04 ` [PATCH 047/111] xfs: split out a btree type from the btree ops geometry flags Darrick J. Wong
2024-06-03 19:04 ` [PATCH 048/111] xfs: split the per-btree union in struct xfs_btree_cur Darrick J. Wong
2024-06-03 19:04 ` [PATCH 049/111] xfs: create predicate to determine if cursor is at inode root level Darrick J. Wong
2024-06-03 19:05 ` [PATCH 050/111] xfs: move comment about two 2 keys per pointer in the rmap btree Darrick J. Wong
2024-06-03 19:05 ` [PATCH 051/111] xfs: add a xfs_btree_init_ptr_from_cur Darrick J. Wong
2024-06-03 19:05 ` [PATCH 052/111] xfs: don't override bc_ops for staging btrees Darrick J. Wong
2024-06-03 19:05 ` [PATCH 053/111] xfs: fold xfs_allocbt_init_common into xfs_allocbt_init_cursor Darrick J. Wong
2024-06-03 19:06 ` [PATCH 054/111] xfs: remove xfs_allocbt_stage_cursor Darrick J. Wong
2024-06-03 19:06 ` [PATCH 055/111] xfs: fold xfs_inobt_init_common into xfs_inobt_init_cursor Darrick J. Wong
2024-06-03 19:06 ` [PATCH 056/111] xfs: remove xfs_inobt_stage_cursor Darrick J. Wong
2024-06-03 19:06 ` [PATCH 057/111] xfs: fold xfs_refcountbt_init_common into xfs_refcountbt_init_cursor Darrick J. Wong
2024-06-03 19:07 ` [PATCH 058/111] xfs: remove xfs_refcountbt_stage_cursor Darrick J. Wong
2024-06-03 19:07 ` [PATCH 059/111] xfs: fold xfs_rmapbt_init_common into xfs_rmapbt_init_cursor Darrick J. Wong
2024-06-03 19:07 ` [PATCH 060/111] xfs: remove xfs_rmapbt_stage_cursor Darrick J. Wong
2024-06-03 19:07 ` [PATCH 061/111] xfs: make full use of xfs_btree_stage_ifakeroot in xfs_bmbt_stage_cursor Darrick J. Wong
2024-06-03 19:08 ` [PATCH 062/111] xfs: make staging file forks explicit Darrick J. Wong
2024-06-03 19:08 ` [PATCH 063/111] xfs: fold xfs_bmbt_init_common into xfs_bmbt_init_cursor Darrick J. Wong
2024-06-03 19:08 ` [PATCH 064/111] xfs: remove xfs_bmbt_stage_cursor Darrick J. Wong
2024-06-03 19:09 ` [PATCH 065/111] xfs: split the agf_roots and agf_levels arrays Darrick J. Wong
2024-06-03 19:09 ` [PATCH 066/111] xfs: add a name field to struct xfs_btree_ops Darrick J. Wong
2024-06-03 19:09 ` [PATCH 067/111] xfs: add a sick_mask " Darrick J. Wong
2024-06-03 19:09 ` [PATCH 068/111] xfs: split xfs_allocbt_init_cursor Darrick J. Wong
2024-06-03 19:10 ` [PATCH 069/111] xfs: remove xfs_inobt_cur Darrick J. Wong
2024-06-03 19:10 ` [PATCH 070/111] xfs: remove the btnum argument to xfs_inobt_count_blocks Darrick J. Wong
2024-06-03 19:10 ` [PATCH 071/111] xfs: split xfs_inobt_insert_sprec Darrick J. Wong
2024-06-03 19:10 ` [PATCH 072/111] xfs: split xfs_inobt_init_cursor Darrick J. Wong
2024-06-03 19:11 ` [PATCH 073/111] xfs: pass a 'bool is_finobt' to xfs_inobt_insert Darrick J. Wong
2024-06-03 19:11 ` [PATCH 074/111] xfs: remove xfs_btnum_t Darrick J. Wong
2024-06-03 19:11 ` [PATCH 075/111] xfs: simplify xfs_btree_check_sblock_siblings Darrick J. Wong
2024-06-03 19:11 ` [PATCH 076/111] xfs: simplify xfs_btree_check_lblock_siblings Darrick J. Wong
2024-06-03 19:12 ` [PATCH 077/111] xfs: open code xfs_btree_check_lptr in xfs_bmap_btree_to_extents Darrick J. Wong
2024-06-03 19:12 ` [PATCH 078/111] xfs: consolidate btree ptr checking Darrick J. Wong
2024-06-03 19:12 ` [PATCH 079/111] xfs: misc cleanups for __xfs_btree_check_sblock Darrick J. Wong
2024-06-03 19:12 ` [PATCH 080/111] xfs: remove the crc variable in __xfs_btree_check_lblock Darrick J. Wong
2024-06-03 19:13 ` [PATCH 081/111] xfs: tighten up validation of root block in inode forks Darrick J. Wong
2024-06-03 19:13 ` [PATCH 082/111] xfs: consolidate btree block verification Darrick J. Wong
2024-06-03 19:13 ` [PATCH 083/111] xfs: rename btree helpers that depends on the block number representation Darrick J. Wong
2024-06-03 19:13 ` [PATCH 084/111] xfs: factor out a __xfs_btree_check_lblock_hdr helper Darrick J. Wong
2024-06-03 19:14 ` [PATCH 085/111] xfs: remove xfs_btree_reada_bufl Darrick J. Wong
2024-06-03 19:14 ` [PATCH 086/111] xfs: remove xfs_btree_reada_bufs Darrick J. Wong
2024-06-03 19:14 ` [PATCH 087/111] xfs: move and rename xfs_btree_read_bufl Darrick J. Wong
2024-06-03 19:14 ` [PATCH 088/111] libxfs: teach buftargs to maintain their own buffer hashtable Darrick J. Wong
2024-06-03 19:15 ` [PATCH 089/111] libxfs: add xfile support Darrick J. Wong
2024-06-03 19:15 ` Darrick J. Wong [this message]
2024-06-03 19:15 ` [PATCH 091/111] xfs: teach buftargs to maintain their own buffer hashtable Darrick J. Wong
2024-06-03 19:16 ` [PATCH 092/111] libxfs: support in-memory buffer cache targets Darrick J. Wong
2024-06-03 19:16 ` [PATCH 093/111] xfs: add a xfs_btree_ptrs_equal helper Darrick J. Wong
2024-06-03 19:16 ` [PATCH 094/111] xfs: support in-memory btrees Darrick J. Wong
2024-06-03 19:16 ` [PATCH 095/111] xfs: launder in-memory btree buffers before transaction commit Darrick J. Wong
2024-06-03 19:17 ` [PATCH 096/111] xfs: create a helper to decide if a file mapping targets the rt volume Darrick J. Wong
2024-06-03 19:17 ` [PATCH 097/111] xfs: repair the rmapbt Darrick J. Wong
2024-06-03 19:17 ` [PATCH 098/111] xfs: create a shadow rmap btree during rmap repair Darrick J. Wong
2024-06-03 19:17 ` [PATCH 099/111] xfs: hook live rmap operations during a repair operation Darrick J. Wong
2024-06-03 19:18 ` [PATCH 100/111] xfs: clean up bmap log intent item tracepoint callsites Darrick J. Wong
2024-06-03 19:18 ` [PATCH 101/111] xfs: move xfs_bmap_defer_add to xfs_bmap_item.c Darrick J. Wong
2024-06-03 19:18 ` [PATCH 102/111] xfs: fix xfs_bunmapi to allow unmapping of partial rt extents Darrick J. Wong
2024-06-03 19:18 ` [PATCH 103/111] xfs: add a realtime flag to the bmap update log redo items Darrick J. Wong
2024-06-03 19:19 ` [PATCH 104/111] xfs: support deferred bmap updates on the attr fork Darrick J. Wong
2024-06-03 19:19 ` [PATCH 105/111] xfs: xfs_bmap_finish_one should map unwritten extents properly Darrick J. Wong
2024-06-03 19:19 ` [PATCH 106/111] xfs: move xfs_symlink_remote.c declarations to xfs_symlink_remote.h Darrick J. Wong
2024-06-03 19:19 ` [PATCH 107/111] xfs: move remote symlink target read function to libxfs Darrick J. Wong
2024-06-03 19:20 ` [PATCH 108/111] xfs: move symlink target write " Darrick J. Wong
2024-06-03 19:20 ` [PATCH 109/111] xfs: xfs_btree_bload_prep_block() should use __GFP_NOFAIL Darrick J. Wong
2024-06-03 19:20 ` [PATCH 110/111] xfs: shrink failure needs to hold AGI buffer Darrick J. Wong
2024-06-03 19:20 ` [PATCH 111/111] xfs: allow sunit mount option to repair bad primary sb stripe values Darrick J. Wong
2024-06-03 18:49 ` [PATCHSET v30.5 03/10] xfsprogs: bmap log intent cleanups Darrick J. Wong
2024-06-03 19:21 ` [PATCH 1/4] libxfs: remove kmem_alloc, kmem_zalloc, and kmem_free Darrick J. Wong
2024-06-03 19:21 ` [PATCH 2/4] libxfs: add a bi_entry helper Darrick J. Wong
2024-06-03 19:21 ` [PATCH 3/4] libxfs: reuse xfs_bmap_update_cancel_item Darrick J. Wong
2024-06-03 19:22 ` [PATCH 4/4] libxfs: add a xattr_entry helper Darrick J. Wong
2024-06-03 18:49 ` [PATCHSET v30.5 04/10] xfsprogs: widen BUI formats to support realtime Darrick J. Wong
2024-06-03 19:22 ` [PATCH 1/1] libxfs: add a realtime flag to the bmap update log redo items Darrick J. Wong
2024-06-03 18:49 ` [PATCHSET v30.5 05/10] xfs_spaceman: updates for 6.9 Darrick J. Wong
2024-06-03 19:22 ` [PATCH 1/2] xfs_spaceman: report the health of quota counts Darrick J. Wong
2024-06-03 19:22 ` [PATCH 2/2] xfs_spaceman: report health of inode link counts Darrick J. Wong
2024-06-03 18:50 ` [PATCHSET v30.5 06/10] xfs_scrub: updates for 6.9 Darrick J. Wong
2024-06-03 19:23 ` [PATCH 1/5] xfs_scrub: implement live quotacheck inode scan Darrick J. Wong
2024-06-03 19:23 ` [PATCH 2/5] xfs_scrub: check file link counts Darrick J. Wong
2024-06-03 19:23 ` [PATCH 3/5] xfs_scrub: update health status if we get a clean bill of health Darrick J. Wong
2024-06-03 19:23 ` [PATCH 4/5] xfs_scrub: use multiple threads to run in-kernel metadata scrubs that scan inodes Darrick J. Wong
2024-06-03 19:24 ` [PATCH 5/5] xfs_scrub: upload clean bills of health Darrick J. Wong
2024-06-03 18:50 ` [PATCHSET v30.5 07/10] xfs_repair: minor fixes Darrick J. Wong
2024-06-03 19:24 ` [PATCH 1/2] xfs_repair: log when buffers fail CRC checks even if we just recompute it Darrick J. Wong
2024-06-03 19:24 ` [PATCH 2/2] xfs_repair: check num before bplist[num] Darrick J. Wong
2024-06-03 18:50 ` [PATCHSET v30.5 08/10] xfs_repair: use in-memory rmap btrees Darrick J. Wong
2024-06-03 19:24 ` [PATCH 1/6] libxfs: provide a kernel-compatible kasprintf Darrick J. Wong
2024-06-03 19:25 ` [PATCH 2/6] xfs_repair: convert regular rmap repair to use in-memory btrees Darrick J. Wong
2024-06-03 19:25 ` [PATCH 3/6] xfs_repair: verify on-disk rmap btrees with in-memory btree data Darrick J. Wong
2024-06-03 19:25 ` [PATCH 4/6] xfs_repair: compute refcount data from in-memory rmap btrees Darrick J. Wong
2024-06-03 19:25 ` [PATCH 5/6] xfs_repair: reduce rmap bag memory usage when creating refcounts Darrick J. Wong
2024-06-03 19:26 ` [PATCH 6/6] xfs_repair: remove the old rmap collection slabs Darrick J. Wong
2024-06-03 18:51 ` [PATCHSET v30.5 09/10] xfs_repair: reduce refcount repair memory usage Darrick J. Wong
2024-06-03 19:26 ` [PATCH 1/4] xfs_repair: define an in-memory btree for storing refcount bag info Darrick J. Wong
2024-06-03 19:26 ` [PATCH 2/4] xfs_repair: create refcount bag Darrick J. Wong
2024-06-03 19:27 ` [PATCH 3/4] xfs_repair: port to the new refcount bag structure Darrick J. Wong
2024-06-03 19:27 ` [PATCH 4/4] xfs_repair: remove the old bag implementation Darrick J. Wong
2024-06-03 18:51 ` [PATCHSET v30.5 10/10] mkfs: cleanups for 6.9 Darrick J. Wong
2024-06-03 19:27 ` [PATCH 1/1] mkfs: use libxfs to create symlinks Darrick J. Wong
-- strict thread matches above, loose matches on Subject: below --
2024-05-22 2:45 [PATCHSET v30.4 02/10] libxfs: sync with 6.9 Darrick J. Wong
2024-05-22 3:12 ` [PATCH 090/111] libxfs: partition memfd files to avoid using too many fds Darrick J. Wong
2024-05-31 9:30 ` Carlos Maiolino
2024-05-31 14:54 ` Darrick J. Wong
2024-04-16 0:58 [PATCHSET 2/4] libxfs: sync with 6.9 Darrick J. Wong
2024-04-16 1:00 ` [PATCH 090/111] libxfs: partition memfd files to avoid using too many fds Darrick J. Wong
2024-04-16 4:55 ` Christoph Hellwig
2024-04-16 15:49 ` Darrick J. Wong
2024-04-16 16:29 ` Christoph Hellwig
2024-04-16 16:57 ` Darrick J. Wong
2024-04-16 18:47 ` Christoph Hellwig
2024-04-16 18:55 ` 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=171744040717.1443973.13501424159106507957.stgit@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=cem@kernel.org \
--cc=cmaiolino@redhat.com \
--cc=linux-xfs@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox