Whamcloud - gitweb
LU-11868 osd: Set max ea size to XATTR_SIZE_MAX 58/34058/16
authorPatrick Farrell <pfarrell@whamcloud.com>
Fri, 29 Mar 2019 19:00:15 +0000 (15:00 -0400)
committerOleg Drokin <green@whamcloud.com>
Tue, 30 Apr 2019 03:35:53 +0000 (03:35 +0000)
commit3ec712bd183a859a7bb09280b8a5a1776ec5e2c2
treed710dc3623a582e9f9f35800976e7125a0d47ace
parente0adb618a4b0d0182419a5731fe046e9157b9f51
LU-11868 osd: Set max ea size to XATTR_SIZE_MAX

Lustre currently limits EA size to either ~1 MiB (ldiskfs)
or 32K (ZFS).  VFS has its own limit, XATTR_SIZE_MAX,
which we must respect to interoperate correctly with
userspace tools like tar, getattr, and the getxattr()
syscall.

Set this as the new max EA size for both ldiskfs and ZFS.

(The current 32K on ZFS is too small for
LOV_MAX_STRIPE_COUNT [2000] files, so needs to be raised
regardless.)

In order to use this correctly, we have to use the real ea
size on the client.  The previous code for maximum ea size
on the client (KEY_MAX_EASIZE, llite.max_easize) used a
calculated value based on number of targets.

With one exception, the mdc code already uses the default
ea size rather than the max.  Default ea size adjusts
automatically to the largest size sent by the server.

The exception is the open code, which uses the max so it
never has to resend a layout request.  This patch changes
it to use default, which means that the first time a very
widely striped file is opened, the open will be resent.

Add limit checks on client & server so the xattr size limit
is honored.

Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I4da62691f30fa276d20959810116cf558cccc515
Reviewed-on: https://review.whamcloud.com/34058
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Alexandr Boyko <c17825@cray.com>
Reviewed-by: James Simmons <uja.ornl@yahoo.com>
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/include/obd.h
lustre/llite/llite_lib.c
lustre/lov/lov_obd.c
lustre/mdc/mdc_locks.c
lustre/mdt/mdt_lib.c
lustre/osd-ldiskfs/osd_handler.c
lustre/osd-zfs/osd_handler.c
lustre/osd-zfs/osd_xattr.c
lustre/tests/conf-sanity.sh
lustre/tests/sanity.sh
lustre/tests/test-framework.sh