Whamcloud - gitweb
LU-10070 lod: SEL: Implement basic spillover space 83/33783/24
authorPatrick Farrell <paf@cray.com>
Mon, 3 Jun 2019 16:24:29 +0000 (19:24 +0300)
committerOleg Drokin <green@whamcloud.com>
Fri, 12 Jul 2019 05:21:02 +0000 (05:21 +0000)
commitff5eb304fa371d879da38621fac3aec7d4548a5e
treef83b3f4b97e511e81383a399d64c309ec92238e1
parentfed241911f61b1d76aa7d80bfd370c822a3926ef
LU-10070 lod: SEL: Implement basic spillover space

This is a barebones implementation of spillover space.
This allows the creation of extendable layout components,
which are normal layout components followed by "extension
components".  These extension components are never
initialized, instead, when i/o reaches them, the server
checks if there is sufficient space on the preceding normal
layout component, and if so, it modifies the extent of the
component to give space to the preceding component.

If there is not sufficient space on those OSTs, the special
extension space component can be removed, and the next
component of the layout is moved down to meet the existing
component.  This allows i/o to "spill over" to this new
layout component, which is expected to be on different
OSTs.

For multi-tiered systems, this makes it possible to avoid
the situation where an inner tier is low on space, but a
an outer tier has plenty, and PFL files cannot use the
space in the outer tier because the inner is full.

This patch requires the next patch in the series for FLR
support, but does not depend on the other subsequent
patches in this series.

Cray-bug-id: LUS-2528
Signed-off-by: Patrick Farrell <paf@cray.com>
Change-Id: I8f6c6df8ee155033d5278535dc456e604552e409
Reviewed-on: https://review.whamcloud.com/33783
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Alexey Lyashkov <c17817@cray.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
26 files changed:
lustre/doc/lfs-setstripe.1
lustre/doc/llapi_layout_extension_size_get.3
lustre/include/dt_object.h
lustre/include/uapi/linux/lustre/lustre_user.h
lustre/lod/lod_dev.c
lustre/lod/lod_internal.h
lustre/lod/lod_lov.c
lustre/lod/lod_object.c
lustre/lod/lod_qos.c
lustre/lod/lproc_lod.c
lustre/mdd/mdd_device.c
lustre/mdt/mdt_handler.c
lustre/obdclass/dt_object.c
lustre/obdclass/llog_cat.c
lustre/obdclass/obd_mount_server.c
lustre/ofd/ofd_obd.c
lustre/osd-ldiskfs/osd_handler.c
lustre/osd-ldiskfs/osd_internal.h
lustre/osd-zfs/osd_handler.c
lustre/osd-zfs/osd_internal.h
lustre/osp/osp_dev.c
lustre/osp/osp_precreate.c
lustre/target/tgt_grant.c
lustre/tests/sanity-pfl.sh
lustre/tests/test-framework.sh
lustre/utils/liblustreapi_layout.c