Re: [PATCH v2 2/2] generic/486: adjust the max xattr size

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]




On 6/9/22 6:53 PM, Luís Henriques wrote:
CephFS doesn't have a maximum xattr size.  Instead, it imposes a maximum
size for the full set of xattrs names+values, which by default is 64K.
And since ceph reports 4M as the blocksize (the default ceph object size),
generic/486 will fail in this filesystem because it will end up using
XATTR_SIZE_MAX to set the size of the 2nd (big) xattr value.

The fix is to adjust the max size in attr_replace_test so that it takes
into account the initial xattr name and value lengths.

Signed-off-by: Luís Henriques <lhenriques@xxxxxxx>
---
  src/attr_replace_test.c | 7 ++++++-
  1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/attr_replace_test.c b/src/attr_replace_test.c
index cca8dcf8ff60..1c8d1049a1d8 100644
--- a/src/attr_replace_test.c
+++ b/src/attr_replace_test.c
@@ -29,6 +29,11 @@ int main(int argc, char *argv[])
  	char *value;
  	struct stat sbuf;
  	size_t size = sizeof(value);
+	/*
+	 * Take into account the initial (small) xattr name and value sizes and
+	 * subtract them from the XATTR_SIZE_MAX maximum.
+	 */
+	size_t maxsize = XATTR_SIZE_MAX - strlen(name) - 1;

Why not use the statfs to get the filesystem type first ? And then just minus the strlen(name) for ceph only ?


if (argc != 2)
  		fail("Usage: %s <file>\n", argv[0]);
@@ -46,7 +51,7 @@ int main(int argc, char *argv[])
  	size = sbuf.st_blksize * 3 / 4;
  	if (!size)
  		fail("Invalid st_blksize(%ld)\n", sbuf.st_blksize);
-	size = MIN(size, XATTR_SIZE_MAX);
+	size = MIN(size, maxsize);
  	value = malloc(size);
  	if (!value)
  		fail("Failed to allocate memory\n");





[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux