On Tue, Feb 21, 2023 at 11:22:02AM -0800, Darrick J. Wong wrote: > On Sat, Feb 18, 2023 at 02:04:36PM +0800, Zorro Lang wrote: > > On Fri, Feb 17, 2023 at 09:09:11AM -0800, Darrick J. Wong wrote: > > > On Fri, Feb 17, 2023 at 08:45:58PM +0800, xiubli@xxxxxxxxxx wrote: > > > > From: Xiubo Li <xiubli@xxxxxxxxxx> > > > > > > > > If the CONFIG_CEPH_FS_SECURITY_LABEL is enabled the kernel ceph > > > > itself will set the security.selinux extended attribute to MDS. > > > > And it will also eat some space of the total size. > > > > > > > > Fixes: https://tracker.ceph.com/issues/58742 > > > > Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx> > > > > --- > > > > tests/generic/020 | 6 ++++-- > > > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/tests/generic/020 b/tests/generic/020 > > > > index be5cecad..594535b5 100755 > > > > --- a/tests/generic/020 > > > > +++ b/tests/generic/020 > > > > @@ -150,9 +150,11 @@ _attr_get_maxval_size() > > > > # it imposes a maximum size for the full set of xattrs > > > > # names+values, which by default is 64K. Compute the maximum > > > > # taking into account the already existing attributes > > > > - max_attrval_size=$(getfattr --dump -e hex $filename 2>/dev/null | \ > > > > + size=$(getfattr --dump -e hex $filename 2>/dev/null | \ > > > > awk -F "=0x" '/^user/ {len += length($1) + length($2) / 2} END {print len}') > > > > - max_attrval_size=$((65536 - $max_attrval_size - $max_attrval_namelen)) > > > > + selinux_size=$(getfattr -n 'security.selinux' --dump -e hex $filename 2>/dev/null | \ > > > > + awk -F "=0x" '/^security/ {len += length($1) + length($2) / 2} END {print len}') > > > > + max_attrval_size=$((65536 - $size - $selinux_size - $max_attrval_namelen)) The max_attrval_size isn't a local variable, due to we need it to be global. But the "size" and "selinux_size" look like not global variable, so better to be *local*. > > > > > > If this is a ceph bug, then why is the change being applied to the > > > section for FSTYP=ext* ? Why not create a case statement for ceph? > > > > Hi Darrick, > > > > Looks like this change is in ceph section [1], did you hit any errors when > > you merge it? > > ahahaa, diff tried to merge that hunk into _attr_get_max and not > _attr_get_maxval_size, and I didn't notice. Question withdrawn > with apologies. :/ Never mind. If there's not objection from you or ceph list, I'll merge this patch after it changes as above :) Thanks, Zorro > > --D > > > Thanks, > > Zorro > > > > [1] > > _attr_get_maxval_size() > > { > > local max_attrval_namelen="$1" > > local filename="$2" > > > > # Set max attr value size in bytes based on fs type > > case "$FSTYP" in > > ... > > ... > > ceph) > > # CephFS does not have a maximum value for attributes. Instead, > > # it imposes a maximum size for the full set of xattrs > > # names+values, which by default is 64K. Compute the maximum > > # taking into account the already existing attributes > > ====> max_attrval_size=$(getfattr --dump -e hex $filename 2>/dev/null | \ > > awk -F "=0x" '/^user/ {len += length($1) + length($2) / 2} END {print len}') > > ====> max_attrval_size=$((65536 - $max_attrval_size - $max_attrval_namelen)) > > > > > > > > > > > > --D > > > > > > > ;; > > > > *) > > > > # Assume max ~1 block of attrs > > > > -- > > > > 2.31.1 > > > > > > > >