From: James Simmons Date: Mon, 7 Aug 2017 02:56:26 +0000 (-0400) Subject: LU-6401 uapi: migrate remaining uapi headers to uapi directory X-Git-Tag: 2.10.52~17 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F46%2F25246%2F12;p=fs%2Flustre-release.git LU-6401 uapi: migrate remaining uapi headers to uapi directory Move all the remaining lustre headers shared between user land and kernel space to the uapi directory. OBD_MAX_IOCTL_BUFFER can be removed since the utilites don't even acknowledge it value. Change-Id: I6dcdf3f824dae6bc8a0786f0e61787ca68c10bd8 Signed-off-by: James Simmons Reviewed-on: https://review.whamcloud.com/25246 Tested-by: Jenkins Reviewed-by: Quentin Bouget Tested-by: Maloo Reviewed-by: Ben Evans Reviewed-by: Dmitry Eremin Reviewed-by: Oleg Drokin --- diff --git a/libcfs/libcfs/util/parser.c b/libcfs/libcfs/util/parser.c index 3aa97a1..b92d8dc 100644 --- a/libcfs/libcfs/util/parser.c +++ b/libcfs/libcfs/util/parser.c @@ -36,7 +36,7 @@ #include #include -#include +#include static command_t * top_level; /* Top level of commands, initialized by * InitParser */ diff --git a/lustre.spec.in b/lustre.spec.in index f0d828e..fc1a301 100644 --- a/lustre.spec.in +++ b/lustre.spec.in @@ -456,6 +456,7 @@ echo '%{_sbindir}/wiretest' >>lustre-tests.files %{_datadir}/lustre %{_includedir}/lustre %{_includedir}/linux/lnet +%{_includedir}/linux/lustre %endif %{_sysconfdir}/udev/rules.d/99-lustre.rules %config(noreplace) %{_sysconfdir}/ldev.conf diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index d0c5ed0..4f14c6f 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -47,23 +47,6 @@ esac ]) # LC_TARGET_SUPPORTED # -# LC_CONFIG_OBD_BUFFER_SIZE -# -# the maximum buffer size of lctl ioctls -# -AC_DEFUN([LC_CONFIG_OBD_BUFFER_SIZE], [ -AC_MSG_CHECKING([for maximum OBD ioctl size]) -AC_ARG_WITH([obd-buffer-size], - AC_HELP_STRING([--with-obd-buffer-size=[size]], - [set lctl ioctl maximum bytes (default=8192)]), - [OBD_BUFFER_SIZE=$with_obd_buffer_size], - [OBD_BUFFER_SIZE=8192]) -AC_MSG_RESULT([$OBD_BUFFER_SIZE bytes]) -AC_DEFINE_UNQUOTED(CONFIG_LUSTRE_OBD_MAX_IOCTL_BUFFER, $OBD_BUFFER_SIZE, - [IOCTL Buffer Size]) -]) # LC_CONFIG_OBD_BUFFER_SIZE - -# # LC_GLIBC_SUPPORT_FHANDLES # AC_DEFUN([LC_GLIBC_SUPPORT_FHANDLES], [ @@ -3143,7 +3126,7 @@ lustre/contrib/Makefile lustre/doc/Makefile lustre/include/Makefile lustre/include/lustre/Makefile -lustre/include/uapi/linux/Makefile +lustre/include/uapi/linux/lustre/Makefile lustre/kernel_patches/targets/3.10-rhel7.target lustre/kernel_patches/targets/2.6-rhel6.9.target lustre/kernel_patches/targets/2.6-rhel6.8.target diff --git a/lustre/fid/fid_internal.h b/lustre/fid/fid_internal.h index 9ad1420..f006d81 100644 --- a/lustre/fid/fid_internal.h +++ b/lustre/fid/fid_internal.h @@ -36,7 +36,6 @@ #ifndef __FID_INTERNAL_H #define __FID_INTERNAL_H -#include #include #ifdef HAVE_SERVER_SUPPORT diff --git a/lustre/fid/fid_lib.c b/lustre/fid/fid_lib.c index 7c5477c..ab3a598 100644 --- a/lustre/fid/fid_lib.c +++ b/lustre/fid/fid_lib.c @@ -41,7 +41,6 @@ #include #include -#include #include /** diff --git a/lustre/fld/fld_internal.h b/lustre/fld/fld_internal.h index dcb24a3..02a4702 100644 --- a/lustre/fld/fld_internal.h +++ b/lustre/fld/fld_internal.h @@ -56,7 +56,6 @@ #define __FLD_INTERNAL_H #include -#include #include #include diff --git a/lustre/include/Makefile.am b/lustre/include/Makefile.am index e97ba30..4613df4 100644 --- a/lustre/include/Makefile.am +++ b/lustre/include/Makefile.am @@ -32,9 +32,9 @@ # Lustre is a trademark of Sun Microsystems, Inc. # -SUBDIRS = lustre uapi/linux +SUBDIRS = lustre uapi/linux/lustre -DIST_SUBDIRS = lustre uapi/linux +DIST_SUBDIRS = lustre uapi/linux/lustre EXTRA_DIST = \ cl_object.h \ @@ -52,6 +52,7 @@ EXTRA_DIST = \ lustre_dlm_flags.h \ lustre_dlm.h \ lustre_eacl.h \ + lustre_errno.h \ lustre_export.h \ lustre_fid.h \ lustre_fld.h \ @@ -65,7 +66,6 @@ EXTRA_DIST = \ lustre_linkea.h \ lustre_lmv.h \ lustre_log.h \ - lustre_log_user.h \ lustre_mdc.h \ lustre_mds.h \ lustre_net.h \ @@ -84,7 +84,6 @@ EXTRA_DIST = \ lustre_sec.h \ lustre_swab.h \ lustre_update.h \ - lustre_ver.h \ lu_target.h \ lvfs.h \ md_object.h \ @@ -97,5 +96,4 @@ EXTRA_DIST = \ obj_update.h \ upcall_cache.h \ lustre_kernelcomm.h \ - seq_range.h \ - uapi_kernelcomm.h + seq_range.h diff --git a/lustre/include/llog_swab.h b/lustre/include/llog_swab.h index a0b8d02..6fe62bc 100644 --- a/lustre/include/llog_swab.h +++ b/lustre/include/llog_swab.h @@ -48,7 +48,7 @@ #ifndef _LLOG_SWAB_H_ #define _LLOG_SWAB_H_ -#include +#include struct lustre_cfg; void lustre_swab_lu_fid(struct lu_fid *fid); diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h index c40604b..83ede1b 100644 --- a/lustre/include/lprocfs_status.h +++ b/lustre/include/lprocfs_status.h @@ -46,7 +46,7 @@ #include #include -#include +#include struct lprocfs_vars { const char *name; diff --git a/lustre/include/lu_object.h b/lustre/include/lu_object.h index ab41873..6f4a644 100644 --- a/lustre/include/lu_object.h +++ b/lustre/include/lu_object.h @@ -35,7 +35,7 @@ #include #include -#include +#include #include #include diff --git a/lustre/include/lustre/Makefile.am b/lustre/include/lustre/Makefile.am index 79d55a1..622835a 100644 --- a/lustre/include/lustre/Makefile.am +++ b/lustre/include/lustre/Makefile.am @@ -40,8 +40,6 @@ endif EXTRA_DIST = libiam.h \ liblustreapi.h \ ll_fiemap.h \ - lustre_errno.h \ - lustre_idl.h \ lustre_lfsck_user.h \ lustre_user.h \ lustreapi.h \ diff --git a/lustre/include/lustre/ll_fiemap.h b/lustre/include/lustre/ll_fiemap.h index cee135b..e5466c7 100644 --- a/lustre/include/lustre/ll_fiemap.h +++ b/lustre/include/lustre/ll_fiemap.h @@ -38,38 +38,12 @@ * Author: Andreas Dilger */ -#ifndef _LUSTRE_FIEMAP_H -#define _LUSTRE_FIEMAP_H - -#ifndef __KERNEL__ -#include -#include -#endif - -/* XXX: We use fiemap_extent::fe_reserved[0] */ -#define fe_device fe_reserved[0] - -static inline size_t fiemap_count_to_size(size_t extent_count) -{ - return sizeof(struct fiemap) + extent_count * - sizeof(struct fiemap_extent); -} - -static inline unsigned fiemap_size_to_count(size_t array_size) -{ - return (array_size - sizeof(struct fiemap)) / - sizeof(struct fiemap_extent); -} - -#define FIEMAP_FLAG_DEVICE_ORDER 0x40000000 /* return device ordered mapping */ - -#ifdef FIEMAP_FLAGS_COMPAT -#undef FIEMAP_FLAGS_COMPAT -#endif +/* + * NOTE: This file is DEPRECATED! Please include linux/lustre/lustre_fiemap.h + * directly instead of this file. This file will be removed from a + * future version of lustre! + */ -/* Lustre specific flags - use a high bit, don't conflict with upstream flag */ -#define FIEMAP_EXTENT_NO_DIRECT 0x40000000 /* Data mapping undefined */ -#define FIEMAP_EXTENT_NET 0x80000000 /* Data stored remotely. - * Sets NO_DIRECT flag */ +#include -#endif /* _LUSTRE_FIEMAP_H */ +#warning "Including ll_fiemap.h is deprecated. Include linux/lustre/lustre_fiemap.h directly." diff --git a/lustre/include/lustre/lustre_barrier_user.h b/lustre/include/lustre/lustre_barrier_user.h index e69bdc2..8f449c4 100644 --- a/lustre/include/lustre/lustre_barrier_user.h +++ b/lustre/include/lustre/lustre_barrier_user.h @@ -6,13 +6,13 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 only, * as published by the Free Software Foundation. - + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License version 2 for more details. A copy is * included in the COPYING file that accompanied this code. - + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -28,46 +28,13 @@ * * Author: Fan, Yong */ -#ifndef _LUSTRE_BARRIER_USER_H -# define _LUSTRE_BARRIER_USER_H - -#include -#define BARRIER_VERSION_V1 1 -#define BARRIER_TIMEOUT_DEFAULT 30 - -enum barrier_commands { - BC_FREEZE = 1, - BC_THAW = 2, - BC_STAT = 3, - BC_RESCAN = 4, -}; - -enum barrier_status { - BS_INIT = 0, - BS_FREEZING_P1 = 1, - BS_FREEZING_P2 = 2, - BS_FROZEN = 3, - BS_THAWING = 4, - BS_THAWED = 5, - BS_FAILED = 6, - BS_EXPIRED = 7, - BS_RESCAN = 8, -}; +/* + * NOTE: This file is DEPRECATED! Please include linux/lustre/lustre_barrier_user.h + * directly instead of this file. This file will be removed from a + * future version of lustre! + */ -struct barrier_ctl { - __u32 bc_version; - __u32 bc_cmd; - union { - __s32 bc_timeout; - __u32 bc_total; - }; - union { - __u32 bc_status; - __u32 bc_absence; - }; - char bc_name[12]; - __u32 bc_padding; -}; +#include -#endif /* _LUSTRE_BARRIER_USER_H */ +#warning "Including lustre_barrier_user.h is deprecated. Include linux/lustre/lustre_barrier_user.h directly." diff --git a/lustre/include/lustre/lustre_lfsck_user.h b/lustre/include/lustre/lustre_lfsck_user.h index a02f65f..76ecd8b 100644 --- a/lustre/include/lustre/lustre_lfsck_user.h +++ b/lustre/include/lustre/lustre_lfsck_user.h @@ -6,13 +6,13 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 only, * as published by the Free Software Foundation. - + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License version 2 for more details. A copy is * included in the COPYING file that accompanied this code. - + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -30,207 +30,11 @@ * Author: Fan, Yong */ -#ifndef _LUSTRE_LFSCK_USER_H -# define _LUSTRE_LFSCK_USER_H -# include - -/** - * state machine: - * - * LS_INIT - * | - * (lfsck|start) - * | - * v - * LS_SCANNING_PHASE1 - * | ^ - * | : - * | (lfsck:restart) - * | : - * v : - * ----------------------------------------------------------------- - * | |^ |^ |^ |^ |^ - * | |: |: |: |: |: - * v v: v: v: v: v: - * LS_SCANNING_PHASE2 LS_FAILED LS_STOPPED LS_PAUSED LS_CRASHED LS_PARTIAL - * (CO_) (CO_) (CO_) - * | ^ ^: ^: ^: ^: ^: - * | : |: |: |: |: |: - * | (lfsck:restart) |: |: |: |: |: - * v : |v |v |v |v |v - * ----------------------------------------------------------------- - * | - * v - * LS_COMPLETED +/* + * NOTE: This file is DEPRECATED! Please include linux/lustre/lustre_lfsck_user.h + * directly instead of this file. This file will be removed from a + * future version of lustre! */ -enum lfsck_status { - /* The lfsck file is new created, for new MDT, upgrading from old disk, - * or re-creating the lfsck file manually. */ - LS_INIT = 0, - - /* The first-step system scanning. The checked items during the phase1 - * scanning depends on the LFSCK type. */ - LS_SCANNING_PHASE1 = 1, - - /* The second-step system scanning. The checked items during the phase2 - * scanning depends on the LFSCK type. */ - LS_SCANNING_PHASE2 = 2, - - /* The LFSCK processing has completed for all objects. */ - LS_COMPLETED = 3, - - /* The LFSCK exited automatically for failure, will not auto restart. */ - LS_FAILED = 4, - - /* The LFSCK is stopped manually, will not auto restart. */ - LS_STOPPED = 5, - - /* LFSCK is paused automatically when umount, - * will be restarted automatically when remount. */ - LS_PAUSED = 6, - - /* System crashed during the LFSCK, - * will be restarted automatically after recovery. */ - LS_CRASHED = 7, - - /* Some OST/MDT failed during the LFSCK, or not join the LFSCK. */ - LS_PARTIAL = 8, - - /* The LFSCK is failed because its controller is failed. */ - LS_CO_FAILED = 9, - - /* The LFSCK is stopped because its controller is stopped. */ - LS_CO_STOPPED = 10, - - /* The LFSCK is paused because its controller is paused. */ - LS_CO_PAUSED = 11, - - LS_MAX -}; - -static inline const char *lfsck_status2name(int status) -{ - static const char * const lfsck_status_names[] = { - [LS_INIT] = "init", - [LS_SCANNING_PHASE1] = "scanning-phase1", - [LS_SCANNING_PHASE2] = "scanning-phase2", - [LS_COMPLETED] = "completed", - [LS_FAILED] = "failed", - [LS_STOPPED] = "stopped", - [LS_PAUSED] = "paused", - [LS_CRASHED] = "crashed", - [LS_PARTIAL] = "partial", - [LS_CO_FAILED] = "co-failed", - [LS_CO_STOPPED] = "co-stopped", - [LS_CO_PAUSED] = "co-paused" - }; - - if (status < 0 || status >= LS_MAX) - return "unknown"; - - return lfsck_status_names[status]; -} - -enum lfsck_param_flags { - /* Reset LFSCK iterator position to the device beginning. */ - LPF_RESET = 0x0001, - - /* Exit when fail. */ - LPF_FAILOUT = 0x0002, - - /* Dryrun mode, only check without modification */ - LPF_DRYRUN = 0x0004, - - /* LFSCK runs on all targets. */ - LPF_ALL_TGT = 0x0008, - - /* Broadcast the command to other MDTs. Only valid on the sponsor MDT */ - LPF_BROADCAST = 0x0010, - - /* Handle orphan OST-objects. */ - LPF_OST_ORPHAN = 0x0020, - - /* Create OST-object for dangling LOV EA. */ - LPF_CREATE_OSTOBJ = 0x0040, - - /* Create MDT-object for dangling name entry. */ - LPF_CREATE_MDTOBJ = 0x0080, - - /* Do not return until the LFSCK not running. */ - LPF_WAIT = 0x0100, - - /* Delay to create OST-object for dangling LOV EA. */ - LPF_DELAY_CREATE_OSTOBJ = 0x0200, -}; - -enum lfsck_type { - /* For MDT and OST internal OSD consistency check/repair. */ - LFSCK_TYPE_SCRUB = 0x0000, - - /* For MDT-OST (layout, object) consistency check/repair. */ - LFSCK_TYPE_LAYOUT = 0x0001, - - /* For MDT (FID-in-dirent, linkEA) consistency check/repair. */ - LFSCK_TYPE_NAMESPACE = 0x0004, - LFSCK_TYPES_SUPPORTED = (LFSCK_TYPE_SCRUB | LFSCK_TYPE_LAYOUT | - LFSCK_TYPE_NAMESPACE), - LFSCK_TYPES_DEF = LFSCK_TYPES_SUPPORTED, - LFSCK_TYPES_ALL = ((__u16)(~0)) -}; - -#define LFSCK_VERSION_V1 1 -#define LFSCK_VERSION_V2 2 - -#define LFSCK_SPEED_NO_LIMIT 0 -#define LFSCK_SPEED_LIMIT_DEF LFSCK_SPEED_NO_LIMIT -#define LFSCK_ASYNC_WIN_DEFAULT 1024 -#define LFSCK_ASYNC_WIN_MAX ((__u16)(~0)) -#define LFSCK_TYPE_BITS 16 - -enum lfsck_start_valid { - LSV_SPEED_LIMIT = 0x00000001, - LSV_ERROR_HANDLE = 0x00000002, - LSV_DRYRUN = 0x00000004, - LSV_ASYNC_WINDOWS = 0x00000008, - LSV_CREATE_OSTOBJ = 0x00000010, - LSV_CREATE_MDTOBJ = 0x00000020, - LSV_DELAY_CREATE_OSTOBJ = 0x00000040, -}; - -/* Arguments for starting lfsck. */ -struct lfsck_start { - /* Which arguments are valid, see 'enum lfsck_start_valid'. */ - __u32 ls_valid; - - /* How many items can be scanned at most per second. */ - __u32 ls_speed_limit; - - /* For compatibility between user space tools and kernel service. */ - __u16 ls_version; - - /* Which LFSCK components to be (have been) started. */ - __u16 ls_active; - - /* Flags for the LFSCK, see 'enum lfsck_param_flags'. */ - __u16 ls_flags; - - /* The windows size for async requests pipeline. */ - __u16 ls_async_windows; -}; - -struct lfsck_stop { - __u32 ls_status; - __u16 ls_flags; - __u16 ls_padding_1; /* For 64-bits aligned. */ - __u64 ls_padding_2; -}; - -struct lfsck_query { - __u16 lu_types; - __u16 lu_flags; - __u32 lu_mdts_count[LFSCK_TYPE_BITS][LS_MAX + 1]; - __u32 lu_osts_count[LFSCK_TYPE_BITS][LS_MAX + 1]; - __u64 lu_repaired[LFSCK_TYPE_BITS]; -}; -#endif /* _LUSTRE_LFSCK_USER_H */ +#include +#warning "Including lustre_lfsck_user.h is deprecated. Include linux/lustre/lustre_lfsck_user.h directly." diff --git a/lustre/include/lustre/lustre_user.h b/lustre/include/lustre/lustre_user.h index b1f3de3..72f58c7 100644 --- a/lustre/include/lustre/lustre_user.h +++ b/lustre/include/lustre/lustre_user.h @@ -34,1585 +34,12 @@ * Lustre public user-space interface definitions. */ -#ifndef _LUSTRE_USER_H -#define _LUSTRE_USER_H - -/** \defgroup lustreuser lustreuser - * - * @{ - */ - -#include - -#ifdef __KERNEL__ -# include -# include -# include /* snprintf() */ -# include -#else /* !__KERNEL__ */ -# define NEED_QUOTA_DEFS -# include -# include -# include /* snprintf() */ -# include -# include -# include -#endif /* __KERNEL__ */ -#include - -/* - * This is a temporary solution of adding quota type. - * Should be removed as soon as system header is updated. - */ -#undef LL_MAXQUOTAS -#define LL_MAXQUOTAS 3 -#undef INITQFNAMES -#define INITQFNAMES { \ - "user", /* USRQUOTA */ \ - "group", /* GRPQUOTA */ \ - "project", /* PRJQUOTA */ \ - "undefined", \ -}; -#define PRJQUOTA 2 - -#if defined(__x86_64__) || defined(__ia64__) || defined(__ppc64__) || \ - defined(__craynv) || defined(__mips64__) || defined(__powerpc64__) || \ - defined(__aarch64__) -typedef struct stat lstat_t; -# define lstat_f lstat -# define fstat_f fstat -# define fstatat_f fstatat -# define HAVE_LOV_USER_MDS_DATA -#elif defined(__USE_LARGEFILE64) || defined(__KERNEL__) -typedef struct stat64 lstat_t; -# define lstat_f lstat64 -# define fstat_f fstat64 -# define fstatat_f fstatat64 -# define HAVE_LOV_USER_MDS_DATA -#endif - -#define LUSTRE_EOF 0xffffffffffffffffULL - -/* for statfs() */ -#define LL_SUPER_MAGIC 0x0BD00BD0 - -#ifndef FSFILT_IOC_GETFLAGS -#define FSFILT_IOC_GETFLAGS _IOR('f', 1, long) -#define FSFILT_IOC_SETFLAGS _IOW('f', 2, long) -#define FSFILT_IOC_GETVERSION _IOR('f', 3, long) -#define FSFILT_IOC_SETVERSION _IOW('f', 4, long) -#define FSFILT_IOC_GETVERSION_OLD _IOR('v', 1, long) -#define FSFILT_IOC_SETVERSION_OLD _IOW('v', 2, long) -#endif - -/* FIEMAP flags supported by Lustre */ -#define LUSTRE_FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_DEVICE_ORDER) - -enum obd_statfs_state { - OS_STATE_DEGRADED = 0x00000001, /**< RAID degraded/rebuilding */ - OS_STATE_READONLY = 0x00000002, /**< filesystem is read-only */ - OS_STATE_ENOSPC = 0x00000020, /**< not enough free space */ - OS_STATE_ENOINO = 0x00000040, /**< not enough inodes */ -}; - -struct obd_statfs { - __u64 os_type; - __u64 os_blocks; - __u64 os_bfree; - __u64 os_bavail; - __u64 os_files; - __u64 os_ffree; - __u8 os_fsid[40]; - __u32 os_bsize; - __u32 os_namelen; - __u64 os_maxbytes; - __u32 os_state; /**< obd_statfs_state OS_STATE_* flag */ - __u32 os_fprecreated; /* objs available now to the caller */ - /* used in QoS code to find preferred - * OSTs */ - __u32 os_spare2; - __u32 os_spare3; - __u32 os_spare4; - __u32 os_spare5; - __u32 os_spare6; - __u32 os_spare7; - __u32 os_spare8; - __u32 os_spare9; -}; - -/** - * File IDentifier. - * - * FID is a cluster-wide unique identifier of a file or an object (stripe). - * FIDs are never reused. - **/ -struct lu_fid { - /** - * FID sequence. Sequence is a unit of migration: all files (objects) - * with FIDs from a given sequence are stored on the same server. - * Lustre should support 2^64 objects, so even if each sequence - * has only a single object we can still enumerate 2^64 objects. - **/ - __u64 f_seq; - /* FID number within sequence. */ - __u32 f_oid; - /** - * FID version, used to distinguish different versions (in the sense - * of snapshots, etc.) of the same file system object. Not currently - * used. - **/ - __u32 f_ver; -}; - -static inline bool fid_is_zero(const struct lu_fid *fid) -{ - return fid->f_seq == 0 && fid->f_oid == 0; -} - -/* Currently, the filter_fid::ff_parent::f_ver is not the real parent - * MDT-object's FID::f_ver, instead it is the OST-object index in its - * parent MDT-object's layout EA. */ -#define f_stripe_idx f_ver - -struct ost_layout { - __u32 ol_stripe_size; - __u32 ol_stripe_count; - __u64 ol_comp_start; - __u64 ol_comp_end; - __u32 ol_comp_id; -} __attribute__((packed)); - -/* keep this one for compatibility */ -struct filter_fid_old { - struct lu_fid ff_parent; - __u64 ff_objid; - __u64 ff_seq; -}; - -struct filter_fid { - struct lu_fid ff_parent; - struct ost_layout ff_layout; -} __attribute__((packed)); - -/* Userspace should treat lu_fid as opaque, and only use the following methods - * to print or parse them. Other functions (e.g. compare, swab) could be moved - * here from lustre_idl.h if needed. */ -typedef struct lu_fid lustre_fid; - -enum lma_compat { - LMAC_HSM = 0x00000001, -/* LMAC_SOM = 0x00000002, obsolete since 2.8.0 */ - LMAC_NOT_IN_OI = 0x00000004, /* the object does NOT need OI mapping */ - LMAC_FID_ON_OST = 0x00000008, /* For OST-object, its OI mapping is - * under /O//d. */ - LMAC_STRIPE_INFO = 0x00000010, /* stripe info in the LMA EA. */ - LMAC_COMP_INFO = 0x00000020, /* Component info in the LMA EA. */ -}; - -/** - * Masks for all features that should be supported by a Lustre version to - * access a specific file. - * This information is stored in lustre_mdt_attrs::lma_incompat. - */ -enum lma_incompat { - LMAI_RELEASED = 0x00000001, /* file is released */ - LMAI_AGENT = 0x00000002, /* agent inode */ - LMAI_REMOTE_PARENT = 0x00000004, /* the parent of the object - is on the remote MDT */ - LMAI_STRIPED = 0x00000008, /* striped directory inode */ - LMAI_ORPHAN = 0x00000010, /* inode is orphan */ - LMA_INCOMPAT_SUPP = (LMAI_AGENT | LMAI_REMOTE_PARENT | \ - LMAI_STRIPED | LMAI_ORPHAN) -}; - - -/** - * Following struct for object attributes, that will be kept inode's EA. - * Introduced in 2.0 release (please see b15993, for details) - * Added to all objects since Lustre 2.4 as contains self FID - */ -struct lustre_mdt_attrs { - /** - * Bitfield for supported data in this structure. From enum lma_compat. - * lma_self_fid and lma_flags are always available. - */ - __u32 lma_compat; - /** - * Per-file incompat feature list. Lustre version should support all - * flags set in this field. The supported feature mask is available in - * LMA_INCOMPAT_SUPP. - */ - __u32 lma_incompat; - /** FID of this inode */ - struct lu_fid lma_self_fid; -}; - -struct lustre_ost_attrs { - /* Use lustre_mdt_attrs directly for now, need a common header - * structure if want to change lustre_mdt_attrs in future. */ - struct lustre_mdt_attrs loa_lma; - - /* Below five elements are for OST-object's PFID EA, the - * lma_parent_fid::f_ver is composed of the stripe_count (high 16 bits) - * and the stripe_index (low 16 bits), the size should not exceed - * 5 * sizeof(__u64)) to be accessable by old Lustre. If the flag - * LMAC_STRIPE_INFO is set, then loa_parent_fid and loa_stripe_size - * are valid; if the flag LMAC_COMP_INFO is set, then the next three - * loa_comp_* elements are valid. */ - struct lu_fid loa_parent_fid; - __u32 loa_stripe_size; - __u32 loa_comp_id; - __u64 loa_comp_start; - __u64 loa_comp_end; -}; - -/** - * Prior to 2.4, the LMA structure also included SOM attributes which has since - * been moved to a dedicated xattr - * lma_flags was also removed because of lma_compat/incompat fields. - */ -#define LMA_OLD_SIZE (sizeof(struct lustre_mdt_attrs) + 5 * sizeof(__u64)) - -/** - * OST object IDentifier. - */ -struct ost_id { - union { - struct { - __u64 oi_id; - __u64 oi_seq; - } oi; - struct lu_fid oi_fid; - }; -}; - -#define DOSTID "%#llx:%llu" -#define POSTID(oi) ((unsigned long long)ostid_seq(oi)), \ - ((unsigned long long)ostid_id(oi)) - -struct ll_futimes_3 { - __u64 lfu_atime_sec; - __u64 lfu_atime_nsec; - __u64 lfu_mtime_sec; - __u64 lfu_mtime_nsec; - __u64 lfu_ctime_sec; - __u64 lfu_ctime_nsec; -}; - -/* - * The ioctl naming rules: - * LL_* - works on the currently opened filehandle instead of parent dir - * *_OBD_* - gets data for both OSC or MDC (LOV, LMV indirectly) - * *_MDC_* - gets/sets data related to MDC - * *_LOV_* - gets/sets data related to OSC/LOV - * *FILE* - called on parent dir and passes in a filename - * *STRIPE* - set/get lov_user_md - * *INFO - set/get lov_user_mds_data - */ -/* lustre_ioctl.h 101-150 */ -#define LL_IOC_GETFLAGS _IOR ('f', 151, long) -#define LL_IOC_SETFLAGS _IOW ('f', 152, long) -#define LL_IOC_CLRFLAGS _IOW ('f', 153, long) -#define LL_IOC_LOV_SETSTRIPE _IOW ('f', 154, long) -#define LL_IOC_LOV_SETSTRIPE_NEW _IOWR('f', 154, struct lov_user_md) -#define LL_IOC_LOV_GETSTRIPE _IOW ('f', 155, long) -#define LL_IOC_LOV_GETSTRIPE_NEW _IOR('f', 155, struct lov_user_md) -#define LL_IOC_LOV_SETEA _IOW ('f', 156, long) -/* LL_IOC_RECREATE_OBJ 157 obsolete */ -/* LL_IOC_RECREATE_FID 157 obsolete */ -#define LL_IOC_GROUP_LOCK _IOW ('f', 158, long) -#define LL_IOC_GROUP_UNLOCK _IOW ('f', 159, long) -/* LL_IOC_QUOTACHECK 160 OBD_IOC_QUOTACHECK */ -/* LL_IOC_POLL_QUOTACHECK 161 OBD_IOC_POLL_QUOTACHECK */ -/* LL_IOC_QUOTACTL 162 OBD_IOC_QUOTACTL */ -#define IOC_OBD_STATFS _IOWR('f', 164, struct obd_statfs *) -/* IOC_LOV_GETINFO 165 obsolete */ -#define LL_IOC_FLUSHCTX _IOW ('f', 166, long) -/* LL_IOC_RMTACL 167 obsolete */ -#define LL_IOC_GETOBDCOUNT _IOR ('f', 168, long) -#define LL_IOC_LLOOP_ATTACH _IOWR('f', 169, long) -#define LL_IOC_LLOOP_DETACH _IOWR('f', 170, long) -#define LL_IOC_LLOOP_INFO _IOWR('f', 171, struct lu_fid) -#define LL_IOC_LLOOP_DETACH_BYDEV _IOWR('f', 172, long) -#define LL_IOC_PATH2FID _IOR ('f', 173, long) -#define LL_IOC_GET_CONNECT_FLAGS _IOWR('f', 174, __u64 *) -#define LL_IOC_GET_MDTIDX _IOR ('f', 175, int) -#define LL_IOC_FUTIMES_3 _IOWR('f', 176, struct ll_futimes_3) -/* lustre_ioctl.h 177-210 */ -#define LL_IOC_HSM_STATE_GET _IOR('f', 211, struct hsm_user_state) -#define LL_IOC_HSM_STATE_SET _IOW('f', 212, struct hsm_state_set) -#define LL_IOC_HSM_CT_START _IOW('f', 213, struct lustre_kernelcomm) -#define LL_IOC_HSM_COPY_START _IOW('f', 214, struct hsm_copy *) -#define LL_IOC_HSM_COPY_END _IOW('f', 215, struct hsm_copy *) -#define LL_IOC_HSM_PROGRESS _IOW('f', 216, struct hsm_user_request) -#define LL_IOC_HSM_REQUEST _IOW('f', 217, struct hsm_user_request) -#define LL_IOC_DATA_VERSION _IOR('f', 218, struct ioc_data_version) -#define LL_IOC_LOV_SWAP_LAYOUTS _IOW('f', 219, \ - struct lustre_swap_layouts) -#define LL_IOC_HSM_ACTION _IOR('f', 220, \ - struct hsm_current_action) -/* lustre_ioctl.h 221-232 */ -#define LL_IOC_LMV_SETSTRIPE _IOWR('f', 240, struct lmv_user_md) -#define LL_IOC_LMV_GETSTRIPE _IOWR('f', 241, struct lmv_user_md) -#define LL_IOC_REMOVE_ENTRY _IOWR('f', 242, __u64) -#define LL_IOC_SET_LEASE _IOWR('f', 243, long) -#define LL_IOC_GET_LEASE _IO('f', 244) -#define LL_IOC_HSM_IMPORT _IOWR('f', 245, struct hsm_user_import) -#define LL_IOC_LMV_SET_DEFAULT_STRIPE _IOWR('f', 246, struct lmv_user_md) -#define LL_IOC_MIGRATE _IOR('f', 247, int) -#define LL_IOC_FID2MDTIDX _IOWR('f', 248, struct lu_fid) -#define LL_IOC_GETPARENT _IOWR('f', 249, struct getparent) -#define LL_IOC_LADVISE _IOR('f', 250, struct llapi_lu_ladvise) - -#ifndef FS_IOC_FSGETXATTR -/* - * Structure for FS_IOC_FSGETXATTR and FS_IOC_FSSETXATTR. -*/ -struct fsxattr { - __u32 fsx_xflags; /* xflags field value (get/set) */ - __u32 fsx_extsize; /* extsize field value (get/set)*/ - __u32 fsx_nextents; /* nextents field value (get) */ - __u32 fsx_projid; /* project identifier (get/set) */ - unsigned char fsx_pad[12]; -}; -#define FS_IOC_FSGETXATTR _IOR('X', 31, struct fsxattr) -#define FS_IOC_FSSETXATTR _IOW('X', 32, struct fsxattr) -#endif -#define LL_IOC_FSGETXATTR FS_IOC_FSGETXATTR -#define LL_IOC_FSSETXATTR FS_IOC_FSSETXATTR - - -/* Lease types for use as arg and return of LL_IOC_{GET,SET}_LEASE ioctl. */ -enum ll_lease_type { - LL_LEASE_RDLCK = 0x1, - LL_LEASE_WRLCK = 0x2, - LL_LEASE_UNLCK = 0x4, -}; - -#define LL_STATFS_LMV 1 -#define LL_STATFS_LOV 2 -#define LL_STATFS_NODELAY 4 - -#define IOC_MDC_TYPE 'i' -#define IOC_MDC_LOOKUP _IOWR(IOC_MDC_TYPE, 20, struct obd_device *) -#define IOC_MDC_GETFILESTRIPE _IOWR(IOC_MDC_TYPE, 21, struct lov_user_md *) -#define IOC_MDC_GETFILEINFO _IOWR(IOC_MDC_TYPE, 22, struct lov_user_mds_data *) -#define LL_IOC_MDC_GETINFO _IOWR(IOC_MDC_TYPE, 23, struct lov_user_mds_data *) - -#define MAX_OBD_NAME 128 /* If this changes, a NEW ioctl must be added */ - -/* Define O_LOV_DELAY_CREATE to be a mask that is not useful for regular - * files, but are unlikely to be used in practice and are not harmful if - * used incorrectly. O_NOCTTY and FASYNC are only meaningful for character - * devices and are safe for use on new files. See LU-4209. */ -/* To be compatible with old statically linked binary we keep the check for - * the older 0100000000 flag. This is already removed upstream. LU-812. */ -#define O_LOV_DELAY_CREATE_1_8 0100000000 /* FMODE_NONOTIFY masked in 2.6.36 */ -#define O_LOV_DELAY_CREATE_MASK (O_NOCTTY | FASYNC) -#define O_LOV_DELAY_CREATE (O_LOV_DELAY_CREATE_1_8 | \ - O_LOV_DELAY_CREATE_MASK) - -#define LL_FILE_IGNORE_LOCK 0x00000001 -#define LL_FILE_GROUP_LOCKED 0x00000002 -#define LL_FILE_READAHEA 0x00000004 -#define LL_FILE_LOCKED_DIRECTIO 0x00000008 /* client-side locks with dio */ -#define LL_FILE_LOCKLESS_IO 0x00000010 /* server-side locks with cio */ - -#define LOV_USER_MAGIC_V1 0x0BD10BD0 -#define LOV_USER_MAGIC LOV_USER_MAGIC_V1 -#define LOV_USER_MAGIC_JOIN_V1 0x0BD20BD0 -#define LOV_USER_MAGIC_V3 0x0BD30BD0 -/* 0x0BD40BD0 is occupied by LOV_MAGIC_MIGRATE */ -#define LOV_USER_MAGIC_SPECIFIC 0x0BD50BD0 /* for specific OSTs */ -#define LOV_USER_MAGIC_COMP_V1 0x0BD60BD0 - -#define LMV_USER_MAGIC 0x0CD30CD0 /*default lmv magic*/ - -#define LOV_PATTERN_RAID0 0x001 -#define LOV_PATTERN_RAID1 0x002 -#define LOV_PATTERN_FIRST 0x100 -#define LOV_PATTERN_CMOBD 0x200 - -#define LOV_PATTERN_F_MASK 0xffff0000 -#define LOV_PATTERN_F_HOLE 0x40000000 /* there is hole in LOV EA */ -#define LOV_PATTERN_F_RELEASED 0x80000000 /* HSM released file */ - -static inline bool lov_pattern_supported(__u32 pattern) -{ - return pattern == LOV_PATTERN_RAID0 || - pattern == (LOV_PATTERN_RAID0 | LOV_PATTERN_F_RELEASED); -} - -#define LOV_MAXPOOLNAME 15 -#define LOV_POOLNAMEF "%.15s" - -#define LOV_MIN_STRIPE_BITS 16 /* maximum PAGE_SIZE (ia64), power of 2 */ -#define LOV_MIN_STRIPE_SIZE (1 << LOV_MIN_STRIPE_BITS) -#define LOV_MAX_STRIPE_COUNT_OLD 160 -/* This calculation is crafted so that input of 4096 will result in 160 - * which in turn is equal to old maximal stripe count. - * XXX: In fact this is too simpified for now, what it also need is to get - * ea_type argument to clearly know how much space each stripe consumes. - * - * The limit of 12 pages is somewhat arbitrary, but is a reasonably large - * allocation that is sufficient for the current generation of systems. - * - * (max buffer size - lov+rpc header) / sizeof(struct lov_ost_data_v1) */ -#define LOV_MAX_STRIPE_COUNT 2000 /* ((12 * 4096 - 256) / 24) */ -#define LOV_ALL_STRIPES 0xffff /* only valid for directories */ -#define LOV_V1_INSANE_STRIPE_COUNT 65532 /* maximum stripe count bz13933 */ - -#define XATTR_LUSTRE_PREFIX "lustre." -#define XATTR_LUSTRE_LOV XATTR_LUSTRE_PREFIX"lov" - -#define lov_user_ost_data lov_user_ost_data_v1 -struct lov_user_ost_data_v1 { /* per-stripe data structure */ - struct ost_id l_ost_oi; /* OST object ID */ - __u32 l_ost_gen; /* generation of this OST index */ - __u32 l_ost_idx; /* OST index in LOV */ -} __attribute__((packed)); - -#define lov_user_md lov_user_md_v1 -struct lov_user_md_v1 { /* LOV EA user data (host-endian) */ - __u32 lmm_magic; /* magic number = LOV_USER_MAGIC_V1 */ - __u32 lmm_pattern; /* LOV_PATTERN_RAID0, LOV_PATTERN_RAID1 */ - struct ost_id lmm_oi; /* MDT parent inode id/seq (id/0 for 1.x) */ - __u32 lmm_stripe_size; /* size of stripe in bytes */ - __u16 lmm_stripe_count; /* num stripes in use for this object */ - union { - __u16 lmm_stripe_offset; /* starting stripe offset in - * lmm_objects, use when writing */ - __u16 lmm_layout_gen; /* layout generation number - * used when reading */ - }; - struct lov_user_ost_data_v1 lmm_objects[0]; /* per-stripe data */ -} __attribute__((packed, __may_alias__)); - -struct lov_user_md_v3 { /* LOV EA user data (host-endian) */ - __u32 lmm_magic; /* magic number = LOV_USER_MAGIC_V3 */ - __u32 lmm_pattern; /* LOV_PATTERN_RAID0, LOV_PATTERN_RAID1 */ - struct ost_id lmm_oi; /* MDT parent inode id/seq (id/0 for 1.x) */ - __u32 lmm_stripe_size; /* size of stripe in bytes */ - __u16 lmm_stripe_count; /* num stripes in use for this object */ - union { - __u16 lmm_stripe_offset; /* starting stripe offset in - * lmm_objects, use when writing */ - __u16 lmm_layout_gen; /* layout generation number - * used when reading */ - }; - char lmm_pool_name[LOV_MAXPOOLNAME + 1]; /* pool name */ - struct lov_user_ost_data_v1 lmm_objects[0]; /* per-stripe data */ -} __attribute__((packed)); - -struct lu_extent { - __u64 e_start; - __u64 e_end; -}; - -#define DEXT "[ %#llx , %#llx )" -#define PEXT(ext) (ext)->e_start, (ext)->e_end - -static inline bool lu_extent_is_overlapped(struct lu_extent *e1, - struct lu_extent *e2) -{ - return e1->e_start < e2->e_end && e2->e_start < e1->e_end; -} - -enum lov_comp_md_entry_flags { - LCME_FL_PRIMARY = 0x00000001, /* Not used */ - LCME_FL_STALE = 0x00000002, /* Not used */ - LCME_FL_OFFLINE = 0x00000004, /* Not used */ - LCME_FL_PREFERRED = 0x00000008, /* Not used */ - LCME_FL_INIT = 0x00000010, /* instantiated */ - LCME_FL_NEG = 0x80000000 /* used to indicate a negative flag, - won't be stored on disk */ -}; - -#define LCME_KNOWN_FLAGS (LCME_FL_NEG | LCME_FL_INIT) - -/* lcme_id can be specified as certain flags, and the the first - * bit of lcme_id is used to indicate that the ID is representing - * certain LCME_FL_* but not a real ID. Which implies we can have - * at most 31 flags (see LCME_FL_XXX). */ -enum lcme_id { - LCME_ID_INVAL = 0x0, - LCME_ID_MAX = 0x7FFFFFFF, - LCME_ID_ALL = 0xFFFFFFFF, - LCME_ID_NOT_ID = LCME_FL_NEG -}; - -#define LCME_ID_MASK LCME_ID_MAX - -struct lov_comp_md_entry_v1 { - __u32 lcme_id; /* unique id of component */ - __u32 lcme_flags; /* LCME_FL_XXX */ - struct lu_extent lcme_extent; /* file extent for component */ - __u32 lcme_offset; /* offset of component blob, - start from lov_comp_md_v1 */ - __u32 lcme_size; /* size of component blob */ - __u64 lcme_padding[2]; -} __attribute__((packed)); - -enum lov_comp_md_flags; - -struct lov_comp_md_v1 { - __u32 lcm_magic; /* LOV_USER_MAGIC_COMP_V1 */ - __u32 lcm_size; /* overall size including this struct */ - __u32 lcm_layout_gen; - __u16 lcm_flags; - __u16 lcm_entry_count; - __u64 lcm_padding1; - __u64 lcm_padding2; - struct lov_comp_md_entry_v1 lcm_entries[0]; -} __attribute__((packed)); - -static inline __u32 lov_user_md_size(__u16 stripes, __u32 lmm_magic) -{ - if (stripes == (__u16)-1) - stripes = 0; - - if (lmm_magic == LOV_USER_MAGIC_V1) - return sizeof(struct lov_user_md_v1) + - stripes * sizeof(struct lov_user_ost_data_v1); - return sizeof(struct lov_user_md_v3) + - stripes * sizeof(struct lov_user_ost_data_v1); -} - -/* Compile with -D_LARGEFILE64_SOURCE or -D_GNU_SOURCE (or #define) to - * use this. It is unsafe to #define those values in this header as it - * is possible the application has already #included . */ -#ifdef HAVE_LOV_USER_MDS_DATA -#define lov_user_mds_data lov_user_mds_data_v1 -struct lov_user_mds_data_v1 { - lstat_t lmd_st; /* MDS stat struct */ - struct lov_user_md_v1 lmd_lmm; /* LOV EA V1 user data */ -} __attribute__((packed)); - -struct lov_user_mds_data_v3 { - lstat_t lmd_st; /* MDS stat struct */ - struct lov_user_md_v3 lmd_lmm; /* LOV EA V3 user data */ -} __attribute__((packed)); -#endif - -struct lmv_user_mds_data { - struct lu_fid lum_fid; - __u32 lum_padding; - __u32 lum_mds; -}; - -enum lmv_hash_type { - LMV_HASH_TYPE_UNKNOWN = 0, /* 0 is reserved for testing purpose */ - LMV_HASH_TYPE_ALL_CHARS = 1, - LMV_HASH_TYPE_FNV_1A_64 = 2, - LMV_HASH_TYPE_MAX, -}; - -#define LMV_HASH_NAME_ALL_CHARS "all_char" -#define LMV_HASH_NAME_FNV_1A_64 "fnv_1a_64" - -extern char *mdt_hash_name[LMV_HASH_TYPE_MAX]; - -/* Got this according to how get LOV_MAX_STRIPE_COUNT, see above, - * (max buffer size - lmv+rpc header) / sizeof(struct lmv_user_mds_data) */ -#define LMV_MAX_STRIPE_COUNT 2000 /* ((12 * 4096 - 256) / 24) */ -#define lmv_user_md lmv_user_md_v1 -struct lmv_user_md_v1 { - __u32 lum_magic; /* must be the first field */ - __u32 lum_stripe_count; /* dirstripe count */ - __u32 lum_stripe_offset; /* MDT idx for default dirstripe */ - __u32 lum_hash_type; /* Dir stripe policy */ - __u32 lum_type; /* LMV type: default or normal */ - __u32 lum_padding1; - __u32 lum_padding2; - __u32 lum_padding3; - char lum_pool_name[LOV_MAXPOOLNAME + 1]; - struct lmv_user_mds_data lum_objects[0]; -} __attribute__((packed)); - -static inline int lmv_user_md_size(int stripes, int lmm_magic) -{ - return sizeof(struct lmv_user_md) + - stripes * sizeof(struct lmv_user_mds_data); -} - -struct ll_recreate_obj { - __u64 lrc_id; - __u32 lrc_ost_idx; -}; - -struct ll_fid { - __u64 id; /* holds object id */ - __u32 generation; /* holds object generation */ - __u32 f_type; /* holds object type or stripe idx when passing it to - * OST for saving into EA. */ -}; - -#define UUID_MAX 40 -struct obd_uuid { - char uuid[UUID_MAX]; -}; - -static inline bool obd_uuid_equals(const struct obd_uuid *u1, - const struct obd_uuid *u2) -{ - return strcmp((char *)u1->uuid, (char *)u2->uuid) == 0; -} - -static inline int obd_uuid_empty(struct obd_uuid *uuid) -{ - return uuid->uuid[0] == '\0'; -} - -static inline void obd_str2uuid(struct obd_uuid *uuid, const char *tmp) -{ - strncpy((char *)uuid->uuid, tmp, sizeof(*uuid)); - uuid->uuid[sizeof(*uuid) - 1] = '\0'; -} - -/* For printf's only, make sure uuid is terminated */ -static inline char *obd_uuid2str(const struct obd_uuid *uuid) -{ - if (uuid == NULL) - return NULL; - - if (uuid->uuid[sizeof(*uuid) - 1] != '\0') { - /* Obviously not safe, but for printfs, no real harm done... - we're always null-terminated, even in a race. */ - static char temp[sizeof(*uuid)]; - memcpy(temp, uuid->uuid, sizeof(*uuid) - 1); - temp[sizeof(*uuid) - 1] = '\0'; - return temp; - } - return (char *)(uuid->uuid); -} - -/* Extract fsname from uuid (or target name) of a target - e.g. (myfs-OST0007_UUID -> myfs) - see also deuuidify. */ -static inline void obd_uuid2fsname(char *buf, char *uuid, int buflen) -{ - char *p; - - strncpy(buf, uuid, buflen - 1); - buf[buflen - 1] = '\0'; - p = strrchr(buf, '-'); - if (p != NULL) - *p = '\0'; -} - -/* printf display format for Lustre FIDs - * usage: printf("file FID is "DFID"\n", PFID(fid)); */ -#define FID_NOBRACE_LEN 40 -#define FID_LEN (FID_NOBRACE_LEN + 2) -#define DFID_NOBRACE "%#llx:0x%x:0x%x" -#define DFID "["DFID_NOBRACE"]" -#define PFID(fid) (unsigned long long)(fid)->f_seq, (fid)->f_oid, (fid)->f_ver - -/* scanf input parse format for fids in DFID_NOBRACE format - * Need to strip '[' from DFID format first or use "["SFID"]" at caller. - * usage: sscanf(fidstr, SFID, RFID(&fid)); */ -#define SFID "0x%llx:0x%x:0x%x" -#define RFID(fid) &((fid)->f_seq), &((fid)->f_oid), &((fid)->f_ver) - -/********* Quotas **********/ - -#define LUSTRE_QUOTABLOCK_BITS 10 -#define LUSTRE_QUOTABLOCK_SIZE (1 << LUSTRE_QUOTABLOCK_BITS) - -static inline __u64 lustre_stoqb(size_t space) -{ - return (space + LUSTRE_QUOTABLOCK_SIZE - 1) >> LUSTRE_QUOTABLOCK_BITS; -} - -#define Q_QUOTACHECK 0x800100 /* deprecated as of 2.4 */ -#define Q_INITQUOTA 0x800101 /* deprecated as of 2.4 */ -#define Q_GETOINFO 0x800102 /* get obd quota info */ -#define Q_GETOQUOTA 0x800103 /* get obd quotas */ -#define Q_FINVALIDATE 0x800104 /* deprecated as of 2.4 */ - -/* these must be explicitly translated into linux Q_* in ll_dir_ioctl */ -#define LUSTRE_Q_QUOTAON 0x800002 /* deprecated as of 2.4 */ -#define LUSTRE_Q_QUOTAOFF 0x800003 /* deprecated as of 2.4 */ -#define LUSTRE_Q_GETINFO 0x800005 /* get information about quota files */ -#define LUSTRE_Q_SETINFO 0x800006 /* set information about quota files */ -#define LUSTRE_Q_GETQUOTA 0x800007 /* get user quota structure */ -#define LUSTRE_Q_SETQUOTA 0x800008 /* set user quota structure */ -/* lustre-specific control commands */ -#define LUSTRE_Q_INVALIDATE 0x80000b /* deprecated as of 2.4 */ -#define LUSTRE_Q_FINVALIDATE 0x80000c /* deprecated as of 2.4 */ - -#define ALLQUOTA 255 /* set all quota */ -static inline char *qtype_name(int qtype) -{ - switch (qtype) { - case USRQUOTA: - return "usr"; - case GRPQUOTA: - return "grp"; - case PRJQUOTA: - return "prj"; - } - return "unknown"; -} - -#define IDENTITY_DOWNCALL_MAGIC 0x6d6dd629 - -/* permission */ -#define N_PERMS_MAX 64 - -struct perm_downcall_data { - __u64 pdd_nid; - __u32 pdd_perm; - __u32 pdd_padding; -}; - -struct identity_downcall_data { - __u32 idd_magic; - __u32 idd_err; - __u32 idd_uid; - __u32 idd_gid; - __u32 idd_nperms; - __u32 idd_ngroups; - struct perm_downcall_data idd_perms[N_PERMS_MAX]; - __u32 idd_groups[0]; -}; - -#ifdef NEED_QUOTA_DEFS -#ifndef QIF_BLIMITS -#define QIF_BLIMITS 1 -#define QIF_SPACE 2 -#define QIF_ILIMITS 4 -#define QIF_INODES 8 -#define QIF_BTIME 16 -#define QIF_ITIME 32 -#define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS) -#define QIF_USAGE (QIF_SPACE | QIF_INODES) -#define QIF_TIMES (QIF_BTIME | QIF_ITIME) -#define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES) -#endif - -#endif /* !__KERNEL__ */ - -/* lustre volatile file support - * file name header: .^L^S^T^R:volatile" - */ -#define LUSTRE_VOLATILE_HDR ".\x0c\x13\x14\x12:VOLATILE" -#define LUSTRE_VOLATILE_HDR_LEN 14 - -typedef enum lustre_quota_version { - LUSTRE_QUOTA_V2 = 1 -} lustre_quota_version_t; - -/* XXX: same as if_dqinfo struct in kernel */ -struct obd_dqinfo { - __u64 dqi_bgrace; - __u64 dqi_igrace; - __u32 dqi_flags; - __u32 dqi_valid; -}; - -/* XXX: same as if_dqblk struct in kernel, plus one padding */ -struct obd_dqblk { - __u64 dqb_bhardlimit; - __u64 dqb_bsoftlimit; - __u64 dqb_curspace; - __u64 dqb_ihardlimit; - __u64 dqb_isoftlimit; - __u64 dqb_curinodes; - __u64 dqb_btime; - __u64 dqb_itime; - __u32 dqb_valid; - __u32 dqb_padding; -}; - -enum { - QC_GENERAL = 0, - QC_MDTIDX = 1, - QC_OSTIDX = 2, - QC_UUID = 3 -}; - -struct if_quotactl { - __u32 qc_cmd; - __u32 qc_type; - __u32 qc_id; - __u32 qc_stat; - __u32 qc_valid; - __u32 qc_idx; - struct obd_dqinfo qc_dqinfo; - struct obd_dqblk qc_dqblk; - char obd_type[16]; - struct obd_uuid obd_uuid; -}; - -/* swap layout flags */ -#define SWAP_LAYOUTS_CHECK_DV1 (1 << 0) -#define SWAP_LAYOUTS_CHECK_DV2 (1 << 1) -#define SWAP_LAYOUTS_KEEP_MTIME (1 << 2) -#define SWAP_LAYOUTS_KEEP_ATIME (1 << 3) -#define SWAP_LAYOUTS_CLOSE (1 << 4) - -/* Swap XATTR_NAME_HSM as well, only on the MDT so far */ -#define SWAP_LAYOUTS_MDS_HSM (1 << 31) -struct lustre_swap_layouts { - __u64 sl_flags; - __u32 sl_fd; - __u32 sl_gid; - __u64 sl_dv1; - __u64 sl_dv2; -}; - - -/********* Changelogs **********/ -/** Changelog record types */ -enum changelog_rec_type { - CL_MARK = 0, - CL_CREATE = 1, /* namespace */ - CL_MKDIR = 2, /* namespace */ - CL_HARDLINK = 3, /* namespace */ - CL_SOFTLINK = 4, /* namespace */ - CL_MKNOD = 5, /* namespace */ - CL_UNLINK = 6, /* namespace */ - CL_RMDIR = 7, /* namespace */ - CL_RENAME = 8, /* namespace */ - CL_EXT = 9, /* namespace extended record (2nd half of rename) */ - CL_OPEN = 10, /* not currently used */ - CL_CLOSE = 11, /* may be written to log only with mtime change */ - CL_LAYOUT = 12, /* file layout/striping modified */ - CL_TRUNC = 13, - CL_SETATTR = 14, - CL_XATTR = 15, - CL_HSM = 16, /* HSM specific events, see flags */ - CL_MTIME = 17, /* Precedence: setattr > mtime > ctime > atime */ - CL_CTIME = 18, - CL_ATIME = 19, - CL_MIGRATE = 20, - CL_LAST -}; - -static inline const char *changelog_type2str(int type) { - static const char *changelog_str[] = { - "MARK", "CREAT", "MKDIR", "HLINK", "SLINK", "MKNOD", "UNLNK", - "RMDIR", "RENME", "RNMTO", "OPEN", "CLOSE", "LYOUT", "TRUNC", - "SATTR", "XATTR", "HSM", "MTIME", "CTIME", "ATIME", "MIGRT" - }; - - if (type >= 0 && type < CL_LAST) - return changelog_str[type]; - return NULL; -} - -/* per-record flags */ -#define CLF_FLAGSHIFT 12 -#define CLF_FLAGMASK ((1U << CLF_FLAGSHIFT) - 1) -#define CLF_VERMASK (~CLF_FLAGMASK) -enum changelog_rec_flags { - CLF_VERSION = 0x1000, - CLF_RENAME = 0x2000, - CLF_JOBID = 0x4000, - CLF_SUPPORTED = CLF_VERSION | CLF_RENAME | CLF_JOBID -}; - - -/* Anything under the flagmask may be per-type (if desired) */ -/* Flags for unlink */ -#define CLF_UNLINK_LAST 0x0001 /* Unlink of last hardlink */ -#define CLF_UNLINK_HSM_EXISTS 0x0002 /* File has something in HSM */ - /* HSM cleaning needed */ -/* Flags for rename */ -#define CLF_RENAME_LAST 0x0001 /* rename unlink last hardlink - * of target */ -#define CLF_RENAME_LAST_EXISTS 0x0002 /* rename unlink last hardlink of target - * has an archive in backend */ - -/* Flags for HSM */ -/* 12b used (from high weight to low weight): - * 2b for flags - * 3b for event - * 7b for error code - */ -#define CLF_HSM_ERR_L 0 /* HSM return code, 7 bits */ -#define CLF_HSM_ERR_H 6 -#define CLF_HSM_EVENT_L 7 /* HSM event, 3 bits, see enum hsm_event */ -#define CLF_HSM_EVENT_H 9 -#define CLF_HSM_FLAG_L 10 /* HSM flags, 2 bits, 1 used, 1 spare */ -#define CLF_HSM_FLAG_H 11 -#define CLF_HSM_SPARE_L 12 /* 4 spare bits */ -#define CLF_HSM_SPARE_H 15 -#define CLF_HSM_LAST 15 - -/* Remove bits higher than _h, then extract the value - * between _h and _l by shifting lower weigth to bit 0. */ -#define CLF_GET_BITS(_b, _h, _l) (((_b << (CLF_HSM_LAST - _h)) & 0xFFFF) \ - >> (CLF_HSM_LAST - _h + _l)) - -#define CLF_HSM_SUCCESS 0x00 -#define CLF_HSM_MAXERROR 0x7E -#define CLF_HSM_ERROVERFLOW 0x7F - -#define CLF_HSM_DIRTY 1 /* file is dirty after HSM request end */ - -/* 3 bits field => 8 values allowed */ -enum hsm_event { - HE_ARCHIVE = 0, - HE_RESTORE = 1, - HE_CANCEL = 2, - HE_RELEASE = 3, - HE_REMOVE = 4, - HE_STATE = 5, - HE_SPARE1 = 6, - HE_SPARE2 = 7, -}; - -static inline enum hsm_event hsm_get_cl_event(__u16 flags) -{ - return (enum hsm_event)CLF_GET_BITS(flags, CLF_HSM_EVENT_H, - CLF_HSM_EVENT_L); -} - -static inline void hsm_set_cl_event(int *flags, enum hsm_event he) -{ - *flags |= (he << CLF_HSM_EVENT_L); -} - -static inline __u16 hsm_get_cl_flags(int flags) -{ - return CLF_GET_BITS(flags, CLF_HSM_FLAG_H, CLF_HSM_FLAG_L); -} - -static inline void hsm_set_cl_flags(int *flags, int bits) -{ - *flags |= (bits << CLF_HSM_FLAG_L); -} - -static inline int hsm_get_cl_error(int flags) -{ - return CLF_GET_BITS(flags, CLF_HSM_ERR_H, CLF_HSM_ERR_L); -} - -static inline void hsm_set_cl_error(int *flags, int error) -{ - *flags |= (error << CLF_HSM_ERR_L); -} - -enum changelog_send_flag { - /* Not yet implemented */ - CHANGELOG_FLAG_FOLLOW = 0x01, - /* Blocking IO makes sense in case of slow user parsing of the records, - * but it also prevents us from cleaning up if the records are not - * consumed. */ - CHANGELOG_FLAG_BLOCK = 0x02, - /* Pack jobid into the changelog records if available. */ - CHANGELOG_FLAG_JOBID = 0x04, -}; - -#define CR_MAXSIZE cfs_size_round(2 * NAME_MAX + 2 + \ - changelog_rec_offset(CLF_SUPPORTED)) - -/* 31 usable bytes string + null terminator. */ -#define LUSTRE_JOBID_SIZE 32 - -/* This is the minimal changelog record. It can contain extensions - * such as rename fields or process jobid. Its exact content is described - * by the cr_flags. - * - * Extensions are packed in the same order as their corresponding flags. - */ -struct changelog_rec { - __u16 cr_namelen; - __u16 cr_flags; /**< \a changelog_rec_flags */ - __u32 cr_type; /**< \a changelog_rec_type */ - __u64 cr_index; /**< changelog record number */ - __u64 cr_prev; /**< last index for this target fid */ - __u64 cr_time; - union { - lustre_fid cr_tfid; /**< target fid */ - __u32 cr_markerflags; /**< CL_MARK flags */ - }; - lustre_fid cr_pfid; /**< parent fid */ -}; - -/* Changelog extension for RENAME. */ -struct changelog_ext_rename { - lustre_fid cr_sfid; /**< source fid, or zero */ - lustre_fid cr_spfid; /**< source parent fid, or zero */ -}; - -/* Changelog extension to include JOBID. */ -struct changelog_ext_jobid { - char cr_jobid[LUSTRE_JOBID_SIZE]; /**< zero-terminated string. */ -}; - - -static inline size_t changelog_rec_offset(enum changelog_rec_flags crf) -{ - size_t size = sizeof(struct changelog_rec); - - if (crf & CLF_RENAME) - size += sizeof(struct changelog_ext_rename); - - if (crf & CLF_JOBID) - size += sizeof(struct changelog_ext_jobid); - - return size; -} - -static inline size_t changelog_rec_size(const struct changelog_rec *rec) -{ - return changelog_rec_offset(rec->cr_flags); -} - -static inline size_t changelog_rec_varsize(const struct changelog_rec *rec) -{ - return changelog_rec_size(rec) - sizeof(*rec) + rec->cr_namelen; -} - -static inline -struct changelog_ext_rename *changelog_rec_rename(const struct changelog_rec *rec) -{ - enum changelog_rec_flags crf = rec->cr_flags & CLF_VERSION; - - return (struct changelog_ext_rename *)((char *)rec + - changelog_rec_offset(crf)); -} - -/* The jobid follows the rename extension, if present */ -static inline -struct changelog_ext_jobid *changelog_rec_jobid(const struct changelog_rec *rec) -{ - enum changelog_rec_flags crf = rec->cr_flags & - (CLF_VERSION | CLF_RENAME); - - return (struct changelog_ext_jobid *)((char *)rec + - changelog_rec_offset(crf)); -} - -/* The name follows the rename and jobid extensions, if present */ -static inline char *changelog_rec_name(const struct changelog_rec *rec) -{ - return (char *)rec + changelog_rec_offset(rec->cr_flags & - CLF_SUPPORTED); -} - -static inline size_t changelog_rec_snamelen(const struct changelog_rec *rec) -{ - return rec->cr_namelen - strlen(changelog_rec_name(rec)) - 1; -} - -static inline char *changelog_rec_sname(const struct changelog_rec *rec) -{ - char *cr_name = changelog_rec_name(rec); - - return cr_name + strlen(cr_name) + 1; -} - -/** - * Remap a record to the desired format as specified by the crf flags. - * The record must be big enough to contain the final remapped version. - * Superfluous extension fields are removed and missing ones are added - * and zeroed. The flags of the record are updated accordingly. - * - * The jobid and rename extensions can be added to a record, to match the - * format an application expects, typically. In this case, the newly added - * fields will be zeroed. - * The Jobid field can be removed, to guarantee compatibility with older - * clients that don't expect this field in the records they process. - * - * The following assumptions are being made: - * - CLF_RENAME will not be removed - * - CLF_JOBID will not be added without CLF_RENAME being added too - * - * @param[in,out] rec The record to remap. - * @param[in] crf_wanted Flags describing the desired extensions. - */ -static inline void changelog_remap_rec(struct changelog_rec *rec, - enum changelog_rec_flags crf_wanted) -{ - char *jid_mov; - char *rnm_mov; - - crf_wanted &= CLF_SUPPORTED; - - if ((rec->cr_flags & CLF_SUPPORTED) == crf_wanted) - return; - - /* First move the variable-length name field */ - memmove((char *)rec + changelog_rec_offset(crf_wanted), - changelog_rec_name(rec), rec->cr_namelen); - - /* Locations of jobid and rename extensions in the remapped record */ - jid_mov = (char *)rec + - changelog_rec_offset(crf_wanted & ~CLF_JOBID); - rnm_mov = (char *)rec + - changelog_rec_offset(crf_wanted & ~(CLF_JOBID | CLF_RENAME)); - - /* Move the extension fields to the desired positions */ - if ((crf_wanted & CLF_JOBID) && (rec->cr_flags & CLF_JOBID)) - memmove(jid_mov, changelog_rec_jobid(rec), - sizeof(struct changelog_ext_jobid)); - - if ((crf_wanted & CLF_RENAME) && (rec->cr_flags & CLF_RENAME)) - memmove(rnm_mov, changelog_rec_rename(rec), - sizeof(struct changelog_ext_rename)); - - /* Clear newly added fields */ - if ((crf_wanted & CLF_JOBID) && !(rec->cr_flags & CLF_JOBID)) - memset(jid_mov, 0, sizeof(struct changelog_ext_jobid)); - - if ((crf_wanted & CLF_RENAME) && !(rec->cr_flags & CLF_RENAME)) - memset(rnm_mov, 0, sizeof(struct changelog_ext_rename)); - - /* Update the record's flags accordingly */ - rec->cr_flags = (rec->cr_flags & CLF_FLAGMASK) | crf_wanted; -} - -enum changelog_message_type { - CL_RECORD = 10, /* message is a changelog_rec */ - CL_EOF = 11, /* at end of current changelog */ -}; - -/********* Misc **********/ - -struct ioc_data_version { - __u64 idv_version; - __u64 idv_flags; /* See LL_DV_xxx */ -}; -#define LL_DV_RD_FLUSH (1 << 0) /* Flush dirty pages from clients */ -#define LL_DV_WR_FLUSH (1 << 1) /* Flush all caching pages from clients */ - -#ifndef offsetof -#define offsetof(typ, memb) ((unsigned long)((char *)&(((typ *)0)->memb))) -#endif - -#define dot_lustre_name ".lustre" - - -/********* HSM **********/ - -/** HSM per-file state - * See HSM_FLAGS below. - */ -enum hsm_states { - HS_NONE = 0x00000000, - HS_EXISTS = 0x00000001, - HS_DIRTY = 0x00000002, - HS_RELEASED = 0x00000004, - HS_ARCHIVED = 0x00000008, - HS_NORELEASE = 0x00000010, - HS_NOARCHIVE = 0x00000020, - HS_LOST = 0x00000040, -}; - -/* HSM user-setable flags. */ -#define HSM_USER_MASK (HS_NORELEASE | HS_NOARCHIVE | HS_DIRTY) - -/* Other HSM flags. */ -#define HSM_STATUS_MASK (HS_EXISTS | HS_LOST | HS_RELEASED | HS_ARCHIVED) - /* - * All HSM-related possible flags that could be applied to a file. - * This should be kept in sync with hsm_states. - */ -#define HSM_FLAGS_MASK (HSM_USER_MASK | HSM_STATUS_MASK) - -/** - * HSM request progress state + * NOTE: This file is DEPRECATED! Please include linux/lustre/lustre_user.h + * directly instead of this file. This file will be removed from a + * future version of lustre! */ -enum hsm_progress_states { - HPS_WAITING = 1, - HPS_RUNNING = 2, - HPS_DONE = 3, -}; -#define HPS_NONE 0 - -static inline const char *hsm_progress_state2name(enum hsm_progress_states s) -{ - switch (s) { - case HPS_WAITING: return "waiting"; - case HPS_RUNNING: return "running"; - case HPS_DONE: return "done"; - default: return "unknown"; - } -} - -struct hsm_extent { - __u64 offset; - __u64 length; -} __attribute__((packed)); - -/** - * Current HSM states of a Lustre file. - * - * This structure purpose is to be sent to user-space mainly. It describes the - * current HSM flags and in-progress action. - */ -struct hsm_user_state { - /** Current HSM states, from enum hsm_states. */ - __u32 hus_states; - __u32 hus_archive_id; - /** The current undergoing action, if there is one */ - __u32 hus_in_progress_state; - __u32 hus_in_progress_action; - struct hsm_extent hus_in_progress_location; - char hus_extended_info[]; -}; - -struct hsm_state_set_ioc { - struct lu_fid hssi_fid; - __u64 hssi_setmask; - __u64 hssi_clearmask; -}; - -/* - * This structure describes the current in-progress action for a file. - * it is retuned to user space and send over the wire - */ -struct hsm_current_action { - /** The current undergoing action, if there is one */ - /* state is one of hsm_progress_states */ - __u32 hca_state; - /* action is one of hsm_user_action */ - __u32 hca_action; - struct hsm_extent hca_location; -}; - -/***** HSM user requests ******/ -/* User-generated (lfs/ioctl) request types */ -enum hsm_user_action { - HUA_NONE = 1, /* no action (noop) */ - HUA_ARCHIVE = 10, /* copy to hsm */ - HUA_RESTORE = 11, /* prestage */ - HUA_RELEASE = 12, /* drop ost objects */ - HUA_REMOVE = 13, /* remove from archive */ - HUA_CANCEL = 14 /* cancel a request */ -}; - -static inline const char *hsm_user_action2name(enum hsm_user_action a) -{ - switch (a) { - case HUA_NONE: return "NOOP"; - case HUA_ARCHIVE: return "ARCHIVE"; - case HUA_RESTORE: return "RESTORE"; - case HUA_RELEASE: return "RELEASE"; - case HUA_REMOVE: return "REMOVE"; - case HUA_CANCEL: return "CANCEL"; - default: return "UNKNOWN"; - } -} - -/* - * List of hr_flags (bit field) - */ -#define HSM_FORCE_ACTION 0x0001 -/* used by CT, cannot be set by user */ -#define HSM_GHOST_COPY 0x0002 - -/** - * Contains all the fixed part of struct hsm_user_request. - * - */ -struct hsm_request { - __u32 hr_action; /* enum hsm_user_action */ - __u32 hr_archive_id; /* archive id, used only with HUA_ARCHIVE */ - __u64 hr_flags; /* request flags */ - __u32 hr_itemcount; /* item count in hur_user_item vector */ - __u32 hr_data_len; -}; - -struct hsm_user_item { - lustre_fid hui_fid; - struct hsm_extent hui_extent; -} __attribute__((packed)); - -struct hsm_user_request { - struct hsm_request hur_request; - struct hsm_user_item hur_user_item[0]; - /* extra data blob at end of struct (after all - * hur_user_items), only use helpers to access it - */ -} __attribute__((packed)); - -/** Return pointer to data field in a hsm user request */ -static inline void *hur_data(struct hsm_user_request *hur) -{ - return &(hur->hur_user_item[hur->hur_request.hr_itemcount]); -} - -/** - * Compute the current length of the provided hsm_user_request. This returns -1 - * instead of an errno because ssize_t is defined to be only [ -1, SSIZE_MAX ] - * - * return -1 on bounds check error. - */ -static inline ssize_t hur_len(struct hsm_user_request *hur) -{ - __u64 size; - - /* can't overflow a __u64 since hr_itemcount is only __u32 */ - size = offsetof(struct hsm_user_request, hur_user_item[0]) + - (__u64)hur->hur_request.hr_itemcount * - sizeof(hur->hur_user_item[0]) + hur->hur_request.hr_data_len; - - if (size != (ssize_t)size) - return -1; - - return size; -} - -/****** HSM RPCs to copytool *****/ -/* Message types the copytool may receive */ -enum hsm_message_type { - HMT_ACTION_LIST = 100, /* message is a hsm_action_list */ -}; - -/* Actions the copytool may be instructed to take for a given action_item */ -enum hsm_copytool_action { - HSMA_NONE = 10, /* no action */ - HSMA_ARCHIVE = 20, /* arbitrary offset */ - HSMA_RESTORE = 21, - HSMA_REMOVE = 22, - HSMA_CANCEL = 23 -}; - -static inline const char *hsm_copytool_action2name(enum hsm_copytool_action a) -{ - switch (a) { - case HSMA_NONE: return "NOOP"; - case HSMA_ARCHIVE: return "ARCHIVE"; - case HSMA_RESTORE: return "RESTORE"; - case HSMA_REMOVE: return "REMOVE"; - case HSMA_CANCEL: return "CANCEL"; - default: return "UNKNOWN"; - } -} - -/* Copytool item action description */ -struct hsm_action_item { - __u32 hai_len; /* valid size of this struct */ - __u32 hai_action; /* hsm_copytool_action, but use known size */ - lustre_fid hai_fid; /* Lustre FID to operate on */ - lustre_fid hai_dfid; /* fid used for data access */ - struct hsm_extent hai_extent; /* byte range to operate on */ - __u64 hai_cookie; /* action cookie from coordinator */ - __u64 hai_gid; /* grouplock id */ - char hai_data[0]; /* variable length */ -} __attribute__((packed)); - -/** - * helper function which print in hexa the first bytes of - * hai opaque field - * - * \param hai [IN] record to print - * \param buffer [IN,OUT] buffer to write the hex string to - * \param len [IN] max buffer length - * - * \retval buffer - */ -static inline char *hai_dump_data_field(const struct hsm_action_item *hai, - char *buffer, size_t len) -{ - int i; - int data_len; - char *ptr; - - ptr = buffer; - data_len = hai->hai_len - sizeof(*hai); - for (i = 0; (i < data_len) && (len > 2); i++) { - snprintf(ptr, 3, "%02X", (unsigned char)hai->hai_data[i]); - ptr += 2; - len -= 2; - } - - *ptr = '\0'; - - return buffer; -} - -/* Copytool action list */ -#define HAL_VERSION 1 -#define HAL_MAXSIZE LNET_MTU /* bytes, used in userspace only */ -struct hsm_action_list { - __u32 hal_version; - __u32 hal_count; /* number of hai's to follow */ - __u64 hal_compound_id; /* returned by coordinator */ - __u64 hal_flags; - __u32 hal_archive_id; /* which archive backend */ - __u32 padding1; - char hal_fsname[0]; /* null-terminated */ - /* struct hsm_action_item[hal_count] follows, aligned on 8-byte - boundaries. See hai_zero */ -} __attribute__((packed)); - -#ifndef HAVE_CFS_SIZE_ROUND -static inline int cfs_size_round (int val) -{ - return (val + 7) & (~0x7); -} -#define HAVE_CFS_SIZE_ROUND -#endif - -/* Return pointer to first hai in action list */ -static inline struct hsm_action_item *hai_first(struct hsm_action_list *hal) -{ - return (struct hsm_action_item *)(hal->hal_fsname + - cfs_size_round(strlen(hal-> \ - hal_fsname) - + 1)); -} -/* Return pointer to next hai */ -static inline struct hsm_action_item * hai_next(struct hsm_action_item *hai) -{ - return (struct hsm_action_item *)((char *)hai + - cfs_size_round(hai->hai_len)); -} - -/* Return size of an hsm_action_list */ -static inline size_t hal_size(struct hsm_action_list *hal) -{ - __u32 i; - size_t sz; - struct hsm_action_item *hai; - - sz = sizeof(*hal) + cfs_size_round(strlen(hal->hal_fsname) + 1); - hai = hai_first(hal); - for (i = 0; i < hal->hal_count ; i++, hai = hai_next(hai)) - sz += cfs_size_round(hai->hai_len); - - return sz; -} - -/* HSM file import - * describe the attributes to be set on imported file - */ -struct hsm_user_import { - __u64 hui_size; - __u64 hui_atime; - __u64 hui_mtime; - __u32 hui_atime_ns; - __u32 hui_mtime_ns; - __u32 hui_uid; - __u32 hui_gid; - __u32 hui_mode; - __u32 hui_archive_id; -}; - -/* Copytool progress reporting */ -#define HP_FLAG_COMPLETED 0x01 -#define HP_FLAG_RETRY 0x02 - -struct hsm_progress { - lustre_fid hp_fid; - __u64 hp_cookie; - struct hsm_extent hp_extent; - __u16 hp_flags; - __u16 hp_errval; /* positive val */ - __u32 padding; -}; - -struct hsm_copy { - __u64 hc_data_version; - __u16 hc_flags; - __u16 hc_errval; /* positive val */ - __u32 padding; - struct hsm_action_item hc_hai; -}; - -/* JSON objects */ -enum llapi_json_types { - LLAPI_JSON_INTEGER = 1, - LLAPI_JSON_BIGNUM, - LLAPI_JSON_REAL, - LLAPI_JSON_STRING -}; - -struct llapi_json_item { - char *lji_key; - __u32 lji_type; - union { - int lji_integer; - __u64 lji_u64; - double lji_real; - char *lji_string; - }; - struct llapi_json_item *lji_next; -}; - -struct llapi_json_item_list { - int ljil_item_count; - struct llapi_json_item *ljil_items; -}; - -enum lu_ladvise_type { - LU_LADVISE_INVALID = 0, - LU_LADVISE_WILLREAD = 1, - LU_LADVISE_DONTNEED = 2, -}; - -#define LU_LADVISE_NAMES { \ - [LU_LADVISE_WILLREAD] = "willread", \ - [LU_LADVISE_DONTNEED] = "dontneed", \ -} - -/* This is the userspace argument for ladvise. It is currently the same as - * what goes on the wire (struct lu_ladvise), but is defined separately as we - * may need info which is only used locally. */ -struct llapi_lu_ladvise { - __u16 lla_advice; /* advice type */ - __u16 lla_value1; /* values for different advice types */ - __u32 lla_value2; - __u64 lla_start; /* first byte of extent for advice */ - __u64 lla_end; /* last byte of extent for advice */ - __u32 lla_value3; - __u32 lla_value4; -}; - -enum ladvise_flag { - LF_ASYNC = 0x00000001, -}; - -#define LADVISE_MAGIC 0x1ADF1CE0 -#define LF_MASK LF_ASYNC - -/* This is the userspace argument for ladvise, corresponds to ladvise_hdr which - * is used on the wire. It is defined separately as we may need info which is - * only used locally. */ -struct llapi_ladvise_hdr { - __u32 lah_magic; /* LADVISE_MAGIC */ - __u32 lah_count; /* number of advices */ - __u64 lah_flags; /* from enum ladvise_flag */ - __u32 lah_value1; /* unused */ - __u32 lah_value2; /* unused */ - __u64 lah_value3; /* unused */ - struct llapi_lu_ladvise lah_advise[0]; /* advices in this header */ -}; - -#define LAH_COUNT_MAX (1024) - -/* Shared key */ -enum sk_crypt_alg { - SK_CRYPT_INVALID = -1, - SK_CRYPT_EMPTY = 0, - SK_CRYPT_AES256_CTR = 1, - SK_CRYPT_MAX = 2, -}; - -enum sk_hmac_alg { - SK_HMAC_INVALID = -1, - SK_HMAC_EMPTY = 0, - SK_HMAC_SHA256 = 1, - SK_HMAC_SHA512 = 2, - SK_HMAC_MAX = 3, -}; - -struct sk_crypt_type { - char *sct_name; - size_t sct_bytes; -}; -struct sk_hmac_type { - char *sht_name; - size_t sht_bytes; -}; +#include -/** @} lustreuser */ -#endif /* _LUSTRE_USER_H */ +#warning "Including lustre_user.h is deprecated. Include linux/lustre/lustre_user.h directly." diff --git a/lustre/include/lustre/lustreapi.h b/lustre/include/lustre/lustreapi.h index f2d6db8..974fc39 100644 --- a/lustre/include/lustre/lustreapi.h +++ b/lustre/include/lustre/lustreapi.h @@ -40,7 +40,7 @@ #include #include -#include +#include #ifndef LL_MAXQUOTAS #define LL_MAXQUOTAS 3 diff --git a/lustre/include/lustre_disk.h b/lustre/include/lustre_disk.h index 14f363d..92206ef 100644 --- a/lustre/include/lustre_disk.h +++ b/lustre/include/lustre_disk.h @@ -48,7 +48,7 @@ #include #include #include -#include +#include #define IS_MDT(data) ((data)->lsi_flags & LDD_F_SV_TYPE_MDT) #define IS_OST(data) ((data)->lsi_flags & LDD_F_SV_TYPE_OST) diff --git a/lustre/include/lustre/lustre_errno.h b/lustre/include/lustre_errno.h similarity index 100% rename from lustre/include/lustre/lustre_errno.h rename to lustre/include/lustre_errno.h diff --git a/lustre/include/lustre_export.h b/lustre/include/lustre_export.h index 7299b68..1c2e347 100644 --- a/lustre/include/lustre_export.h +++ b/lustre/include/lustre_export.h @@ -43,7 +43,7 @@ */ #include -#include +#include #include struct mds_client_data; diff --git a/lustre/include/lustre_fid.h b/lustre/include/lustre_fid.h index 8759b31..402cbef 100644 --- a/lustre/include/lustre_fid.h +++ b/lustre/include/lustre_fid.h @@ -149,9 +149,9 @@ */ #include -#include -#include -#include +#include +#include +#include struct lu_env; struct lu_site; diff --git a/lustre/include/lustre_fld.h b/lustre/include/lustre_fld.h index 2f39962..4d77253 100644 --- a/lustre/include/lustre_fld.h +++ b/lustre/include/lustre_fld.h @@ -38,7 +38,7 @@ * @{ */ -#include +#include #include #include diff --git a/lustre/include/lustre_import.h b/lustre/include/lustre_import.h index 1b44d32..108cec3 100644 --- a/lustre/include/lustre_import.h +++ b/lustre/include/lustre_import.h @@ -44,8 +44,7 @@ */ #include -#include - +#include /** * Adaptive Timeout stuff diff --git a/lustre/include/lustre_kernelcomm.h b/lustre/include/lustre_kernelcomm.h index cb8a29f..db681c4 100644 --- a/lustre/include/lustre_kernelcomm.h +++ b/lustre/include/lustre_kernelcomm.h @@ -38,7 +38,7 @@ #define __LUSTRE_KERNELCOMM_H__ /* For declarations shared with userspace */ -#include +#include /* prototype for callback function on kuc groups */ typedef int (*libcfs_kkuc_cb_t)(void *data, void *cb_arg); diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h index 37f6ee1..a48f510 100644 --- a/lustre/include/lustre_lfsck.h +++ b/lustre/include/lustre_lfsck.h @@ -33,7 +33,7 @@ #ifndef _LUSTRE_LFSCK_H # define _LUSTRE_LFSCK_H -#include +#include #include #include #include diff --git a/lustre/include/lustre_lib.h b/lustre/include/lustre_lib.h index 325fc9b..f8330c1 100644 --- a/lustre/include/lustre_lib.h +++ b/lustre/include/lustre_lib.h @@ -43,9 +43,9 @@ */ #include -#include -#include -#include +#include +#include +#include /* target.c */ struct ptlrpc_request; diff --git a/lustre/include/lustre_lmv.h b/lustre/include/lustre_lmv.h index f936973..aaf3a26 100644 --- a/lustre/include/lustre_lmv.h +++ b/lustre/include/lustre_lmv.h @@ -32,7 +32,7 @@ #ifndef _LUSTRE_LMV_H #define _LUSTRE_LMV_H -#include +#include struct lmv_oinfo { struct lu_fid lmo_fid; diff --git a/lustre/include/lustre_log.h b/lustre/include/lustre_log.h index 237da21..053bea1 100644 --- a/lustre/include/lustre_log.h +++ b/lustre/include/lustre_log.h @@ -52,9 +52,9 @@ */ #include -#include #include -#include +#include +#include #define LOG_NAME_LIMIT(logname, name) \ snprintf(logname, sizeof(logname), "LOGS/%s", name) diff --git a/lustre/include/lustre_mdc.h b/lustre/include/lustre_mdc.h index be0eb77..de7bc74 100644 --- a/lustre/include/lustre_mdc.h +++ b/lustre/include/lustre_mdc.h @@ -53,7 +53,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/lustre/include/lustre_mds.h b/lustre/include/lustre_mds.h index c254c7f..ede98c7 100644 --- a/lustre/include/lustre_mds.h +++ b/lustre/include/lustre_mds.h @@ -45,7 +45,7 @@ #include #include -#include +#include #include #include #include diff --git a/lustre/include/lustre_net.h b/lustre/include/lustre_net.h index b4fd0be..bf85c72 100644 --- a/lustre/include/lustre_net.h +++ b/lustre/include/lustre_net.h @@ -55,7 +55,7 @@ #include #include #include -#include +#include #include #include #include @@ -63,7 +63,7 @@ #include #include #include -#include +#include /* MD flags we _always_ use */ #define PTLRPC_MD_OPTIONS 0 diff --git a/lustre/include/lustre_nodemap.h b/lustre/include/lustre_nodemap.h index d8553e9..65d2c08 100644 --- a/lustre/include/lustre_nodemap.h +++ b/lustre/include/lustre_nodemap.h @@ -27,7 +27,7 @@ #ifndef _LUSTRE_NODEMAP_H #define _LUSTRE_NODEMAP_H -#include +#include #define LUSTRE_NODEMAP_NAME "nodemap" diff --git a/lustre/include/lustre_obdo.h b/lustre/include/lustre_obdo.h index d3afac9..dd99eee 100644 --- a/lustre/include/lustre_obdo.h +++ b/lustre/include/lustre_obdo.h @@ -35,7 +35,7 @@ #ifndef _LUSTRE_OBDO_H_ #define _LUSTRE_OBDO_H_ -#include +#include /** * Create an obdo to send over the wire diff --git a/lustre/include/lustre_swab.h b/lustre/include/lustre_swab.h index 8f8b375..153ceeb 100644 --- a/lustre/include/lustre_swab.h +++ b/lustre/include/lustre_swab.h @@ -48,7 +48,7 @@ #ifndef _LUSTRE_SWAB_H_ #define _LUSTRE_SWAB_H_ -#include +#include void lustre_swab_orphan_ent(struct lu_orphan_ent *ent); void lustre_swab_orphan_ent_v2(struct lu_orphan_ent_v2 *ent); diff --git a/lustre/include/obd.h b/lustre/include/obd.h index 390e786..29a3cb9 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -35,7 +35,7 @@ #include -#include +#include #include #include #ifdef HAVE_SERVER_SUPPORT @@ -314,7 +314,7 @@ struct client_obd { /* supported checksum types that are worked out at connect time */ __u32 cl_supp_cksum_types; /* checksum algorithm to be used */ - cksum_type_t cl_cksum_type; + enum cksum_types cl_cksum_type; /* also protected by the poorly named _loi_list_lock lock above */ struct osc_async_rc cl_ar; diff --git a/lustre/include/obd_cksum.h b/lustre/include/obd_cksum.h index 6a0cfe8..53ca52d 100644 --- a/lustre/include/obd_cksum.h +++ b/lustre/include/obd_cksum.h @@ -34,9 +34,9 @@ #define __OBD_CKSUM #include #include -#include +#include -static inline unsigned char cksum_obd2cfs(cksum_type_t cksum_type) +static inline unsigned char cksum_obd2cfs(enum cksum_types cksum_type) { switch (cksum_type) { case OBD_CKSUM_CRC32: @@ -63,7 +63,7 @@ static inline unsigned char cksum_obd2cfs(cksum_type_t cksum_type) * because that is supported by all clients since 1.8 * * In case multiple algorithms are supported the best one is used. */ -static inline u32 cksum_type_pack(cksum_type_t cksum_type) +static inline u32 cksum_type_pack(enum cksum_types cksum_type) { unsigned int performance = 0, tmp; u32 flag = OBD_FL_CKSUM_ADLER; @@ -97,7 +97,7 @@ static inline u32 cksum_type_pack(cksum_type_t cksum_type) return flag; } -static inline cksum_type_t cksum_type_unpack(u32 o_flags) +static inline enum cksum_types cksum_type_unpack(u32 o_flags) { switch (o_flags & OBD_FL_CKSUM_ALL) { case OBD_FL_CKSUM_CRC32C: @@ -115,9 +115,9 @@ static inline cksum_type_t cksum_type_unpack(u32 o_flags) * 1.8 supported ADLER it is base and not depend on hw * Client uses all available local algos */ -static inline cksum_type_t cksum_types_supported_client(void) +static inline enum cksum_types cksum_types_supported_client(void) { - cksum_type_t ret = OBD_CKSUM_ADLER; + enum cksum_types ret = OBD_CKSUM_ADLER; CDEBUG(D_INFO, "Crypto hash speed: crc %d, crc32c %d, adler %d\n", cfs_crypto_hash_speed(cksum_obd2cfs(OBD_CKSUM_CRC32)), @@ -163,7 +163,7 @@ static inline enum cksum_types cksum_types_supported_server(void) * checksum type due to its benchmarking at libcfs module load. * Caution is advised, however, since what is fastest on a single client may * not be the fastest or most efficient algorithm on the server. */ -static inline cksum_type_t cksum_type_select(cksum_type_t cksum_types) +static inline enum cksum_types cksum_type_select(enum cksum_types cksum_types) { return cksum_type_unpack(cksum_type_pack(cksum_types)); } diff --git a/lustre/include/obd_class.h b/lustre/include/obd_class.h index 72c43e5..21a7419 100644 --- a/lustre/include/obd_class.h +++ b/lustre/include/obd_class.h @@ -38,7 +38,7 @@ #include #include #include -#include +#include #include #define OBD_STATFS_NODELAY 0x0001 /* requests should be send without delay diff --git a/lustre/include/obj_update.h b/lustre/include/obj_update.h index c381f77..8c88de8 100644 --- a/lustre/include/obj_update.h +++ b/lustre/include/obj_update.h @@ -31,7 +31,7 @@ #ifndef _OBJ_UPDATE_H_ #define _OBJ_UPDATE_H_ -#include +#include static inline size_t object_update_param_size(const struct object_update_param *param) diff --git a/lustre/include/seq_range.h b/lustre/include/seq_range.h index 616ee3a..374d193 100644 --- a/lustre/include/seq_range.h +++ b/lustre/include/seq_range.h @@ -34,7 +34,7 @@ #ifndef _SEQ_RANGE_H_ #define _SEQ_RANGE_H_ -#include +#include /** * computes the sequence range type \a range diff --git a/lustre/include/uapi/linux/.gitignore b/lustre/include/uapi/linux/lustre/.gitignore similarity index 100% rename from lustre/include/uapi/linux/.gitignore rename to lustre/include/uapi/linux/lustre/.gitignore diff --git a/lustre/include/uapi/linux/Makefile.am b/lustre/include/uapi/linux/lustre/Makefile.am similarity index 67% rename from lustre/include/uapi/linux/Makefile.am rename to lustre/include/uapi/linux/lustre/Makefile.am index 06c3366..a2e099e 100644 --- a/lustre/include/uapi/linux/Makefile.am +++ b/lustre/include/uapi/linux/lustre/Makefile.am @@ -29,10 +29,35 @@ # Lustre is a trademark of Seagate, Inc. # +lustreincludedir = /usr/include/linux/lustre +lustreinclude_HEADERS = \ + lustre_barrier_user.h \ + lustre_cfg.h \ + lustre_disk.h \ + lustre_fid.h \ + lustre_fiemap.h \ + lustre_idl.h \ + lustre_ioctl.h \ + lustre_kernelcomm.h \ + lustre_lfsck_user.h \ + lustre_log_user.h \ + lustre_ostid.h \ + lustre_param.h \ + lustre_user.h \ + lustre_ver.h + EXTRA_DIST = \ + lustre_barrier_user.h \ lustre_cfg.h \ lustre_disk.h \ lustre_fid.h \ + lustre_fiemap.h \ + lustre_idl.h \ lustre_ioctl.h \ + lustre_kernelcomm.h \ + lustre_lfsck_user.h \ + lustre_log_user.h \ lustre_ostid.h \ - lustre_param.h + lustre_param.h \ + lustre_user.h \ + lustre_ver.h diff --git a/lustre/include/uapi/linux/lustre/lustre_barrier_user.h b/lustre/include/uapi/linux/lustre/lustre_barrier_user.h new file mode 100644 index 0000000..8875a3d --- /dev/null +++ b/lustre/include/uapi/linux/lustre/lustre_barrier_user.h @@ -0,0 +1,81 @@ +/* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License version 2 for more details. A copy is + * included in the COPYING file that accompanied this code. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * GPL HEADER END + */ +/* + * Copyright (c) 2016, Intel Corporation. + * + * lustre/include/lustre/lustre_barrier_user.h + * + * Lustre write barrier (on MDT) userspace interfaces. + * + * Author: Fan, Yong + */ +#ifndef _LUSTRE_BARRIER_USER_H +# define _LUSTRE_BARRIER_USER_H + +/* + * This is due to us being out of kernel and the way the OpenSFS branch + * handles CFLAGS. + */ +#ifdef __KERNEL__ +# include +#else +# include +#endif + +#define BARRIER_VERSION_V1 1 +#define BARRIER_TIMEOUT_DEFAULT 30 + +enum barrier_commands { + BC_FREEZE = 1, + BC_THAW = 2, + BC_STAT = 3, + BC_RESCAN = 4, +}; + +enum barrier_status { + BS_INIT = 0, + BS_FREEZING_P1 = 1, + BS_FREEZING_P2 = 2, + BS_FROZEN = 3, + BS_THAWING = 4, + BS_THAWED = 5, + BS_FAILED = 6, + BS_EXPIRED = 7, + BS_RESCAN = 8, +}; + +struct barrier_ctl { + __u32 bc_version; + __u32 bc_cmd; + union { + __s32 bc_timeout; + __u32 bc_total; + }; + union { + __u32 bc_status; + __u32 bc_absence; + }; + char bc_name[12]; + __u32 bc_padding; +}; + +#endif /* _LUSTRE_BARRIER_USER_H */ diff --git a/lustre/include/uapi/linux/lustre_cfg.h b/lustre/include/uapi/linux/lustre/lustre_cfg.h similarity index 97% rename from lustre/include/uapi/linux/lustre_cfg.h rename to lustre/include/uapi/linux/lustre/lustre_cfg.h index b1f68d5..c71be81 100644 --- a/lustre/include/uapi/linux/lustre_cfg.h +++ b/lustre/include/uapi/linux/lustre/lustre_cfg.h @@ -33,8 +33,17 @@ #ifndef _UAPI_LUSTRE_CFG_H #define _UAPI_LUSTRE_CFG_H +#include #include -#include +/* + * This is due to us being out of kernel and the way the OpenSFS branch + * handles CFLAGS. + */ +#ifdef __KERNEL__ +# include +#else +# include +#endif /* Handle older distros */ #ifndef __ALIGN_KERNEL diff --git a/lustre/include/uapi/linux/lustre_disk.h b/lustre/include/uapi/linux/lustre/lustre_disk.h similarity index 100% rename from lustre/include/uapi/linux/lustre_disk.h rename to lustre/include/uapi/linux/lustre/lustre_disk.h diff --git a/lustre/include/uapi/linux/lustre_fid.h b/lustre/include/uapi/linux/lustre/lustre_fid.h similarity index 97% rename from lustre/include/uapi/linux/lustre_fid.h rename to lustre/include/uapi/linux/lustre/lustre_fid.h index a43507e..e741a8f 100644 --- a/lustre/include/uapi/linux/lustre_fid.h +++ b/lustre/include/uapi/linux/lustre/lustre_fid.h @@ -37,7 +37,15 @@ #ifndef _UAPI_LUSTRE_FID_H_ #define _UAPI_LUSTRE_FID_H_ -#include +/* + * This is due to us being out of kernel and the way the OpenSFS branch + * handles CFLAGS. + */ +#ifdef __KERNEL__ +# include +#else +# include +#endif /** returns fid object sequence */ static inline __u64 fid_seq(const struct lu_fid *fid) diff --git a/lustre/include/uapi/linux/lustre/lustre_fiemap.h b/lustre/include/uapi/linux/lustre/lustre_fiemap.h new file mode 100644 index 0000000..cee135b --- /dev/null +++ b/lustre/include/uapi/linux/lustre/lustre_fiemap.h @@ -0,0 +1,75 @@ +/* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.gnu.org/licenses/gpl-2.0.html + * + * GPL HEADER END + */ +/* + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + * + * Copyright (c) 2014, 2015, Intel Corporation. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + * + * lustre/include/lustre/ll_fiemap.h + * + * FIEMAP data structures and flags. This header file will be used until + * fiemap.h is available in the upstream kernel. + * + * Author: Kalpak Shah + * Author: Andreas Dilger + */ + +#ifndef _LUSTRE_FIEMAP_H +#define _LUSTRE_FIEMAP_H + +#ifndef __KERNEL__ +#include +#include +#endif + +/* XXX: We use fiemap_extent::fe_reserved[0] */ +#define fe_device fe_reserved[0] + +static inline size_t fiemap_count_to_size(size_t extent_count) +{ + return sizeof(struct fiemap) + extent_count * + sizeof(struct fiemap_extent); +} + +static inline unsigned fiemap_size_to_count(size_t array_size) +{ + return (array_size - sizeof(struct fiemap)) / + sizeof(struct fiemap_extent); +} + +#define FIEMAP_FLAG_DEVICE_ORDER 0x40000000 /* return device ordered mapping */ + +#ifdef FIEMAP_FLAGS_COMPAT +#undef FIEMAP_FLAGS_COMPAT +#endif + +/* Lustre specific flags - use a high bit, don't conflict with upstream flag */ +#define FIEMAP_EXTENT_NO_DIRECT 0x40000000 /* Data mapping undefined */ +#define FIEMAP_EXTENT_NET 0x80000000 /* Data stored remotely. + * Sets NO_DIRECT flag */ + +#endif /* _LUSTRE_FIEMAP_H */ diff --git a/lustre/include/lustre/lustre_idl.h b/lustre/include/uapi/linux/lustre/lustre_idl.h similarity index 99% rename from lustre/include/lustre/lustre_idl.h rename to lustre/include/uapi/linux/lustre/lustre_idl.h index 9d02e4b..f124baa 100644 --- a/lustre/include/lustre/lustre_idl.h +++ b/lustre/include/uapi/linux/lustre/lustre_idl.h @@ -70,11 +70,22 @@ #define _LUSTRE_IDL_H_ #include +#include #include -#include -#include /* Defn's shared with user-space. */ -#include +/* + * This is due to us being out of kernel and the way the OpenSFS branch + * handles CFLAGS. + */ +#ifdef __KERNEL__ +# include +# include /* Defn's shared with user-space. */ +# include +#else +# include +# include +# include +#endif /* * GENERAL STUFF diff --git a/lustre/include/uapi/linux/lustre_ioctl.h b/lustre/include/uapi/linux/lustre/lustre_ioctl.h similarity index 97% rename from lustre/include/uapi/linux/lustre_ioctl.h rename to lustre/include/uapi/linux/lustre/lustre_ioctl.h index 2e8ee29..5469e29 100644 --- a/lustre/include/uapi/linux/lustre_ioctl.h +++ b/lustre/include/uapi/linux/lustre/lustre_ioctl.h @@ -31,7 +31,16 @@ #include #include #include -#include +/* + * This is due to us being out of kernel and the way the OpenSFS branch + * handles CFLAGS. + */ +#ifdef __KERNEL__ +# include +#else +# include +# define __user +#endif #if !defined(__KERNEL__) && !defined(LUSTRE_UTILS) # error This file is for Lustre internal use only. @@ -62,7 +71,6 @@ enum md_echo_cmd { #define OBD_IOCTL_VERSION 0x00010004 #define OBD_DEV_BY_DEVNAME 0xffffd0de -#define OBD_MAX_IOCTL_BUFFER CONFIG_LUSTRE_OBD_MAX_IOCTL_BUFFER struct obd_ioctl_data { __u32 ioc_len; diff --git a/lustre/include/uapi_kernelcomm.h b/lustre/include/uapi/linux/lustre/lustre_kernelcomm.h similarity index 100% rename from lustre/include/uapi_kernelcomm.h rename to lustre/include/uapi/linux/lustre/lustre_kernelcomm.h diff --git a/lustre/include/uapi/linux/lustre/lustre_lfsck_user.h b/lustre/include/uapi/linux/lustre/lustre_lfsck_user.h new file mode 100644 index 0000000..44bd131 --- /dev/null +++ b/lustre/include/uapi/linux/lustre/lustre_lfsck_user.h @@ -0,0 +1,246 @@ +/* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License version 2 for more details. A copy is + * included in the COPYING file that accompanied this code. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * GPL HEADER END + */ +/* + * Copyright (c) 2012, 2016, Intel Corporation. + */ +/* + * lustre/include/lustre/lustre_lfsck_user.h + * + * Lustre LFSCK userspace interfaces. + * + * Author: Fan, Yong + */ + +#ifndef _LUSTRE_LFSCK_USER_H +# define _LUSTRE_LFSCK_USER_H + +#include +/* + * This is due to us being out of kernel and the way the OpenSFS branch + * handles CFLAGS. + */ +#ifdef __KERNEL__ +# include +#else +# include +#endif + +/** + * state machine: + * + * LS_INIT + * | + * (lfsck|start) + * | + * v + * LS_SCANNING_PHASE1 + * | ^ + * | : + * | (lfsck:restart) + * | : + * v : + * ----------------------------------------------------------------- + * | |^ |^ |^ |^ |^ + * | |: |: |: |: |: + * v v: v: v: v: v: + * LS_SCANNING_PHASE2 LS_FAILED LS_STOPPED LS_PAUSED LS_CRASHED LS_PARTIAL + * (CO_) (CO_) (CO_) + * | ^ ^: ^: ^: ^: ^: + * | : |: |: |: |: |: + * | (lfsck:restart) |: |: |: |: |: + * v : |v |v |v |v |v + * ----------------------------------------------------------------- + * | + * v + * LS_COMPLETED + */ +enum lfsck_status { + /* The lfsck file is new created, for new MDT, upgrading from old disk, + * or re-creating the lfsck file manually. */ + LS_INIT = 0, + + /* The first-step system scanning. The checked items during the phase1 + * scanning depends on the LFSCK type. */ + LS_SCANNING_PHASE1 = 1, + + /* The second-step system scanning. The checked items during the phase2 + * scanning depends on the LFSCK type. */ + LS_SCANNING_PHASE2 = 2, + + /* The LFSCK processing has completed for all objects. */ + LS_COMPLETED = 3, + + /* The LFSCK exited automatically for failure, will not auto restart. */ + LS_FAILED = 4, + + /* The LFSCK is stopped manually, will not auto restart. */ + LS_STOPPED = 5, + + /* LFSCK is paused automatically when umount, + * will be restarted automatically when remount. */ + LS_PAUSED = 6, + + /* System crashed during the LFSCK, + * will be restarted automatically after recovery. */ + LS_CRASHED = 7, + + /* Some OST/MDT failed during the LFSCK, or not join the LFSCK. */ + LS_PARTIAL = 8, + + /* The LFSCK is failed because its controller is failed. */ + LS_CO_FAILED = 9, + + /* The LFSCK is stopped because its controller is stopped. */ + LS_CO_STOPPED = 10, + + /* The LFSCK is paused because its controller is paused. */ + LS_CO_PAUSED = 11, + + LS_MAX +}; + +static inline const char *lfsck_status2name(int status) +{ + static const char * const lfsck_status_names[] = { + [LS_INIT] = "init", + [LS_SCANNING_PHASE1] = "scanning-phase1", + [LS_SCANNING_PHASE2] = "scanning-phase2", + [LS_COMPLETED] = "completed", + [LS_FAILED] = "failed", + [LS_STOPPED] = "stopped", + [LS_PAUSED] = "paused", + [LS_CRASHED] = "crashed", + [LS_PARTIAL] = "partial", + [LS_CO_FAILED] = "co-failed", + [LS_CO_STOPPED] = "co-stopped", + [LS_CO_PAUSED] = "co-paused" + }; + + if (status < 0 || status >= LS_MAX) + return "unknown"; + + return lfsck_status_names[status]; +} + +enum lfsck_param_flags { + /* Reset LFSCK iterator position to the device beginning. */ + LPF_RESET = 0x0001, + + /* Exit when fail. */ + LPF_FAILOUT = 0x0002, + + /* Dryrun mode, only check without modification */ + LPF_DRYRUN = 0x0004, + + /* LFSCK runs on all targets. */ + LPF_ALL_TGT = 0x0008, + + /* Broadcast the command to other MDTs. Only valid on the sponsor MDT */ + LPF_BROADCAST = 0x0010, + + /* Handle orphan OST-objects. */ + LPF_OST_ORPHAN = 0x0020, + + /* Create OST-object for dangling LOV EA. */ + LPF_CREATE_OSTOBJ = 0x0040, + + /* Create MDT-object for dangling name entry. */ + LPF_CREATE_MDTOBJ = 0x0080, + + /* Do not return until the LFSCK not running. */ + LPF_WAIT = 0x0100, + + /* Delay to create OST-object for dangling LOV EA. */ + LPF_DELAY_CREATE_OSTOBJ = 0x0200, +}; + +enum lfsck_type { + /* For MDT and OST internal OSD consistency check/repair. */ + LFSCK_TYPE_SCRUB = 0x0000, + + /* For MDT-OST (layout, object) consistency check/repair. */ + LFSCK_TYPE_LAYOUT = 0x0001, + + /* For MDT (FID-in-dirent, linkEA) consistency check/repair. */ + LFSCK_TYPE_NAMESPACE = 0x0004, + LFSCK_TYPES_SUPPORTED = (LFSCK_TYPE_SCRUB | LFSCK_TYPE_LAYOUT | + LFSCK_TYPE_NAMESPACE), + LFSCK_TYPES_DEF = LFSCK_TYPES_SUPPORTED, + LFSCK_TYPES_ALL = ((__u16)(~0)) +}; + +#define LFSCK_VERSION_V1 1 +#define LFSCK_VERSION_V2 2 + +#define LFSCK_SPEED_NO_LIMIT 0 +#define LFSCK_SPEED_LIMIT_DEF LFSCK_SPEED_NO_LIMIT +#define LFSCK_ASYNC_WIN_DEFAULT 1024 +#define LFSCK_ASYNC_WIN_MAX ((__u16)(~0)) +#define LFSCK_TYPE_BITS 16 + +enum lfsck_start_valid { + LSV_SPEED_LIMIT = 0x00000001, + LSV_ERROR_HANDLE = 0x00000002, + LSV_DRYRUN = 0x00000004, + LSV_ASYNC_WINDOWS = 0x00000008, + LSV_CREATE_OSTOBJ = 0x00000010, + LSV_CREATE_MDTOBJ = 0x00000020, + LSV_DELAY_CREATE_OSTOBJ = 0x00000040, +}; + +/* Arguments for starting lfsck. */ +struct lfsck_start { + /* Which arguments are valid, see 'enum lfsck_start_valid'. */ + __u32 ls_valid; + + /* How many items can be scanned at most per second. */ + __u32 ls_speed_limit; + + /* For compatibility between user space tools and kernel service. */ + __u16 ls_version; + + /* Which LFSCK components to be (have been) started. */ + __u16 ls_active; + + /* Flags for the LFSCK, see 'enum lfsck_param_flags'. */ + __u16 ls_flags; + + /* The windows size for async requests pipeline. */ + __u16 ls_async_windows; +}; + +struct lfsck_stop { + __u32 ls_status; + __u16 ls_flags; + __u16 ls_padding_1; /* For 64-bits aligned. */ + __u64 ls_padding_2; +}; + +struct lfsck_query { + __u16 lu_types; + __u16 lu_flags; + __u32 lu_mdts_count[LFSCK_TYPE_BITS][LS_MAX + 1]; + __u32 lu_osts_count[LFSCK_TYPE_BITS][LS_MAX + 1]; + __u64 lu_repaired[LFSCK_TYPE_BITS]; +}; + +#endif /* _LUSTRE_LFSCK_USER_H */ diff --git a/lustre/include/lustre_log_user.h b/lustre/include/uapi/linux/lustre/lustre_log_user.h similarity index 91% rename from lustre/include/lustre_log_user.h rename to lustre/include/uapi/linux/lustre/lustre_log_user.h index ee5f0f7..1191c74 100644 --- a/lustre/include/lustre_log_user.h +++ b/lustre/include/uapi/linux/lustre/lustre_log_user.h @@ -38,7 +38,15 @@ #ifndef _LUSTRE_LOG_USER_H #define _LUSTRE_LOG_USER_H -#include +/* + * This is due to us being out of kernel and the way the OpenSFS branch + * handles CFLAGS. + */ +#ifdef __KERNEL__ +#include +#else +#include +#endif /* Lustre logs use FIDs constructed from oi_id and oi_seq directly, * without attempting to use the IGIF and IDIF ranges as is done diff --git a/lustre/include/uapi/linux/lustre_ostid.h b/lustre/include/uapi/linux/lustre/lustre_ostid.h similarity index 98% rename from lustre/include/uapi/linux/lustre_ostid.h rename to lustre/include/uapi/linux/lustre/lustre_ostid.h index c0e662a..8282b09 100644 --- a/lustre/include/uapi/linux/lustre_ostid.h +++ b/lustre/include/uapi/linux/lustre/lustre_ostid.h @@ -34,14 +34,15 @@ #ifndef _UAPI_LUSTRE_OSTID_H_ #define _UAPI_LUSTRE_OSTID_H_ +#include /* * This is due to us being out of kernel and the way the OpenSFS branch - * handles CFLAGS. Upstream will just have linux/lustre_fid.h + * handles CFLAGS. */ #ifdef __KERNEL__ -#include +#include #else -#include +#include #endif static inline __u64 lmm_oi_id(const struct ost_id *oi) diff --git a/lustre/include/uapi/linux/lustre_param.h b/lustre/include/uapi/linux/lustre/lustre_param.h similarity index 100% rename from lustre/include/uapi/linux/lustre_param.h rename to lustre/include/uapi/linux/lustre/lustre_param.h diff --git a/lustre/include/uapi/linux/lustre/lustre_user.h b/lustre/include/uapi/linux/lustre/lustre_user.h new file mode 100644 index 0000000..83c45d3 --- /dev/null +++ b/lustre/include/uapi/linux/lustre/lustre_user.h @@ -0,0 +1,1619 @@ +/* + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.gnu.org/licenses/gpl-2.0.html + * + * GPL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + * + * Copyright (c) 2010, 2016, Intel Corporation. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + * + * lustre/include/lustre/lustre_user.h + * + * Lustre public user-space interface definitions. + */ + +#ifndef _LUSTRE_USER_H +#define _LUSTRE_USER_H + +/** \defgroup lustreuser lustreuser + * + * @{ + */ + +#include + +#ifdef __KERNEL__ +# include +# include +# include /* snprintf() */ +# include +# include +#else /* !__KERNEL__ */ +# define NEED_QUOTA_DEFS +# include +# include +# include /* snprintf() */ +# include +# include +# include +# include +#endif /* __KERNEL__ */ + +/* + * This is a temporary solution of adding quota type. + * Should be removed as soon as system header is updated. + */ +#undef LL_MAXQUOTAS +#define LL_MAXQUOTAS 3 +#undef INITQFNAMES +#define INITQFNAMES { \ + "user", /* USRQUOTA */ \ + "group", /* GRPQUOTA */ \ + "project", /* PRJQUOTA */ \ + "undefined", \ +}; +#define PRJQUOTA 2 + +#if defined(__x86_64__) || defined(__ia64__) || defined(__ppc64__) || \ + defined(__craynv) || defined(__mips64__) || defined(__powerpc64__) || \ + defined(__aarch64__) +typedef struct stat lstat_t; +# define lstat_f lstat +# define fstat_f fstat +# define fstatat_f fstatat +# define HAVE_LOV_USER_MDS_DATA +#elif defined(__USE_LARGEFILE64) || defined(__KERNEL__) +typedef struct stat64 lstat_t; +# define lstat_f lstat64 +# define fstat_f fstat64 +# define fstatat_f fstatat64 +# define HAVE_LOV_USER_MDS_DATA +#endif + +#define LUSTRE_EOF 0xffffffffffffffffULL + +/* for statfs() */ +#define LL_SUPER_MAGIC 0x0BD00BD0 + +#ifndef FSFILT_IOC_GETFLAGS +#define FSFILT_IOC_GETFLAGS _IOR('f', 1, long) +#define FSFILT_IOC_SETFLAGS _IOW('f', 2, long) +#define FSFILT_IOC_GETVERSION _IOR('f', 3, long) +#define FSFILT_IOC_SETVERSION _IOW('f', 4, long) +#define FSFILT_IOC_GETVERSION_OLD _IOR('v', 1, long) +#define FSFILT_IOC_SETVERSION_OLD _IOW('v', 2, long) +#endif + +/* FIEMAP flags supported by Lustre */ +#define LUSTRE_FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_DEVICE_ORDER) + +enum obd_statfs_state { + OS_STATE_DEGRADED = 0x00000001, /**< RAID degraded/rebuilding */ + OS_STATE_READONLY = 0x00000002, /**< filesystem is read-only */ + OS_STATE_ENOSPC = 0x00000020, /**< not enough free space */ + OS_STATE_ENOINO = 0x00000040, /**< not enough inodes */ +}; + +struct obd_statfs { + __u64 os_type; + __u64 os_blocks; + __u64 os_bfree; + __u64 os_bavail; + __u64 os_files; + __u64 os_ffree; + __u8 os_fsid[40]; + __u32 os_bsize; + __u32 os_namelen; + __u64 os_maxbytes; + __u32 os_state; /**< obd_statfs_state OS_STATE_* flag */ + __u32 os_fprecreated; /* objs available now to the caller */ + /* used in QoS code to find preferred + * OSTs */ + __u32 os_spare2; + __u32 os_spare3; + __u32 os_spare4; + __u32 os_spare5; + __u32 os_spare6; + __u32 os_spare7; + __u32 os_spare8; + __u32 os_spare9; +}; + +/** + * File IDentifier. + * + * FID is a cluster-wide unique identifier of a file or an object (stripe). + * FIDs are never reused. + **/ +struct lu_fid { + /** + * FID sequence. Sequence is a unit of migration: all files (objects) + * with FIDs from a given sequence are stored on the same server. + * Lustre should support 2^64 objects, so even if each sequence + * has only a single object we can still enumerate 2^64 objects. + **/ + __u64 f_seq; + /* FID number within sequence. */ + __u32 f_oid; + /** + * FID version, used to distinguish different versions (in the sense + * of snapshots, etc.) of the same file system object. Not currently + * used. + **/ + __u32 f_ver; +}; + +static inline bool fid_is_zero(const struct lu_fid *fid) +{ + return fid->f_seq == 0 && fid->f_oid == 0; +} + +/* Currently, the filter_fid::ff_parent::f_ver is not the real parent + * MDT-object's FID::f_ver, instead it is the OST-object index in its + * parent MDT-object's layout EA. */ +#define f_stripe_idx f_ver + +struct ost_layout { + __u32 ol_stripe_size; + __u32 ol_stripe_count; + __u64 ol_comp_start; + __u64 ol_comp_end; + __u32 ol_comp_id; +} __attribute__((packed)); + +/* keep this one for compatibility */ +struct filter_fid_old { + struct lu_fid ff_parent; + __u64 ff_objid; + __u64 ff_seq; +}; + +struct filter_fid { + struct lu_fid ff_parent; + struct ost_layout ff_layout; +} __attribute__((packed)); + +/* Userspace should treat lu_fid as opaque, and only use the following methods + * to print or parse them. Other functions (e.g. compare, swab) could be moved + * here from lustre_idl.h if needed. */ +typedef struct lu_fid lustre_fid; + +enum lma_compat { + LMAC_HSM = 0x00000001, +/* LMAC_SOM = 0x00000002, obsolete since 2.8.0 */ + LMAC_NOT_IN_OI = 0x00000004, /* the object does NOT need OI mapping */ + LMAC_FID_ON_OST = 0x00000008, /* For OST-object, its OI mapping is + * under /O//d. */ + LMAC_STRIPE_INFO = 0x00000010, /* stripe info in the LMA EA. */ + LMAC_COMP_INFO = 0x00000020, /* Component info in the LMA EA. */ +}; + +/** + * Masks for all features that should be supported by a Lustre version to + * access a specific file. + * This information is stored in lustre_mdt_attrs::lma_incompat. + */ +enum lma_incompat { + LMAI_RELEASED = 0x00000001, /* file is released */ + LMAI_AGENT = 0x00000002, /* agent inode */ + LMAI_REMOTE_PARENT = 0x00000004, /* the parent of the object + is on the remote MDT */ + LMAI_STRIPED = 0x00000008, /* striped directory inode */ + LMAI_ORPHAN = 0x00000010, /* inode is orphan */ + LMA_INCOMPAT_SUPP = (LMAI_AGENT | LMAI_REMOTE_PARENT | \ + LMAI_STRIPED | LMAI_ORPHAN) +}; + + +/** + * Following struct for object attributes, that will be kept inode's EA. + * Introduced in 2.0 release (please see b15993, for details) + * Added to all objects since Lustre 2.4 as contains self FID + */ +struct lustre_mdt_attrs { + /** + * Bitfield for supported data in this structure. From enum lma_compat. + * lma_self_fid and lma_flags are always available. + */ + __u32 lma_compat; + /** + * Per-file incompat feature list. Lustre version should support all + * flags set in this field. The supported feature mask is available in + * LMA_INCOMPAT_SUPP. + */ + __u32 lma_incompat; + /** FID of this inode */ + struct lu_fid lma_self_fid; +}; + +struct lustre_ost_attrs { + /* Use lustre_mdt_attrs directly for now, need a common header + * structure if want to change lustre_mdt_attrs in future. */ + struct lustre_mdt_attrs loa_lma; + + /* Below five elements are for OST-object's PFID EA, the + * lma_parent_fid::f_ver is composed of the stripe_count (high 16 bits) + * and the stripe_index (low 16 bits), the size should not exceed + * 5 * sizeof(__u64)) to be accessable by old Lustre. If the flag + * LMAC_STRIPE_INFO is set, then loa_parent_fid and loa_stripe_size + * are valid; if the flag LMAC_COMP_INFO is set, then the next three + * loa_comp_* elements are valid. */ + struct lu_fid loa_parent_fid; + __u32 loa_stripe_size; + __u32 loa_comp_id; + __u64 loa_comp_start; + __u64 loa_comp_end; +}; + +/** + * Prior to 2.4, the LMA structure also included SOM attributes which has since + * been moved to a dedicated xattr + * lma_flags was also removed because of lma_compat/incompat fields. + */ +#define LMA_OLD_SIZE (sizeof(struct lustre_mdt_attrs) + 5 * sizeof(__u64)) + +/** + * OST object IDentifier. + */ +struct ost_id { + union { + struct { + __u64 oi_id; + __u64 oi_seq; + } oi; + struct lu_fid oi_fid; + }; +}; + +#define DOSTID "%#llx:%llu" +#define POSTID(oi) ((unsigned long long)ostid_seq(oi)), \ + ((unsigned long long)ostid_id(oi)) + +struct ll_futimes_3 { + __u64 lfu_atime_sec; + __u64 lfu_atime_nsec; + __u64 lfu_mtime_sec; + __u64 lfu_mtime_nsec; + __u64 lfu_ctime_sec; + __u64 lfu_ctime_nsec; +}; + +/* + * The ioctl naming rules: + * LL_* - works on the currently opened filehandle instead of parent dir + * *_OBD_* - gets data for both OSC or MDC (LOV, LMV indirectly) + * *_MDC_* - gets/sets data related to MDC + * *_LOV_* - gets/sets data related to OSC/LOV + * *FILE* - called on parent dir and passes in a filename + * *STRIPE* - set/get lov_user_md + * *INFO - set/get lov_user_mds_data + */ +/* lustre_ioctl.h 101-150 */ +#define LL_IOC_GETFLAGS _IOR ('f', 151, long) +#define LL_IOC_SETFLAGS _IOW ('f', 152, long) +#define LL_IOC_CLRFLAGS _IOW ('f', 153, long) +#define LL_IOC_LOV_SETSTRIPE _IOW ('f', 154, long) +#define LL_IOC_LOV_SETSTRIPE_NEW _IOWR('f', 154, struct lov_user_md) +#define LL_IOC_LOV_GETSTRIPE _IOW ('f', 155, long) +#define LL_IOC_LOV_GETSTRIPE_NEW _IOR('f', 155, struct lov_user_md) +#define LL_IOC_LOV_SETEA _IOW ('f', 156, long) +/* LL_IOC_RECREATE_OBJ 157 obsolete */ +/* LL_IOC_RECREATE_FID 157 obsolete */ +#define LL_IOC_GROUP_LOCK _IOW ('f', 158, long) +#define LL_IOC_GROUP_UNLOCK _IOW ('f', 159, long) +/* LL_IOC_QUOTACHECK 160 OBD_IOC_QUOTACHECK */ +/* LL_IOC_POLL_QUOTACHECK 161 OBD_IOC_POLL_QUOTACHECK */ +/* LL_IOC_QUOTACTL 162 OBD_IOC_QUOTACTL */ +#define IOC_OBD_STATFS _IOWR('f', 164, struct obd_statfs *) +/* IOC_LOV_GETINFO 165 obsolete */ +#define LL_IOC_FLUSHCTX _IOW ('f', 166, long) +/* LL_IOC_RMTACL 167 obsolete */ +#define LL_IOC_GETOBDCOUNT _IOR ('f', 168, long) +#define LL_IOC_LLOOP_ATTACH _IOWR('f', 169, long) +#define LL_IOC_LLOOP_DETACH _IOWR('f', 170, long) +#define LL_IOC_LLOOP_INFO _IOWR('f', 171, struct lu_fid) +#define LL_IOC_LLOOP_DETACH_BYDEV _IOWR('f', 172, long) +#define LL_IOC_PATH2FID _IOR ('f', 173, long) +#define LL_IOC_GET_CONNECT_FLAGS _IOWR('f', 174, __u64 *) +#define LL_IOC_GET_MDTIDX _IOR ('f', 175, int) +#define LL_IOC_FUTIMES_3 _IOWR('f', 176, struct ll_futimes_3) +/* lustre_ioctl.h 177-210 */ +#define LL_IOC_HSM_STATE_GET _IOR('f', 211, struct hsm_user_state) +#define LL_IOC_HSM_STATE_SET _IOW('f', 212, struct hsm_state_set) +#define LL_IOC_HSM_CT_START _IOW('f', 213, struct lustre_kernelcomm) +#define LL_IOC_HSM_COPY_START _IOW('f', 214, struct hsm_copy *) +#define LL_IOC_HSM_COPY_END _IOW('f', 215, struct hsm_copy *) +#define LL_IOC_HSM_PROGRESS _IOW('f', 216, struct hsm_user_request) +#define LL_IOC_HSM_REQUEST _IOW('f', 217, struct hsm_user_request) +#define LL_IOC_DATA_VERSION _IOR('f', 218, struct ioc_data_version) +#define LL_IOC_LOV_SWAP_LAYOUTS _IOW('f', 219, \ + struct lustre_swap_layouts) +#define LL_IOC_HSM_ACTION _IOR('f', 220, \ + struct hsm_current_action) +/* lustre_ioctl.h 221-232 */ +#define LL_IOC_LMV_SETSTRIPE _IOWR('f', 240, struct lmv_user_md) +#define LL_IOC_LMV_GETSTRIPE _IOWR('f', 241, struct lmv_user_md) +#define LL_IOC_REMOVE_ENTRY _IOWR('f', 242, __u64) +#define LL_IOC_SET_LEASE _IOWR('f', 243, long) +#define LL_IOC_GET_LEASE _IO('f', 244) +#define LL_IOC_HSM_IMPORT _IOWR('f', 245, struct hsm_user_import) +#define LL_IOC_LMV_SET_DEFAULT_STRIPE _IOWR('f', 246, struct lmv_user_md) +#define LL_IOC_MIGRATE _IOR('f', 247, int) +#define LL_IOC_FID2MDTIDX _IOWR('f', 248, struct lu_fid) +#define LL_IOC_GETPARENT _IOWR('f', 249, struct getparent) +#define LL_IOC_LADVISE _IOR('f', 250, struct llapi_lu_ladvise) + +#ifndef FS_IOC_FSGETXATTR +/* + * Structure for FS_IOC_FSGETXATTR and FS_IOC_FSSETXATTR. +*/ +struct fsxattr { + __u32 fsx_xflags; /* xflags field value (get/set) */ + __u32 fsx_extsize; /* extsize field value (get/set)*/ + __u32 fsx_nextents; /* nextents field value (get) */ + __u32 fsx_projid; /* project identifier (get/set) */ + unsigned char fsx_pad[12]; +}; +#define FS_IOC_FSGETXATTR _IOR('X', 31, struct fsxattr) +#define FS_IOC_FSSETXATTR _IOW('X', 32, struct fsxattr) +#endif +#define LL_IOC_FSGETXATTR FS_IOC_FSGETXATTR +#define LL_IOC_FSSETXATTR FS_IOC_FSSETXATTR + + +/* Lease types for use as arg and return of LL_IOC_{GET,SET}_LEASE ioctl. */ +enum ll_lease_type { + LL_LEASE_RDLCK = 0x1, + LL_LEASE_WRLCK = 0x2, + LL_LEASE_UNLCK = 0x4, +}; + +#define LL_STATFS_LMV 1 +#define LL_STATFS_LOV 2 +#define LL_STATFS_NODELAY 4 + +#define IOC_MDC_TYPE 'i' +#define IOC_MDC_LOOKUP _IOWR(IOC_MDC_TYPE, 20, struct obd_device *) +#define IOC_MDC_GETFILESTRIPE _IOWR(IOC_MDC_TYPE, 21, struct lov_user_md *) +#define IOC_MDC_GETFILEINFO _IOWR(IOC_MDC_TYPE, 22, struct lov_user_mds_data *) +#define LL_IOC_MDC_GETINFO _IOWR(IOC_MDC_TYPE, 23, struct lov_user_mds_data *) + +#define MAX_OBD_NAME 128 /* If this changes, a NEW ioctl must be added */ + +/* Define O_LOV_DELAY_CREATE to be a mask that is not useful for regular + * files, but are unlikely to be used in practice and are not harmful if + * used incorrectly. O_NOCTTY and FASYNC are only meaningful for character + * devices and are safe for use on new files. See LU-4209. */ +/* To be compatible with old statically linked binary we keep the check for + * the older 0100000000 flag. This is already removed upstream. LU-812. */ +#define O_LOV_DELAY_CREATE_1_8 0100000000 /* FMODE_NONOTIFY masked in 2.6.36 */ +#define O_LOV_DELAY_CREATE_MASK (O_NOCTTY | FASYNC) +#define O_LOV_DELAY_CREATE (O_LOV_DELAY_CREATE_1_8 | \ + O_LOV_DELAY_CREATE_MASK) + +#define LL_FILE_IGNORE_LOCK 0x00000001 +#define LL_FILE_GROUP_LOCKED 0x00000002 +#define LL_FILE_READAHEA 0x00000004 +#define LL_FILE_LOCKED_DIRECTIO 0x00000008 /* client-side locks with dio */ +#define LL_FILE_LOCKLESS_IO 0x00000010 /* server-side locks with cio */ + +#define LOV_USER_MAGIC_V1 0x0BD10BD0 +#define LOV_USER_MAGIC LOV_USER_MAGIC_V1 +#define LOV_USER_MAGIC_JOIN_V1 0x0BD20BD0 +#define LOV_USER_MAGIC_V3 0x0BD30BD0 +/* 0x0BD40BD0 is occupied by LOV_MAGIC_MIGRATE */ +#define LOV_USER_MAGIC_SPECIFIC 0x0BD50BD0 /* for specific OSTs */ +#define LOV_USER_MAGIC_COMP_V1 0x0BD60BD0 + +#define LMV_USER_MAGIC 0x0CD30CD0 /*default lmv magic*/ + +#define LOV_PATTERN_RAID0 0x001 +#define LOV_PATTERN_RAID1 0x002 +#define LOV_PATTERN_FIRST 0x100 +#define LOV_PATTERN_CMOBD 0x200 + +#define LOV_PATTERN_F_MASK 0xffff0000 +#define LOV_PATTERN_F_HOLE 0x40000000 /* there is hole in LOV EA */ +#define LOV_PATTERN_F_RELEASED 0x80000000 /* HSM released file */ + +static inline bool lov_pattern_supported(__u32 pattern) +{ + return pattern == LOV_PATTERN_RAID0 || + pattern == (LOV_PATTERN_RAID0 | LOV_PATTERN_F_RELEASED); +} + +#define LOV_MAXPOOLNAME 15 +#define LOV_POOLNAMEF "%.15s" + +#define LOV_MIN_STRIPE_BITS 16 /* maximum PAGE_SIZE (ia64), power of 2 */ +#define LOV_MIN_STRIPE_SIZE (1 << LOV_MIN_STRIPE_BITS) +#define LOV_MAX_STRIPE_COUNT_OLD 160 +/* This calculation is crafted so that input of 4096 will result in 160 + * which in turn is equal to old maximal stripe count. + * XXX: In fact this is too simpified for now, what it also need is to get + * ea_type argument to clearly know how much space each stripe consumes. + * + * The limit of 12 pages is somewhat arbitrary, but is a reasonably large + * allocation that is sufficient for the current generation of systems. + * + * (max buffer size - lov+rpc header) / sizeof(struct lov_ost_data_v1) */ +#define LOV_MAX_STRIPE_COUNT 2000 /* ((12 * 4096 - 256) / 24) */ +#define LOV_ALL_STRIPES 0xffff /* only valid for directories */ +#define LOV_V1_INSANE_STRIPE_COUNT 65532 /* maximum stripe count bz13933 */ + +#define XATTR_LUSTRE_PREFIX "lustre." +#define XATTR_LUSTRE_LOV XATTR_LUSTRE_PREFIX"lov" + +#define lov_user_ost_data lov_user_ost_data_v1 +struct lov_user_ost_data_v1 { /* per-stripe data structure */ + struct ost_id l_ost_oi; /* OST object ID */ + __u32 l_ost_gen; /* generation of this OST index */ + __u32 l_ost_idx; /* OST index in LOV */ +} __attribute__((packed)); + +#define lov_user_md lov_user_md_v1 +struct lov_user_md_v1 { /* LOV EA user data (host-endian) */ + __u32 lmm_magic; /* magic number = LOV_USER_MAGIC_V1 */ + __u32 lmm_pattern; /* LOV_PATTERN_RAID0, LOV_PATTERN_RAID1 */ + struct ost_id lmm_oi; /* MDT parent inode id/seq (id/0 for 1.x) */ + __u32 lmm_stripe_size; /* size of stripe in bytes */ + __u16 lmm_stripe_count; /* num stripes in use for this object */ + union { + __u16 lmm_stripe_offset; /* starting stripe offset in + * lmm_objects, use when writing */ + __u16 lmm_layout_gen; /* layout generation number + * used when reading */ + }; + struct lov_user_ost_data_v1 lmm_objects[0]; /* per-stripe data */ +} __attribute__((packed, __may_alias__)); + +struct lov_user_md_v3 { /* LOV EA user data (host-endian) */ + __u32 lmm_magic; /* magic number = LOV_USER_MAGIC_V3 */ + __u32 lmm_pattern; /* LOV_PATTERN_RAID0, LOV_PATTERN_RAID1 */ + struct ost_id lmm_oi; /* MDT parent inode id/seq (id/0 for 1.x) */ + __u32 lmm_stripe_size; /* size of stripe in bytes */ + __u16 lmm_stripe_count; /* num stripes in use for this object */ + union { + __u16 lmm_stripe_offset; /* starting stripe offset in + * lmm_objects, use when writing */ + __u16 lmm_layout_gen; /* layout generation number + * used when reading */ + }; + char lmm_pool_name[LOV_MAXPOOLNAME + 1]; /* pool name */ + struct lov_user_ost_data_v1 lmm_objects[0]; /* per-stripe data */ +} __attribute__((packed)); + +struct lu_extent { + __u64 e_start; + __u64 e_end; +}; + +#define DEXT "[ %#llx , %#llx )" +#define PEXT(ext) (ext)->e_start, (ext)->e_end + +static inline bool lu_extent_is_overlapped(struct lu_extent *e1, + struct lu_extent *e2) +{ + return e1->e_start < e2->e_end && e2->e_start < e1->e_end; +} + +enum lov_comp_md_entry_flags { + LCME_FL_PRIMARY = 0x00000001, /* Not used */ + LCME_FL_STALE = 0x00000002, /* Not used */ + LCME_FL_OFFLINE = 0x00000004, /* Not used */ + LCME_FL_PREFERRED = 0x00000008, /* Not used */ + LCME_FL_INIT = 0x00000010, /* instantiated */ + LCME_FL_NEG = 0x80000000 /* used to indicate a negative flag, + won't be stored on disk */ +}; + +#define LCME_KNOWN_FLAGS (LCME_FL_NEG | LCME_FL_INIT) + +/* lcme_id can be specified as certain flags, and the the first + * bit of lcme_id is used to indicate that the ID is representing + * certain LCME_FL_* but not a real ID. Which implies we can have + * at most 31 flags (see LCME_FL_XXX). */ +enum lcme_id { + LCME_ID_INVAL = 0x0, + LCME_ID_MAX = 0x7FFFFFFF, + LCME_ID_ALL = 0xFFFFFFFF, + LCME_ID_NOT_ID = LCME_FL_NEG +}; + +#define LCME_ID_MASK LCME_ID_MAX + +struct lov_comp_md_entry_v1 { + __u32 lcme_id; /* unique id of component */ + __u32 lcme_flags; /* LCME_FL_XXX */ + struct lu_extent lcme_extent; /* file extent for component */ + __u32 lcme_offset; /* offset of component blob, + start from lov_comp_md_v1 */ + __u32 lcme_size; /* size of component blob */ + __u64 lcme_padding[2]; +} __attribute__((packed)); + +enum lov_comp_md_flags; + +struct lov_comp_md_v1 { + __u32 lcm_magic; /* LOV_USER_MAGIC_COMP_V1 */ + __u32 lcm_size; /* overall size including this struct */ + __u32 lcm_layout_gen; + __u16 lcm_flags; + __u16 lcm_entry_count; + __u64 lcm_padding1; + __u64 lcm_padding2; + struct lov_comp_md_entry_v1 lcm_entries[0]; +} __attribute__((packed)); + +static inline __u32 lov_user_md_size(__u16 stripes, __u32 lmm_magic) +{ + if (stripes == (__u16)-1) + stripes = 0; + + if (lmm_magic == LOV_USER_MAGIC_V1) + return sizeof(struct lov_user_md_v1) + + stripes * sizeof(struct lov_user_ost_data_v1); + return sizeof(struct lov_user_md_v3) + + stripes * sizeof(struct lov_user_ost_data_v1); +} + +/* Compile with -D_LARGEFILE64_SOURCE or -D_GNU_SOURCE (or #define) to + * use this. It is unsafe to #define those values in this header as it + * is possible the application has already #included . */ +#ifdef HAVE_LOV_USER_MDS_DATA +#define lov_user_mds_data lov_user_mds_data_v1 +struct lov_user_mds_data_v1 { + lstat_t lmd_st; /* MDS stat struct */ + struct lov_user_md_v1 lmd_lmm; /* LOV EA V1 user data */ +} __attribute__((packed)); + +struct lov_user_mds_data_v3 { + lstat_t lmd_st; /* MDS stat struct */ + struct lov_user_md_v3 lmd_lmm; /* LOV EA V3 user data */ +} __attribute__((packed)); +#endif + +struct lmv_user_mds_data { + struct lu_fid lum_fid; + __u32 lum_padding; + __u32 lum_mds; +}; + +enum lmv_hash_type { + LMV_HASH_TYPE_UNKNOWN = 0, /* 0 is reserved for testing purpose */ + LMV_HASH_TYPE_ALL_CHARS = 1, + LMV_HASH_TYPE_FNV_1A_64 = 2, + LMV_HASH_TYPE_MAX, +}; + +#define LMV_HASH_NAME_ALL_CHARS "all_char" +#define LMV_HASH_NAME_FNV_1A_64 "fnv_1a_64" + +extern char *mdt_hash_name[LMV_HASH_TYPE_MAX]; + +/* Got this according to how get LOV_MAX_STRIPE_COUNT, see above, + * (max buffer size - lmv+rpc header) / sizeof(struct lmv_user_mds_data) */ +#define LMV_MAX_STRIPE_COUNT 2000 /* ((12 * 4096 - 256) / 24) */ +#define lmv_user_md lmv_user_md_v1 +struct lmv_user_md_v1 { + __u32 lum_magic; /* must be the first field */ + __u32 lum_stripe_count; /* dirstripe count */ + __u32 lum_stripe_offset; /* MDT idx for default dirstripe */ + __u32 lum_hash_type; /* Dir stripe policy */ + __u32 lum_type; /* LMV type: default or normal */ + __u32 lum_padding1; + __u32 lum_padding2; + __u32 lum_padding3; + char lum_pool_name[LOV_MAXPOOLNAME + 1]; + struct lmv_user_mds_data lum_objects[0]; +} __attribute__((packed)); + +static inline int lmv_user_md_size(int stripes, int lmm_magic) +{ + return sizeof(struct lmv_user_md) + + stripes * sizeof(struct lmv_user_mds_data); +} + +struct ll_recreate_obj { + __u64 lrc_id; + __u32 lrc_ost_idx; +}; + +struct ll_fid { + __u64 id; /* holds object id */ + __u32 generation; /* holds object generation */ + __u32 f_type; /* holds object type or stripe idx when passing it to + * OST for saving into EA. */ +}; + +#define UUID_MAX 40 +struct obd_uuid { + char uuid[UUID_MAX]; +}; + +static inline bool obd_uuid_equals(const struct obd_uuid *u1, + const struct obd_uuid *u2) +{ + return strcmp((char *)u1->uuid, (char *)u2->uuid) == 0; +} + +static inline int obd_uuid_empty(struct obd_uuid *uuid) +{ + return uuid->uuid[0] == '\0'; +} + +static inline void obd_str2uuid(struct obd_uuid *uuid, const char *tmp) +{ + strncpy((char *)uuid->uuid, tmp, sizeof(*uuid)); + uuid->uuid[sizeof(*uuid) - 1] = '\0'; +} + +/* For printf's only, make sure uuid is terminated */ +static inline char *obd_uuid2str(const struct obd_uuid *uuid) +{ + if (uuid == NULL) + return NULL; + + if (uuid->uuid[sizeof(*uuid) - 1] != '\0') { + /* Obviously not safe, but for printfs, no real harm done... + we're always null-terminated, even in a race. */ + static char temp[sizeof(*uuid)]; + memcpy(temp, uuid->uuid, sizeof(*uuid) - 1); + temp[sizeof(*uuid) - 1] = '\0'; + return temp; + } + return (char *)(uuid->uuid); +} + +/* Extract fsname from uuid (or target name) of a target + e.g. (myfs-OST0007_UUID -> myfs) + see also deuuidify. */ +static inline void obd_uuid2fsname(char *buf, char *uuid, int buflen) +{ + char *p; + + strncpy(buf, uuid, buflen - 1); + buf[buflen - 1] = '\0'; + p = strrchr(buf, '-'); + if (p != NULL) + *p = '\0'; +} + +/* printf display format for Lustre FIDs + * usage: printf("file FID is "DFID"\n", PFID(fid)); */ +#define FID_NOBRACE_LEN 40 +#define FID_LEN (FID_NOBRACE_LEN + 2) +#define DFID_NOBRACE "%#llx:0x%x:0x%x" +#define DFID "["DFID_NOBRACE"]" +#define PFID(fid) (unsigned long long)(fid)->f_seq, (fid)->f_oid, (fid)->f_ver + +/* scanf input parse format for fids in DFID_NOBRACE format + * Need to strip '[' from DFID format first or use "["SFID"]" at caller. + * usage: sscanf(fidstr, SFID, RFID(&fid)); */ +#define SFID "0x%llx:0x%x:0x%x" +#define RFID(fid) &((fid)->f_seq), &((fid)->f_oid), &((fid)->f_ver) + +/********* Quotas **********/ + +#define LUSTRE_QUOTABLOCK_BITS 10 +#define LUSTRE_QUOTABLOCK_SIZE (1 << LUSTRE_QUOTABLOCK_BITS) + +static inline __u64 lustre_stoqb(size_t space) +{ + return (space + LUSTRE_QUOTABLOCK_SIZE - 1) >> LUSTRE_QUOTABLOCK_BITS; +} + +#define Q_QUOTACHECK 0x800100 /* deprecated as of 2.4 */ +#define Q_INITQUOTA 0x800101 /* deprecated as of 2.4 */ +#define Q_GETOINFO 0x800102 /* get obd quota info */ +#define Q_GETOQUOTA 0x800103 /* get obd quotas */ +#define Q_FINVALIDATE 0x800104 /* deprecated as of 2.4 */ + +/* these must be explicitly translated into linux Q_* in ll_dir_ioctl */ +#define LUSTRE_Q_QUOTAON 0x800002 /* deprecated as of 2.4 */ +#define LUSTRE_Q_QUOTAOFF 0x800003 /* deprecated as of 2.4 */ +#define LUSTRE_Q_GETINFO 0x800005 /* get information about quota files */ +#define LUSTRE_Q_SETINFO 0x800006 /* set information about quota files */ +#define LUSTRE_Q_GETQUOTA 0x800007 /* get user quota structure */ +#define LUSTRE_Q_SETQUOTA 0x800008 /* set user quota structure */ +/* lustre-specific control commands */ +#define LUSTRE_Q_INVALIDATE 0x80000b /* deprecated as of 2.4 */ +#define LUSTRE_Q_FINVALIDATE 0x80000c /* deprecated as of 2.4 */ + +#define ALLQUOTA 255 /* set all quota */ +static inline char *qtype_name(int qtype) +{ + switch (qtype) { + case USRQUOTA: + return "usr"; + case GRPQUOTA: + return "grp"; + case PRJQUOTA: + return "prj"; + } + return "unknown"; +} + +#define IDENTITY_DOWNCALL_MAGIC 0x6d6dd629 + +/* permission */ +#define N_PERMS_MAX 64 + +struct perm_downcall_data { + __u64 pdd_nid; + __u32 pdd_perm; + __u32 pdd_padding; +}; + +struct identity_downcall_data { + __u32 idd_magic; + __u32 idd_err; + __u32 idd_uid; + __u32 idd_gid; + __u32 idd_nperms; + __u32 idd_ngroups; + struct perm_downcall_data idd_perms[N_PERMS_MAX]; + __u32 idd_groups[0]; +}; + +#ifdef NEED_QUOTA_DEFS +#ifndef QIF_BLIMITS +#define QIF_BLIMITS 1 +#define QIF_SPACE 2 +#define QIF_ILIMITS 4 +#define QIF_INODES 8 +#define QIF_BTIME 16 +#define QIF_ITIME 32 +#define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS) +#define QIF_USAGE (QIF_SPACE | QIF_INODES) +#define QIF_TIMES (QIF_BTIME | QIF_ITIME) +#define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES) +#endif + +#endif /* !__KERNEL__ */ + +/* lustre volatile file support + * file name header: .^L^S^T^R:volatile" + */ +#define LUSTRE_VOLATILE_HDR ".\x0c\x13\x14\x12:VOLATILE" +#define LUSTRE_VOLATILE_HDR_LEN 14 + +typedef enum lustre_quota_version { + LUSTRE_QUOTA_V2 = 1 +} lustre_quota_version_t; + +/* XXX: same as if_dqinfo struct in kernel */ +struct obd_dqinfo { + __u64 dqi_bgrace; + __u64 dqi_igrace; + __u32 dqi_flags; + __u32 dqi_valid; +}; + +/* XXX: same as if_dqblk struct in kernel, plus one padding */ +struct obd_dqblk { + __u64 dqb_bhardlimit; + __u64 dqb_bsoftlimit; + __u64 dqb_curspace; + __u64 dqb_ihardlimit; + __u64 dqb_isoftlimit; + __u64 dqb_curinodes; + __u64 dqb_btime; + __u64 dqb_itime; + __u32 dqb_valid; + __u32 dqb_padding; +}; + +enum { + QC_GENERAL = 0, + QC_MDTIDX = 1, + QC_OSTIDX = 2, + QC_UUID = 3 +}; + +struct if_quotactl { + __u32 qc_cmd; + __u32 qc_type; + __u32 qc_id; + __u32 qc_stat; + __u32 qc_valid; + __u32 qc_idx; + struct obd_dqinfo qc_dqinfo; + struct obd_dqblk qc_dqblk; + char obd_type[16]; + struct obd_uuid obd_uuid; +}; + +/* swap layout flags */ +#define SWAP_LAYOUTS_CHECK_DV1 (1 << 0) +#define SWAP_LAYOUTS_CHECK_DV2 (1 << 1) +#define SWAP_LAYOUTS_KEEP_MTIME (1 << 2) +#define SWAP_LAYOUTS_KEEP_ATIME (1 << 3) +#define SWAP_LAYOUTS_CLOSE (1 << 4) + +/* Swap XATTR_NAME_HSM as well, only on the MDT so far */ +#define SWAP_LAYOUTS_MDS_HSM (1 << 31) +struct lustre_swap_layouts { + __u64 sl_flags; + __u32 sl_fd; + __u32 sl_gid; + __u64 sl_dv1; + __u64 sl_dv2; +}; + + +/********* Changelogs **********/ +/** Changelog record types */ +enum changelog_rec_type { + CL_MARK = 0, + CL_CREATE = 1, /* namespace */ + CL_MKDIR = 2, /* namespace */ + CL_HARDLINK = 3, /* namespace */ + CL_SOFTLINK = 4, /* namespace */ + CL_MKNOD = 5, /* namespace */ + CL_UNLINK = 6, /* namespace */ + CL_RMDIR = 7, /* namespace */ + CL_RENAME = 8, /* namespace */ + CL_EXT = 9, /* namespace extended record (2nd half of rename) */ + CL_OPEN = 10, /* not currently used */ + CL_CLOSE = 11, /* may be written to log only with mtime change */ + CL_LAYOUT = 12, /* file layout/striping modified */ + CL_TRUNC = 13, + CL_SETATTR = 14, + CL_XATTR = 15, + CL_HSM = 16, /* HSM specific events, see flags */ + CL_MTIME = 17, /* Precedence: setattr > mtime > ctime > atime */ + CL_CTIME = 18, + CL_ATIME = 19, + CL_MIGRATE = 20, + CL_LAST +}; + +static inline const char *changelog_type2str(int type) { + static const char *changelog_str[] = { + "MARK", "CREAT", "MKDIR", "HLINK", "SLINK", "MKNOD", "UNLNK", + "RMDIR", "RENME", "RNMTO", "OPEN", "CLOSE", "LYOUT", "TRUNC", + "SATTR", "XATTR", "HSM", "MTIME", "CTIME", "ATIME", "MIGRT" + }; + + if (type >= 0 && type < CL_LAST) + return changelog_str[type]; + return NULL; +} + +/* per-record flags */ +#define CLF_FLAGSHIFT 12 +#define CLF_FLAGMASK ((1U << CLF_FLAGSHIFT) - 1) +#define CLF_VERMASK (~CLF_FLAGMASK) +enum changelog_rec_flags { + CLF_VERSION = 0x1000, + CLF_RENAME = 0x2000, + CLF_JOBID = 0x4000, + CLF_SUPPORTED = CLF_VERSION | CLF_RENAME | CLF_JOBID +}; + + +/* Anything under the flagmask may be per-type (if desired) */ +/* Flags for unlink */ +#define CLF_UNLINK_LAST 0x0001 /* Unlink of last hardlink */ +#define CLF_UNLINK_HSM_EXISTS 0x0002 /* File has something in HSM */ + /* HSM cleaning needed */ +/* Flags for rename */ +#define CLF_RENAME_LAST 0x0001 /* rename unlink last hardlink + * of target */ +#define CLF_RENAME_LAST_EXISTS 0x0002 /* rename unlink last hardlink of target + * has an archive in backend */ + +/* Flags for HSM */ +/* 12b used (from high weight to low weight): + * 2b for flags + * 3b for event + * 7b for error code + */ +#define CLF_HSM_ERR_L 0 /* HSM return code, 7 bits */ +#define CLF_HSM_ERR_H 6 +#define CLF_HSM_EVENT_L 7 /* HSM event, 3 bits, see enum hsm_event */ +#define CLF_HSM_EVENT_H 9 +#define CLF_HSM_FLAG_L 10 /* HSM flags, 2 bits, 1 used, 1 spare */ +#define CLF_HSM_FLAG_H 11 +#define CLF_HSM_SPARE_L 12 /* 4 spare bits */ +#define CLF_HSM_SPARE_H 15 +#define CLF_HSM_LAST 15 + +/* Remove bits higher than _h, then extract the value + * between _h and _l by shifting lower weigth to bit 0. */ +#define CLF_GET_BITS(_b, _h, _l) (((_b << (CLF_HSM_LAST - _h)) & 0xFFFF) \ + >> (CLF_HSM_LAST - _h + _l)) + +#define CLF_HSM_SUCCESS 0x00 +#define CLF_HSM_MAXERROR 0x7E +#define CLF_HSM_ERROVERFLOW 0x7F + +#define CLF_HSM_DIRTY 1 /* file is dirty after HSM request end */ + +/* 3 bits field => 8 values allowed */ +enum hsm_event { + HE_ARCHIVE = 0, + HE_RESTORE = 1, + HE_CANCEL = 2, + HE_RELEASE = 3, + HE_REMOVE = 4, + HE_STATE = 5, + HE_SPARE1 = 6, + HE_SPARE2 = 7, +}; + +static inline enum hsm_event hsm_get_cl_event(__u16 flags) +{ + return (enum hsm_event)CLF_GET_BITS(flags, CLF_HSM_EVENT_H, + CLF_HSM_EVENT_L); +} + +static inline void hsm_set_cl_event(int *flags, enum hsm_event he) +{ + *flags |= (he << CLF_HSM_EVENT_L); +} + +static inline __u16 hsm_get_cl_flags(int flags) +{ + return CLF_GET_BITS(flags, CLF_HSM_FLAG_H, CLF_HSM_FLAG_L); +} + +static inline void hsm_set_cl_flags(int *flags, int bits) +{ + *flags |= (bits << CLF_HSM_FLAG_L); +} + +static inline int hsm_get_cl_error(int flags) +{ + return CLF_GET_BITS(flags, CLF_HSM_ERR_H, CLF_HSM_ERR_L); +} + +static inline void hsm_set_cl_error(int *flags, int error) +{ + *flags |= (error << CLF_HSM_ERR_L); +} + +enum changelog_send_flag { + /* Not yet implemented */ + CHANGELOG_FLAG_FOLLOW = 0x01, + /* Blocking IO makes sense in case of slow user parsing of the records, + * but it also prevents us from cleaning up if the records are not + * consumed. */ + CHANGELOG_FLAG_BLOCK = 0x02, + /* Pack jobid into the changelog records if available. */ + CHANGELOG_FLAG_JOBID = 0x04, +}; + +#define CR_MAXSIZE cfs_size_round(2 * NAME_MAX + 2 + \ + changelog_rec_offset(CLF_SUPPORTED)) + +/* 31 usable bytes string + null terminator. */ +#define LUSTRE_JOBID_SIZE 32 + +/* This is the minimal changelog record. It can contain extensions + * such as rename fields or process jobid. Its exact content is described + * by the cr_flags. + * + * Extensions are packed in the same order as their corresponding flags. + */ +struct changelog_rec { + __u16 cr_namelen; + __u16 cr_flags; /**< \a changelog_rec_flags */ + __u32 cr_type; /**< \a changelog_rec_type */ + __u64 cr_index; /**< changelog record number */ + __u64 cr_prev; /**< last index for this target fid */ + __u64 cr_time; + union { + lustre_fid cr_tfid; /**< target fid */ + __u32 cr_markerflags; /**< CL_MARK flags */ + }; + lustre_fid cr_pfid; /**< parent fid */ +}; + +/* Changelog extension for RENAME. */ +struct changelog_ext_rename { + lustre_fid cr_sfid; /**< source fid, or zero */ + lustre_fid cr_spfid; /**< source parent fid, or zero */ +}; + +/* Changelog extension to include JOBID. */ +struct changelog_ext_jobid { + char cr_jobid[LUSTRE_JOBID_SIZE]; /**< zero-terminated string. */ +}; + + +static inline size_t changelog_rec_offset(enum changelog_rec_flags crf) +{ + size_t size = sizeof(struct changelog_rec); + + if (crf & CLF_RENAME) + size += sizeof(struct changelog_ext_rename); + + if (crf & CLF_JOBID) + size += sizeof(struct changelog_ext_jobid); + + return size; +} + +static inline size_t changelog_rec_size(const struct changelog_rec *rec) +{ + return changelog_rec_offset(rec->cr_flags); +} + +static inline size_t changelog_rec_varsize(const struct changelog_rec *rec) +{ + return changelog_rec_size(rec) - sizeof(*rec) + rec->cr_namelen; +} + +static inline +struct changelog_ext_rename *changelog_rec_rename(const struct changelog_rec *rec) +{ + enum changelog_rec_flags crf = rec->cr_flags & CLF_VERSION; + + return (struct changelog_ext_rename *)((char *)rec + + changelog_rec_offset(crf)); +} + +/* The jobid follows the rename extension, if present */ +static inline +struct changelog_ext_jobid *changelog_rec_jobid(const struct changelog_rec *rec) +{ + enum changelog_rec_flags crf = rec->cr_flags & + (CLF_VERSION | CLF_RENAME); + + return (struct changelog_ext_jobid *)((char *)rec + + changelog_rec_offset(crf)); +} + +/* The name follows the rename and jobid extensions, if present */ +static inline char *changelog_rec_name(const struct changelog_rec *rec) +{ + return (char *)rec + changelog_rec_offset(rec->cr_flags & + CLF_SUPPORTED); +} + +static inline size_t changelog_rec_snamelen(const struct changelog_rec *rec) +{ + return rec->cr_namelen - strlen(changelog_rec_name(rec)) - 1; +} + +static inline char *changelog_rec_sname(const struct changelog_rec *rec) +{ + char *cr_name = changelog_rec_name(rec); + + return cr_name + strlen(cr_name) + 1; +} + +/** + * Remap a record to the desired format as specified by the crf flags. + * The record must be big enough to contain the final remapped version. + * Superfluous extension fields are removed and missing ones are added + * and zeroed. The flags of the record are updated accordingly. + * + * The jobid and rename extensions can be added to a record, to match the + * format an application expects, typically. In this case, the newly added + * fields will be zeroed. + * The Jobid field can be removed, to guarantee compatibility with older + * clients that don't expect this field in the records they process. + * + * The following assumptions are being made: + * - CLF_RENAME will not be removed + * - CLF_JOBID will not be added without CLF_RENAME being added too + * + * @param[in,out] rec The record to remap. + * @param[in] crf_wanted Flags describing the desired extensions. + */ +static inline void changelog_remap_rec(struct changelog_rec *rec, + enum changelog_rec_flags crf_wanted) +{ + char *jid_mov; + char *rnm_mov; + + crf_wanted &= CLF_SUPPORTED; + + if ((rec->cr_flags & CLF_SUPPORTED) == crf_wanted) + return; + + /* First move the variable-length name field */ + memmove((char *)rec + changelog_rec_offset(crf_wanted), + changelog_rec_name(rec), rec->cr_namelen); + + /* Locations of jobid and rename extensions in the remapped record */ + jid_mov = (char *)rec + + changelog_rec_offset(crf_wanted & ~CLF_JOBID); + rnm_mov = (char *)rec + + changelog_rec_offset(crf_wanted & ~(CLF_JOBID | CLF_RENAME)); + + /* Move the extension fields to the desired positions */ + if ((crf_wanted & CLF_JOBID) && (rec->cr_flags & CLF_JOBID)) + memmove(jid_mov, changelog_rec_jobid(rec), + sizeof(struct changelog_ext_jobid)); + + if ((crf_wanted & CLF_RENAME) && (rec->cr_flags & CLF_RENAME)) + memmove(rnm_mov, changelog_rec_rename(rec), + sizeof(struct changelog_ext_rename)); + + /* Clear newly added fields */ + if ((crf_wanted & CLF_JOBID) && !(rec->cr_flags & CLF_JOBID)) + memset(jid_mov, 0, sizeof(struct changelog_ext_jobid)); + + if ((crf_wanted & CLF_RENAME) && !(rec->cr_flags & CLF_RENAME)) + memset(rnm_mov, 0, sizeof(struct changelog_ext_rename)); + + /* Update the record's flags accordingly */ + rec->cr_flags = (rec->cr_flags & CLF_FLAGMASK) | crf_wanted; +} + +enum changelog_message_type { + CL_RECORD = 10, /* message is a changelog_rec */ + CL_EOF = 11, /* at end of current changelog */ +}; + +/********* Misc **********/ + +struct ioc_data_version { + __u64 idv_version; + __u64 idv_flags; /* See LL_DV_xxx */ +}; +#define LL_DV_RD_FLUSH (1 << 0) /* Flush dirty pages from clients */ +#define LL_DV_WR_FLUSH (1 << 1) /* Flush all caching pages from clients */ + +#ifndef offsetof +#define offsetof(typ, memb) ((unsigned long)((char *)&(((typ *)0)->memb))) +#endif + +#define dot_lustre_name ".lustre" + + +/********* HSM **********/ + +/** HSM per-file state + * See HSM_FLAGS below. + */ +enum hsm_states { + HS_NONE = 0x00000000, + HS_EXISTS = 0x00000001, + HS_DIRTY = 0x00000002, + HS_RELEASED = 0x00000004, + HS_ARCHIVED = 0x00000008, + HS_NORELEASE = 0x00000010, + HS_NOARCHIVE = 0x00000020, + HS_LOST = 0x00000040, +}; + +/* HSM user-setable flags. */ +#define HSM_USER_MASK (HS_NORELEASE | HS_NOARCHIVE | HS_DIRTY) + +/* Other HSM flags. */ +#define HSM_STATUS_MASK (HS_EXISTS | HS_LOST | HS_RELEASED | HS_ARCHIVED) + +/* + * All HSM-related possible flags that could be applied to a file. + * This should be kept in sync with hsm_states. + */ +#define HSM_FLAGS_MASK (HSM_USER_MASK | HSM_STATUS_MASK) + +/** + * HSM request progress state + */ +enum hsm_progress_states { + HPS_WAITING = 1, + HPS_RUNNING = 2, + HPS_DONE = 3, +}; +#define HPS_NONE 0 + +static inline const char *hsm_progress_state2name(enum hsm_progress_states s) +{ + switch (s) { + case HPS_WAITING: return "waiting"; + case HPS_RUNNING: return "running"; + case HPS_DONE: return "done"; + default: return "unknown"; + } +} + +struct hsm_extent { + __u64 offset; + __u64 length; +} __attribute__((packed)); + +/** + * Current HSM states of a Lustre file. + * + * This structure purpose is to be sent to user-space mainly. It describes the + * current HSM flags and in-progress action. + */ +struct hsm_user_state { + /** Current HSM states, from enum hsm_states. */ + __u32 hus_states; + __u32 hus_archive_id; + /** The current undergoing action, if there is one */ + __u32 hus_in_progress_state; + __u32 hus_in_progress_action; + struct hsm_extent hus_in_progress_location; + char hus_extended_info[]; +}; + +struct hsm_state_set_ioc { + struct lu_fid hssi_fid; + __u64 hssi_setmask; + __u64 hssi_clearmask; +}; + +/* + * This structure describes the current in-progress action for a file. + * it is retuned to user space and send over the wire + */ +struct hsm_current_action { + /** The current undergoing action, if there is one */ + /* state is one of hsm_progress_states */ + __u32 hca_state; + /* action is one of hsm_user_action */ + __u32 hca_action; + struct hsm_extent hca_location; +}; + +/***** HSM user requests ******/ +/* User-generated (lfs/ioctl) request types */ +enum hsm_user_action { + HUA_NONE = 1, /* no action (noop) */ + HUA_ARCHIVE = 10, /* copy to hsm */ + HUA_RESTORE = 11, /* prestage */ + HUA_RELEASE = 12, /* drop ost objects */ + HUA_REMOVE = 13, /* remove from archive */ + HUA_CANCEL = 14 /* cancel a request */ +}; + +static inline const char *hsm_user_action2name(enum hsm_user_action a) +{ + switch (a) { + case HUA_NONE: return "NOOP"; + case HUA_ARCHIVE: return "ARCHIVE"; + case HUA_RESTORE: return "RESTORE"; + case HUA_RELEASE: return "RELEASE"; + case HUA_REMOVE: return "REMOVE"; + case HUA_CANCEL: return "CANCEL"; + default: return "UNKNOWN"; + } +} + +/* + * List of hr_flags (bit field) + */ +#define HSM_FORCE_ACTION 0x0001 +/* used by CT, cannot be set by user */ +#define HSM_GHOST_COPY 0x0002 + +/** + * Contains all the fixed part of struct hsm_user_request. + * + */ +struct hsm_request { + __u32 hr_action; /* enum hsm_user_action */ + __u32 hr_archive_id; /* archive id, used only with HUA_ARCHIVE */ + __u64 hr_flags; /* request flags */ + __u32 hr_itemcount; /* item count in hur_user_item vector */ + __u32 hr_data_len; +}; + +struct hsm_user_item { + lustre_fid hui_fid; + struct hsm_extent hui_extent; +} __attribute__((packed)); + +struct hsm_user_request { + struct hsm_request hur_request; + struct hsm_user_item hur_user_item[0]; + /* extra data blob at end of struct (after all + * hur_user_items), only use helpers to access it + */ +} __attribute__((packed)); + +/** Return pointer to data field in a hsm user request */ +static inline void *hur_data(struct hsm_user_request *hur) +{ + return &(hur->hur_user_item[hur->hur_request.hr_itemcount]); +} + +/** + * Compute the current length of the provided hsm_user_request. This returns -1 + * instead of an errno because ssize_t is defined to be only [ -1, SSIZE_MAX ] + * + * return -1 on bounds check error. + */ +static inline ssize_t hur_len(struct hsm_user_request *hur) +{ + __u64 size; + + /* can't overflow a __u64 since hr_itemcount is only __u32 */ + size = offsetof(struct hsm_user_request, hur_user_item[0]) + + (__u64)hur->hur_request.hr_itemcount * + sizeof(hur->hur_user_item[0]) + hur->hur_request.hr_data_len; + + if (size != (ssize_t)size) + return -1; + + return size; +} + +/****** HSM RPCs to copytool *****/ +/* Message types the copytool may receive */ +enum hsm_message_type { + HMT_ACTION_LIST = 100, /* message is a hsm_action_list */ +}; + +/* Actions the copytool may be instructed to take for a given action_item */ +enum hsm_copytool_action { + HSMA_NONE = 10, /* no action */ + HSMA_ARCHIVE = 20, /* arbitrary offset */ + HSMA_RESTORE = 21, + HSMA_REMOVE = 22, + HSMA_CANCEL = 23 +}; + +static inline const char *hsm_copytool_action2name(enum hsm_copytool_action a) +{ + switch (a) { + case HSMA_NONE: return "NOOP"; + case HSMA_ARCHIVE: return "ARCHIVE"; + case HSMA_RESTORE: return "RESTORE"; + case HSMA_REMOVE: return "REMOVE"; + case HSMA_CANCEL: return "CANCEL"; + default: return "UNKNOWN"; + } +} + +/* Copytool item action description */ +struct hsm_action_item { + __u32 hai_len; /* valid size of this struct */ + __u32 hai_action; /* hsm_copytool_action, but use known size */ + lustre_fid hai_fid; /* Lustre FID to operate on */ + lustre_fid hai_dfid; /* fid used for data access */ + struct hsm_extent hai_extent; /* byte range to operate on */ + __u64 hai_cookie; /* action cookie from coordinator */ + __u64 hai_gid; /* grouplock id */ + char hai_data[0]; /* variable length */ +} __attribute__((packed)); + +/** + * helper function which print in hexa the first bytes of + * hai opaque field + * + * \param hai [IN] record to print + * \param buffer [IN,OUT] buffer to write the hex string to + * \param len [IN] max buffer length + * + * \retval buffer + */ +static inline char *hai_dump_data_field(const struct hsm_action_item *hai, + char *buffer, size_t len) +{ + int i; + int data_len; + char *ptr; + + ptr = buffer; + data_len = hai->hai_len - sizeof(*hai); + for (i = 0; (i < data_len) && (len > 2); i++) { + snprintf(ptr, 3, "%02X", (unsigned char)hai->hai_data[i]); + ptr += 2; + len -= 2; + } + + *ptr = '\0'; + + return buffer; +} + +/* Copytool action list */ +#define HAL_VERSION 1 +#define HAL_MAXSIZE LNET_MTU /* bytes, used in userspace only */ +struct hsm_action_list { + __u32 hal_version; + __u32 hal_count; /* number of hai's to follow */ + __u64 hal_compound_id; /* returned by coordinator */ + __u64 hal_flags; + __u32 hal_archive_id; /* which archive backend */ + __u32 padding1; + char hal_fsname[0]; /* null-terminated */ + /* struct hsm_action_item[hal_count] follows, aligned on 8-byte + boundaries. See hai_zero */ +} __attribute__((packed)); + +#ifndef HAVE_CFS_SIZE_ROUND +static inline int cfs_size_round (int val) +{ + return (val + 7) & (~0x7); +} +#define HAVE_CFS_SIZE_ROUND +#endif + +/* Return pointer to first hai in action list */ +static inline struct hsm_action_item *hai_first(struct hsm_action_list *hal) +{ + return (struct hsm_action_item *)(hal->hal_fsname + + cfs_size_round(strlen(hal-> \ + hal_fsname) + + 1)); +} +/* Return pointer to next hai */ +static inline struct hsm_action_item * hai_next(struct hsm_action_item *hai) +{ + return (struct hsm_action_item *)((char *)hai + + cfs_size_round(hai->hai_len)); +} + +/* Return size of an hsm_action_list */ +static inline size_t hal_size(struct hsm_action_list *hal) +{ + __u32 i; + size_t sz; + struct hsm_action_item *hai; + + sz = sizeof(*hal) + cfs_size_round(strlen(hal->hal_fsname) + 1); + hai = hai_first(hal); + for (i = 0; i < hal->hal_count ; i++, hai = hai_next(hai)) + sz += cfs_size_round(hai->hai_len); + + return sz; +} + +/* HSM file import + * describe the attributes to be set on imported file + */ +struct hsm_user_import { + __u64 hui_size; + __u64 hui_atime; + __u64 hui_mtime; + __u32 hui_atime_ns; + __u32 hui_mtime_ns; + __u32 hui_uid; + __u32 hui_gid; + __u32 hui_mode; + __u32 hui_archive_id; +}; + +/* Copytool progress reporting */ +#define HP_FLAG_COMPLETED 0x01 +#define HP_FLAG_RETRY 0x02 + +struct hsm_progress { + lustre_fid hp_fid; + __u64 hp_cookie; + struct hsm_extent hp_extent; + __u16 hp_flags; + __u16 hp_errval; /* positive val */ + __u32 padding; +}; + +struct hsm_copy { + __u64 hc_data_version; + __u16 hc_flags; + __u16 hc_errval; /* positive val */ + __u32 padding; + struct hsm_action_item hc_hai; +}; + +/* JSON objects */ +enum llapi_json_types { + LLAPI_JSON_INTEGER = 1, + LLAPI_JSON_BIGNUM, + LLAPI_JSON_REAL, + LLAPI_JSON_STRING +}; + +struct llapi_json_item { + char *lji_key; + __u32 lji_type; + union { + int lji_integer; + __u64 lji_u64; + double lji_real; + char *lji_string; + }; + struct llapi_json_item *lji_next; +}; + +struct llapi_json_item_list { + int ljil_item_count; + struct llapi_json_item *ljil_items; +}; + +enum lu_ladvise_type { + LU_LADVISE_INVALID = 0, + LU_LADVISE_WILLREAD = 1, + LU_LADVISE_DONTNEED = 2, +}; + +#define LU_LADVISE_NAMES { \ + [LU_LADVISE_WILLREAD] = "willread", \ + [LU_LADVISE_DONTNEED] = "dontneed", \ +} + +/* This is the userspace argument for ladvise. It is currently the same as + * what goes on the wire (struct lu_ladvise), but is defined separately as we + * may need info which is only used locally. */ +struct llapi_lu_ladvise { + __u16 lla_advice; /* advice type */ + __u16 lla_value1; /* values for different advice types */ + __u32 lla_value2; + __u64 lla_start; /* first byte of extent for advice */ + __u64 lla_end; /* last byte of extent for advice */ + __u32 lla_value3; + __u32 lla_value4; +}; + +enum ladvise_flag { + LF_ASYNC = 0x00000001, +}; + +#define LADVISE_MAGIC 0x1ADF1CE0 +#define LF_MASK LF_ASYNC + +/* This is the userspace argument for ladvise, corresponds to ladvise_hdr which + * is used on the wire. It is defined separately as we may need info which is + * only used locally. */ +struct llapi_ladvise_hdr { + __u32 lah_magic; /* LADVISE_MAGIC */ + __u32 lah_count; /* number of advices */ + __u64 lah_flags; /* from enum ladvise_flag */ + __u32 lah_value1; /* unused */ + __u32 lah_value2; /* unused */ + __u64 lah_value3; /* unused */ + struct llapi_lu_ladvise lah_advise[0]; /* advices in this header */ +}; + +#define LAH_COUNT_MAX (1024) + +/* Shared key */ +enum sk_crypt_alg { + SK_CRYPT_INVALID = -1, + SK_CRYPT_EMPTY = 0, + SK_CRYPT_AES256_CTR = 1, + SK_CRYPT_MAX = 2, +}; + +enum sk_hmac_alg { + SK_HMAC_INVALID = -1, + SK_HMAC_EMPTY = 0, + SK_HMAC_SHA256 = 1, + SK_HMAC_SHA512 = 2, + SK_HMAC_MAX = 3, +}; + +struct sk_crypt_type { + char *sct_name; + size_t sct_bytes; +}; + +struct sk_hmac_type { + char *sht_name; + size_t sht_bytes; +}; + +/** @} lustreuser */ +#endif /* _LUSTRE_USER_H */ diff --git a/lustre/include/lustre_ver.h b/lustre/include/uapi/linux/lustre/lustre_ver.h similarity index 100% rename from lustre/include/lustre_ver.h rename to lustre/include/uapi/linux/lustre/lustre_ver.h diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c index 2e0a2fd..2209253 100644 --- a/lustre/ldlm/ldlm_lockd.c +++ b/lustre/ldlm/ldlm_lockd.c @@ -40,7 +40,7 @@ #include #include #include -#include +#include #include #include #include "ldlm_internal.h" diff --git a/lustre/ldlm/ldlm_request.c b/lustre/ldlm/ldlm_request.c index c7f150c..c2ee9bc 100644 --- a/lustre/ldlm/ldlm_request.c +++ b/lustre/ldlm/ldlm_request.c @@ -57,8 +57,7 @@ #define DEBUG_SUBSYSTEM S_LDLM -#include - +#include #include #include #include diff --git a/lustre/lfsck/lfsck_bookmark.c b/lustre/lfsck/lfsck_bookmark.c index 76b6f11..c7dbc63 100644 --- a/lustre/lfsck/lfsck_bookmark.c +++ b/lustre/lfsck/lfsck_bookmark.c @@ -33,7 +33,6 @@ #include #include #include -#include #include "lfsck_internal.h" diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h index 942b247..ecb43f5 100644 --- a/lustre/lfsck/lfsck_internal.h +++ b/lustre/lfsck/lfsck_internal.h @@ -33,9 +33,6 @@ #ifndef _LFSCK_INTERNAL_H # define _LFSCK_INTERNAL_H -#include -#include -#include #include #include #include diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c index d31c74a..3946d51 100644 --- a/lustre/lfsck/lfsck_layout.c +++ b/lustre/lfsck/lfsck_layout.c @@ -36,13 +36,11 @@ #include #include -#include #include #include #include #include #include -#include #include #include diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c index 42b0c44..0facc9b 100644 --- a/lustre/lfsck/lfsck_lib.c +++ b/lustre/lfsck/lfsck_lib.c @@ -40,7 +40,6 @@ #include #include #include -#include #include "lfsck_internal.h" diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c index b706833..14885df 100644 --- a/lustre/lfsck/lfsck_namespace.c +++ b/lustre/lfsck/lfsck_namespace.c @@ -30,14 +30,12 @@ #define DEBUG_SUBSYSTEM S_LFSCK -#include #include #include #include #include #include #include -#include #include "lfsck_internal.h" diff --git a/lustre/lfsck/lfsck_striped_dir.c b/lustre/lfsck/lfsck_striped_dir.c index 0872896..5ac0cb7 100644 --- a/lustre/lfsck/lfsck_striped_dir.c +++ b/lustre/lfsck/lfsck_striped_dir.c @@ -140,7 +140,6 @@ #define DEBUG_SUBSYSTEM S_LFSCK -#include #include #include #include @@ -148,7 +147,6 @@ #include #include #include -#include #include "lfsck_internal.h" diff --git a/lustre/llite/dcache.c b/lustre/llite/dcache.c index 6da6b59..875eebd 100644 --- a/lustre/llite/dcache.c +++ b/lustre/llite/dcache.c @@ -38,7 +38,6 @@ #define DEBUG_SUBSYSTEM S_LLITE #include -#include #include #include "llite_internal.h" diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c index 45dd02e..958dc9e 100644 --- a/lustre/llite/dir.c +++ b/lustre/llite/dir.c @@ -48,11 +48,9 @@ #define DEBUG_SUBSYSTEM S_LLITE -#include - #include #include -#include +#include #include #include #include diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 0a89689..ade596f 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -45,9 +45,8 @@ #ifdef HAVE_UIDGID_HEADER # include #endif -#include -#include +#include #include #include "cl_object.h" diff --git a/lustre/llite/lcommon_cl.c b/lustre/llite/lcommon_cl.c index 9ea2bd7..93deb63 100644 --- a/lustre/llite/lcommon_cl.c +++ b/lustre/llite/lcommon_cl.c @@ -47,7 +47,6 @@ #include #include #include -#include #include #include diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h index 1e472ca..9ebbaf7 100644 --- a/lustre/llite/llite_internal.h +++ b/lustre/llite/llite_internal.h @@ -33,7 +33,6 @@ #ifndef LLITE_INTERNAL_H #define LLITE_INTERNAL_H #include -#include #include /* for s2sbi */ #include #include diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index 4acf584..5299cf5 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -48,12 +48,12 @@ #endif #include -#include +#include #include #include #include #include -#include +#include #include #include #include diff --git a/lustre/llite/lproc_llite.c b/lustre/llite/lproc_llite.c index 2f61758..467484a 100644 --- a/lustre/llite/lproc_llite.c +++ b/lustre/llite/lproc_llite.c @@ -36,7 +36,7 @@ #ifdef HAVE_UIDGID_HEADER # include #endif -#include +#include #include #include diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c index de168ab..f008826 100644 --- a/lustre/llite/namei.c +++ b/lustre/llite/namei.c @@ -47,7 +47,6 @@ #include #include #include -#include #include "llite_internal.h" static int ll_create_it(struct inode *dir, struct dentry *dentry, diff --git a/lustre/llite/range_lock.c b/lustre/llite/range_lock.c index 56e1291..9795bb9 100644 --- a/lustre/llite/range_lock.c +++ b/lustre/llite/range_lock.c @@ -34,7 +34,7 @@ * Author: Bobi Jam */ #include "range_lock.h" -#include +#include /** * Initialize a range lock tree diff --git a/lustre/llite/vvp_internal.h b/lustre/llite/vvp_internal.h index 645b4b5..e1f3041 100644 --- a/lustre/llite/vvp_internal.h +++ b/lustre/llite/vvp_internal.h @@ -37,7 +37,6 @@ #ifndef VVP_INTERNAL_H #define VVP_INTERNAL_H -#include #include enum obd_notify_event; diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c index 243219b..34e46cd 100644 --- a/lustre/llite/xattr.c +++ b/lustre/llite/xattr.c @@ -40,7 +40,6 @@ #include #include -#include #include #include "llite_internal.h" diff --git a/lustre/llite/xattr26.c b/lustre/llite/xattr26.c index 84e9b8b..00c59ce 100644 --- a/lustre/llite/xattr26.c +++ b/lustre/llite/xattr26.c @@ -40,7 +40,7 @@ #include #include -#include +#include #include #include "llite_internal.h" diff --git a/lustre/llite/xattr_cache.c b/lustre/llite/xattr_cache.c index 18a289b..fca7ab0 100644 --- a/lustre/llite/xattr_cache.c +++ b/lustre/llite/xattr_cache.c @@ -37,7 +37,6 @@ #include #include #include -#include #include "llite_internal.h" /* If we ever have hundreds of extended attributes, we might want to consider diff --git a/lustre/lmv/lmv_fld.c b/lustre/lmv/lmv_fld.c index b5ec306..b439d87 100644 --- a/lustre/lmv/lmv_fld.c +++ b/lustre/lmv/lmv_fld.c @@ -40,7 +40,6 @@ #include #include -#include #include #include #include diff --git a/lustre/lmv/lmv_intent.c b/lustre/lmv/lmv_intent.c index 08a5a60..8fc27d6 100644 --- a/lustre/lmv/lmv_intent.c +++ b/lustre/lmv/lmv_intent.c @@ -42,7 +42,6 @@ #include #include -#include #include #include #include diff --git a/lustre/lmv/lmv_internal.h b/lustre/lmv/lmv_internal.h index a9dd664..2c9dd05 100644 --- a/lustre/lmv/lmv_internal.h +++ b/lustre/lmv/lmv_internal.h @@ -33,7 +33,6 @@ #ifndef _LMV_INTERNAL_H_ #define _LMV_INTERNAL_H_ -#include #include #include diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c index f226c5a..68ed668 100644 --- a/lustre/lmv/lmv_obd.c +++ b/lustre/lmv/lmv_obd.c @@ -45,7 +45,6 @@ #include #include -#include #include #include #include @@ -54,7 +53,7 @@ #include #include #include -#include +#include #include #include "lmv_internal.h" diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c index c66bfbe..d6d77c6 100644 --- a/lustre/lod/lod_dev.c +++ b/lustre/lod/lod_dev.c @@ -93,7 +93,7 @@ #include #include #include -#include +#include #include #include diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h index 2970d93..139ec4e 100644 --- a/lustre/lod/lod_internal.h +++ b/lustre/lod/lod_internal.h @@ -39,7 +39,7 @@ #define _LOD_INTERNAL_H #include -#include +#include #include #include diff --git a/lustre/lod/lod_object.c b/lustre/lod/lod_object.c index bc1ac0e..f2e3d6f 100644 --- a/lustre/lod/lod_object.c +++ b/lustre/lod/lod_object.c @@ -47,9 +47,9 @@ #include #include #include -#include +#include #include -#include +#include #include #include diff --git a/lustre/lod/lod_qos.c b/lustre/lod/lod_qos.c index 7103414..cb3ac44 100644 --- a/lustre/lod/lod_qos.c +++ b/lustre/lod/lod_qos.c @@ -39,7 +39,7 @@ #include #include -#include +#include #include #include diff --git a/lustre/lod/lod_sub_object.c b/lustre/lod/lod_sub_object.c index a81d619..e0d0ac1 100644 --- a/lustre/lod/lod_sub_object.c +++ b/lustre/lod/lod_sub_object.c @@ -42,12 +42,12 @@ #include #include -#include +#include #include #include #include -#include +#include #include #include #include diff --git a/lustre/lod/lproc_lod.c b/lustre/lod/lproc_lod.c index 4986f1f..8003fb6 100644 --- a/lustre/lod/lproc_lod.c +++ b/lustre/lod/lproc_lod.c @@ -35,7 +35,7 @@ #include #include #include "lod_internal.h" -#include +#include /* * Notice, all the functions below (except for lod_procfs_init() and diff --git a/lustre/lov/lov_ea.c b/lustre/lov/lov_ea.c index 1315681..f7e9137 100644 --- a/lustre/lov/lov_ea.c +++ b/lustre/lov/lov_ea.c @@ -41,9 +41,6 @@ #include #include -#include -#include - #include "lov_internal.h" static inline void diff --git a/lustre/lov/lov_internal.h b/lustre/lov/lov_internal.h index 6f74868..edbad91 100644 --- a/lustre/lov/lov_internal.h +++ b/lustre/lov/lov_internal.h @@ -34,7 +34,7 @@ #define LOV_INTERNAL_H #include -#include +#include /* If we are unable to get the maximum object size from the OST in * ocd_maxbytes using OBD_CONNECT_MAXBYTES, then we fall back to using diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c index 10972cd..31203b5 100644 --- a/lustre/lov/lov_obd.c +++ b/lustre/lov/lov_obd.c @@ -40,16 +40,14 @@ #define DEBUG_SUBSYSTEM S_LOV #include -#include - #include #include #include -#include +#include #include #include #include -#include +#include #include #include #include diff --git a/lustre/lov/lov_pack.c b/lustre/lov/lov_pack.c index bdcf146..e630913 100644 --- a/lustre/lov/lov_pack.c +++ b/lustre/lov/lov_pack.c @@ -38,9 +38,6 @@ #define DEBUG_SUBSYSTEM S_LOV -#include -#include - #include #include #include diff --git a/lustre/lov/lov_request.c b/lustre/lov/lov_request.c index c343dfb..a48dca8 100644 --- a/lustre/lov/lov_request.c +++ b/lustre/lov/lov_request.c @@ -35,8 +35,6 @@ #include #include -#include - #include "lov_internal.h" static void lov_init_set(struct lov_request_set *set) diff --git a/lustre/lov/lproc_lov.c b/lustre/lov/lproc_lov.c index 98c9db5..1a18e40 100644 --- a/lustre/lov/lproc_lov.c +++ b/lustre/lov/lproc_lov.c @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include "lov_internal.h" #ifdef CONFIG_PROC_FS diff --git a/lustre/mdc/mdc_lib.c b/lustre/mdc/mdc_lib.c index 5c2acf8..6cbc258 100644 --- a/lustre/mdc/mdc_lib.c +++ b/lustre/mdc/mdc_lib.c @@ -36,7 +36,6 @@ # include #endif #include -#include #include #include #include diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index 128eaea..b00fc44 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -42,18 +42,18 @@ # include #endif -#include +#include #include #include #include #include #include -#include +#include #include #include #include -#include +#include #include #include diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c index d11d1ea..c034a40 100644 --- a/lustre/mdd/mdd_device.c +++ b/lustre/mdd/mdd_device.c @@ -41,11 +41,11 @@ #include #include #include -#include +#include #include #include #include -#include +#include #include #include #include diff --git a/lustre/mdd/mdd_lock.c b/lustre/mdd/mdd_lock.c index 97d8870..193de6e 100644 --- a/lustre/mdd/mdd_lock.c +++ b/lustre/mdd/mdd_lock.c @@ -39,7 +39,6 @@ #define DEBUG_SUBSYSTEM S_MDS #include -#include #include "mdd_internal.h" void mdd_write_lock(const struct lu_env *env, struct mdd_object *obj, diff --git a/lustre/mdd/mdd_object.c b/lustre/mdd/mdd_object.c index 03e8e5a..76e2fd2 100644 --- a/lustre/mdd/mdd_object.c +++ b/lustre/mdd/mdd_object.c @@ -46,9 +46,8 @@ /* fid_be_cpu(), fid_cpu_to_be(). */ #include #include -#include +#include #include -#include #include "mdd_internal.h" diff --git a/lustre/mdd/mdd_orphans.c b/lustre/mdd/mdd_orphans.c index e821f17..08f5846 100644 --- a/lustre/mdd/mdd_orphans.c +++ b/lustre/mdd/mdd_orphans.c @@ -41,7 +41,6 @@ #include #include -#include #include #include #include "mdd_internal.h" diff --git a/lustre/mdd/mdd_permission.c b/lustre/mdd/mdd_permission.c index 4b4f9b9..6204b4f 100644 --- a/lustre/mdd/mdd_permission.c +++ b/lustre/mdd/mdd_permission.c @@ -40,7 +40,6 @@ #define DEBUG_SUBSYSTEM S_MDS #include -#include #include #include #include diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 439ec41..dfaa281 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -50,12 +50,12 @@ #include #include #include -#include +#include #include #include #include #include -#include +#include #include #include #include diff --git a/lustre/mdt/mdt_hsm.c b/lustre/mdt/mdt_hsm.c index 58a106d..bbd3b48 100644 --- a/lustre/mdt/mdt_hsm.c +++ b/lustre/mdt/mdt_hsm.c @@ -37,7 +37,7 @@ #define DEBUG_SUBSYSTEM S_MDS -#include +#include #include "mdt_internal.h" /* Max allocation to satisfy single HSM RPC. */ diff --git a/lustre/mdt/mdt_hsm_cdt_agent.c b/lustre/mdt/mdt_hsm_cdt_agent.c index d73b20a..4947d28 100644 --- a/lustre/mdt/mdt_hsm_cdt_agent.c +++ b/lustre/mdt/mdt_hsm_cdt_agent.c @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #include "mdt_internal.h" diff --git a/lustre/mdt/mdt_hsm_cdt_requests.c b/lustre/mdt/mdt_hsm_cdt_requests.c index 8b6dec7..4ab3db1 100644 --- a/lustre/mdt/mdt_hsm_cdt_requests.c +++ b/lustre/mdt/mdt_hsm_cdt_requests.c @@ -39,7 +39,6 @@ #include #include #include -#include #include #include "mdt_internal.h" diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h index c67d090..3dc5943 100644 --- a/lustre/mdt/mdt_internal.h +++ b/lustre/mdt/mdt_internal.h @@ -47,7 +47,6 @@ #include #include #include -#include #include #include #include diff --git a/lustre/mdt/mdt_lproc.c b/lustre/mdt/mdt_lproc.c index 7814842..0c70243 100644 --- a/lustre/mdt/mdt_lproc.c +++ b/lustre/mdt/mdt_lproc.c @@ -43,7 +43,7 @@ #include #include /* LUSTRE_VERSION_CODE */ -#include +#include /* * struct OBD_{ALLOC,FREE}*() * MDT_FAIL_CHECK diff --git a/lustre/mdt/mdt_mds.c b/lustre/mdt/mdt_mds.c index eee7e16..a06e102 100644 --- a/lustre/mdt/mdt_mds.c +++ b/lustre/mdt/mdt_mds.c @@ -52,7 +52,7 @@ #include "mdt_internal.h" #include #include -#include +#include struct mds_device { /* super-class */ diff --git a/lustre/mgc/mgc_internal.h b/lustre/mgc/mgc_internal.h index 1a37720..465c652 100644 --- a/lustre/mgc/mgc_internal.h +++ b/lustre/mgc/mgc_internal.h @@ -34,7 +34,6 @@ #define _MGC_INTERNAL_H #include -#include #include #include #include diff --git a/lustre/mgs/lproc_mgs.c b/lustre/mgs/lproc_mgs.c index fd6cc3b..aecb740 100644 --- a/lustre/mgs/lproc_mgs.c +++ b/lustre/mgs/lproc_mgs.c @@ -36,7 +36,7 @@ #include #include #include -#include +#include #include "mgs_internal.h" #ifdef CONFIG_PROC_FS diff --git a/lustre/mgs/mgs_barrier.c b/lustre/mgs/mgs_barrier.c index 7d98937..36e99a4 100644 --- a/lustre/mgs/mgs_barrier.c +++ b/lustre/mgs/mgs_barrier.c @@ -30,9 +30,9 @@ #define DEBUG_SUBSYSTEM S_MGS #define D_MGS D_CONFIG -#include +#include #include -#include +#include #include "mgs_internal.h" diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c index 35efe5b..dc13c3d 100644 --- a/lustre/mgs/mgs_handler.c +++ b/lustre/mgs/mgs_handler.c @@ -41,9 +41,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include "mgs_internal.h" diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c index 58adec2..a583d6d 100644 --- a/lustre/mgs/mgs_llog.c +++ b/lustre/mgs/mgs_llog.c @@ -42,8 +42,8 @@ #define D_MGS D_CONFIG #include -#include -#include +#include +#include #include #include diff --git a/lustre/obdclass/class_obd.c b/lustre/obdclass/class_obd.c index 7b18eb8..1eda71f 100644 --- a/lustre/obdclass/class_obd.c +++ b/lustre/obdclass/class_obd.c @@ -45,13 +45,12 @@ #include #include #include -#include #include #ifdef HAVE_SERVER_SUPPORT # include # include #endif /* HAVE_SERVER_SUPPORT */ -#include +#include #include "llog_internal.h" #ifdef CONFIG_PROC_FS diff --git a/lustre/obdclass/linkea.c b/lustre/obdclass/linkea.c index a1bcc3d..694a3cf 100644 --- a/lustre/obdclass/linkea.c +++ b/lustre/obdclass/linkea.c @@ -27,7 +27,6 @@ * Author: Di Wang */ -#include #include #include diff --git a/lustre/obdclass/linux/linux-module.c b/lustre/obdclass/linux/linux-module.c index aedcb0c..d67aa05 100644 --- a/lustre/obdclass/linux/linux-module.c +++ b/lustre/obdclass/linux/linux-module.c @@ -68,8 +68,10 @@ #include #include #include -#include -#include +#include +#include + +#define OBD_MAX_IOCTL_BUFFER 8192 static int obd_ioctl_is_invalid(struct obd_ioctl_data *data) { diff --git a/lustre/obdclass/linux/linux-obdo.c b/lustre/obdclass/linux/linux-obdo.c index 5f8e2b5..ace43ab 100644 --- a/lustre/obdclass/linux/linux-obdo.c +++ b/lustre/obdclass/linux/linux-obdo.c @@ -41,7 +41,6 @@ #include #include #include /* for PAGE_SIZE */ -#include #include /*FIXME: Just copy from obdo_from_inode*/ diff --git a/lustre/obdclass/llog_ioctl.c b/lustre/obdclass/llog_ioctl.c index 906e6e6..0c708d6 100644 --- a/lustre/obdclass/llog_ioctl.c +++ b/lustre/obdclass/llog_ioctl.c @@ -33,7 +33,7 @@ #define DEBUG_SUBSYSTEM S_LOG #include -#include +#include #include #include "llog_internal.h" diff --git a/lustre/obdclass/lprocfs_jobstats.c b/lustre/obdclass/lprocfs_jobstats.c index dc1f6b2a..fd25e74 100644 --- a/lustre/obdclass/lprocfs_jobstats.c +++ b/lustre/obdclass/lprocfs_jobstats.c @@ -30,10 +30,8 @@ #define DEBUG_SUBSYSTEM S_CLASS - #include #include -#include #ifdef CONFIG_PROC_FS diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c index 0f7b5b9..e5efd82 100644 --- a/lustre/obdclass/lprocfs_status.c +++ b/lustre/obdclass/lprocfs_status.c @@ -38,7 +38,6 @@ #include #include -#include #ifdef CONFIG_PROC_FS diff --git a/lustre/obdclass/lprocfs_status_server.c b/lustre/obdclass/lprocfs_status_server.c index e32c8e8..686ec70 100644 --- a/lustre/obdclass/lprocfs_status_server.c +++ b/lustre/obdclass/lprocfs_status_server.c @@ -39,7 +39,6 @@ #include #include -#include #include static ssize_t uuid_show(struct kobject *kobj, struct attribute *attr, diff --git a/lustre/obdclass/md_attrs.c b/lustre/obdclass/md_attrs.c index 8500393..4e608d5 100644 --- a/lustre/obdclass/md_attrs.c +++ b/lustre/obdclass/md_attrs.c @@ -26,9 +26,6 @@ * * Author: Johann Lombardi */ - -#include - #include #include #include diff --git a/lustre/obdclass/obd_config.c b/lustre/obdclass/obd_config.c index 64ebf6e..bcb9375 100644 --- a/lustre/obdclass/obd_config.c +++ b/lustre/obdclass/obd_config.c @@ -41,9 +41,9 @@ #include #include #include -#include +#include #include -#include +#include #include #include "llog_internal.h" diff --git a/lustre/obdclass/obd_mount.c b/lustre/obdclass/obd_mount.c index f6797c1..6388b87 100644 --- a/lustre/obdclass/obd_mount.c +++ b/lustre/obdclass/obd_mount.c @@ -43,11 +43,10 @@ #include #include -#include #include #include #include -#include +#include static int (*client_fill_super)(struct super_block *sb, struct vfsmount *mnt); diff --git a/lustre/obdclass/obd_mount_server.c b/lustre/obdclass/obd_mount_server.c index 8a4883a..194441c 100644 --- a/lustre/obdclass/obd_mount_server.c +++ b/lustre/obdclass/obd_mount_server.c @@ -50,14 +50,11 @@ #include #endif -#include -#include - #include #include -#include +#include #include -#include +#include #include #include diff --git a/lustre/obdclass/obdo.c b/lustre/obdclass/obdo.c index dddb24b..322b2f5 100644 --- a/lustre/obdclass/obdo.c +++ b/lustre/obdclass/obdo.c @@ -43,7 +43,6 @@ # include #endif #include -#include #include void obdo_set_parent_fid(struct obdo *dst, const struct lu_fid *parent) diff --git a/lustre/obdecho/echo_client.c b/lustre/obdecho/echo_client.c index 1d7b517..71ec99f 100644 --- a/lustre/obdecho/echo_client.c +++ b/lustre/obdecho/echo_client.c @@ -46,7 +46,7 @@ #include #include #include -#include +#include #include #ifdef HAVE_SERVER_SUPPORT # include diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c index 6879a92..88ccc89 100644 --- a/lustre/ofd/ofd_dev.c +++ b/lustre/ofd/ofd_dev.c @@ -70,10 +70,9 @@ #include #include -#include +#include #include #include -#include #include #include #include diff --git a/lustre/ofd/ofd_obd.c b/lustre/ofd/ofd_obd.c index cc04521..bb4e1be 100644 --- a/lustre/ofd/ofd_obd.c +++ b/lustre/ofd/ofd_obd.c @@ -43,10 +43,9 @@ #define DEBUG_SUBSYSTEM S_FILTER -#include #include "ofd_internal.h" #include -#include +#include #include #include #include diff --git a/lustre/ofd/ofd_objects.c b/lustre/ofd/ofd_objects.c index eb959e4..9f76081 100644 --- a/lustre/ofd/ofd_objects.c +++ b/lustre/ofd/ofd_objects.c @@ -41,7 +41,6 @@ #define DEBUG_SUBSYSTEM S_FILTER #include -#include #include #include "ofd_internal.h" diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index 5e590c5..26436f1 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -34,17 +34,15 @@ #include -#include - #include #include #include #include #include -#include +#include #include #include -#include +#include #include #include #include @@ -1059,7 +1057,7 @@ static inline int can_merge_pages(struct brw_page *p1, struct brw_page *p2) static u32 osc_checksum_bulk(int nob, size_t pg_count, struct brw_page **pga, int opc, - cksum_type_t cksum_type) + enum cksum_types cksum_type) { u32 cksum; int i = 0; @@ -1255,7 +1253,7 @@ osc_brw_prep_request(int cmd, struct client_obd *cli, struct obdo *oa, !sptlrpc_flavor_has_bulk(&req->rq_flvr)) { /* store cl_cksum_type in a local variable since * it can be changed via lprocfs */ - cksum_type_t cksum_type = cli->cl_cksum_type; + enum cksum_types cksum_type = cli->cl_cksum_type; if ((body->oa.o_valid & OBD_MD_FLFLAGS) == 0) body->oa.o_flags = 0; @@ -1394,7 +1392,7 @@ check_write_checksum(struct obdo *oa, const lnet_process_id_t *peer, { __u32 new_cksum; char *msg; - cksum_type_t cksum_type; + enum cksum_types cksum_type; if (server_cksum == client_cksum) { CDEBUG(D_PAGE, "checksum %x confirmed\n", client_cksum); @@ -1530,7 +1528,7 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc) u32 server_cksum = body->oa.o_cksum; char *via = ""; char *router = ""; - cksum_type_t cksum_type; + enum cksum_types cksum_type; cksum_type = cksum_type_unpack(body->oa.o_valid &OBD_MD_FLFLAGS? body->oa.o_flags : 0); diff --git a/lustre/osd-ldiskfs/osd_compat.c b/lustre/osd-ldiskfs/osd_compat.c index a6e313e..3bc2fcb 100644 --- a/lustre/osd-ldiskfs/osd_compat.c +++ b/lustre/osd-ldiskfs/osd_compat.c @@ -36,8 +36,6 @@ * Author: Alex Zhuravlev */ -/* LUSTRE_VERSION_CODE */ -#include /* prerequisite for linux/xattr.h */ #include /* prerequisite for linux/xattr.h */ diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c index aabc3e6..7dd693a 100644 --- a/lustre/osd-ldiskfs/osd_handler.c +++ b/lustre/osd-ldiskfs/osd_handler.c @@ -45,8 +45,6 @@ # include #endif -/* LUSTRE_VERSION_CODE */ -#include /* prerequisite for linux/xattr.h */ #include /* prerequisite for linux/xattr.h */ @@ -67,7 +65,7 @@ #include #include /* process_config */ -#include +#include #include "osd_internal.h" #include "osd_dynlocks.h" diff --git a/lustre/osd-ldiskfs/osd_io.c b/lustre/osd-ldiskfs/osd_io.c index 56e5231..c3f43e9 100644 --- a/lustre/osd-ldiskfs/osd_io.c +++ b/lustre/osd-ldiskfs/osd_io.c @@ -38,8 +38,6 @@ * */ -/* LUSTRE_VERSION_CODE */ -#include /* prerequisite for linux/xattr.h */ #include /* prerequisite for linux/xattr.h */ diff --git a/lustre/osd-ldiskfs/osd_lproc.c b/lustre/osd-ldiskfs/osd_lproc.c index 8b018cf..dccec1b 100644 --- a/lustre/osd-ldiskfs/osd_lproc.c +++ b/lustre/osd-ldiskfs/osd_lproc.c @@ -37,7 +37,6 @@ #define DEBUG_SUBSYSTEM S_OSD #include -#include #include "osd_internal.h" diff --git a/lustre/osd-ldiskfs/osd_oi.c b/lustre/osd-ldiskfs/osd_oi.c index cd1db06..d46763d 100644 --- a/lustre/osd-ldiskfs/osd_oi.c +++ b/lustre/osd-ldiskfs/osd_oi.c @@ -40,8 +40,6 @@ #include -/* LUSTRE_VERSION_CODE */ -#include /* * struct OBD_{ALLOC,FREE}*() * OBD_FAIL_CHECK diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c index c94a3b0..e25b521 100644 --- a/lustre/osd-ldiskfs/osd_scrub.c +++ b/lustre/osd-ldiskfs/osd_scrub.c @@ -38,7 +38,7 @@ #define DEBUG_SUBSYSTEM S_LFSCK #include -#include +#include #include #include #include diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c index 36e3e46..44a0c99 100644 --- a/lustre/osd-zfs/osd_handler.c +++ b/lustre/osd-zfs/osd_handler.c @@ -39,7 +39,6 @@ #define DEBUG_SUBSYSTEM S_OSD -#include #include #include #include @@ -47,7 +46,7 @@ #include #include #include -#include +#include #include #include "osd_internal.h" diff --git a/lustre/osd-zfs/osd_index.c b/lustre/osd-zfs/osd_index.c index e3083ef..bc1b494 100644 --- a/lustre/osd-zfs/osd_index.c +++ b/lustre/osd-zfs/osd_index.c @@ -37,7 +37,6 @@ #define DEBUG_SUBSYSTEM S_OSD -#include #include #include #include diff --git a/lustre/osd-zfs/osd_io.c b/lustre/osd-zfs/osd_io.c index 41e6ee7..856b2e1 100644 --- a/lustre/osd-zfs/osd_io.c +++ b/lustre/osd-zfs/osd_io.c @@ -37,7 +37,6 @@ #define DEBUG_SUBSYSTEM S_OSD -#include #include #include #include @@ -45,7 +44,6 @@ #include #include #include -#include /* LLOG_MIN_CHUNK_SIZE definition */ #include "osd_internal.h" diff --git a/lustre/osd-zfs/osd_lproc.c b/lustre/osd-zfs/osd_lproc.c index 88c1600..89f0f160 100644 --- a/lustre/osd-zfs/osd_lproc.c +++ b/lustre/osd-zfs/osd_lproc.c @@ -40,7 +40,6 @@ #include #include #include -#include #include "osd_internal.h" diff --git a/lustre/osd-zfs/osd_object.c b/lustre/osd-zfs/osd_object.c index c68f8de..cceeecf 100644 --- a/lustre/osd-zfs/osd_object.c +++ b/lustre/osd-zfs/osd_object.c @@ -38,7 +38,6 @@ #define DEBUG_SUBSYSTEM S_OSD -#include #include #include #include diff --git a/lustre/osd-zfs/osd_oi.c b/lustre/osd-zfs/osd_oi.c index a9de9e3..e350ba8 100644 --- a/lustre/osd-zfs/osd_oi.c +++ b/lustre/osd-zfs/osd_oi.c @@ -39,7 +39,6 @@ #define DEBUG_SUBSYSTEM S_OSD -#include #include #include #include diff --git a/lustre/osd-zfs/osd_xattr.c b/lustre/osd-zfs/osd_xattr.c index fac11ba..98032bc 100644 --- a/lustre/osd-zfs/osd_xattr.c +++ b/lustre/osd-zfs/osd_xattr.c @@ -38,7 +38,6 @@ #define DEBUG_SUBSYSTEM S_OSD -#include #include #include #include diff --git a/lustre/osp/lwp_dev.c b/lustre/osp/lwp_dev.c index c83b84b..e4e6364 100644 --- a/lustre/osp/lwp_dev.c +++ b/lustre/osp/lwp_dev.c @@ -40,7 +40,7 @@ #define DEBUG_SUBSYSTEM S_OST #include -#include +#include #include #include diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c index 982a46f..81a62c7 100644 --- a/lustre/osp/osp_dev.c +++ b/lustre/osp/osp_dev.c @@ -72,10 +72,10 @@ #include -#include +#include #include #include -#include +#include #include #include "osp_internal.h" diff --git a/lustre/ptlrpc/errno.c b/lustre/ptlrpc/errno.c index fb302c7..7d58758 100644 --- a/lustre/ptlrpc/errno.c +++ b/lustre/ptlrpc/errno.c @@ -26,7 +26,7 @@ */ #include -#include +#include #ifdef LUSTRE_TRANSLATE_ERRNOS diff --git a/lustre/ptlrpc/gss/gss_bulk.c b/lustre/ptlrpc/gss/gss_bulk.c index 3f70337..041dd12 100644 --- a/lustre/ptlrpc/gss/gss_bulk.c +++ b/lustre/ptlrpc/gss/gss_bulk.c @@ -46,7 +46,6 @@ #include #include #include -#include #include #include #include diff --git a/lustre/ptlrpc/gss/gss_cli_upcall.c b/lustre/ptlrpc/gss/gss_cli_upcall.c index d1fa920..9ae9d8f 100644 --- a/lustre/ptlrpc/gss/gss_cli_upcall.c +++ b/lustre/ptlrpc/gss/gss_cli_upcall.c @@ -45,7 +45,6 @@ #include #include #include -#include #include #include #include diff --git a/lustre/ptlrpc/gss/gss_generic_token.c b/lustre/ptlrpc/gss/gss_generic_token.c index 3c4e63b..23506f8 100644 --- a/lustre/ptlrpc/gss/gss_generic_token.c +++ b/lustre/ptlrpc/gss/gss_generic_token.c @@ -50,7 +50,6 @@ #include #include #include -#include #include #include #include diff --git a/lustre/ptlrpc/gss/gss_keyring.c b/lustre/ptlrpc/gss/gss_keyring.c index 81aad1f..4b8891e 100644 --- a/lustre/ptlrpc/gss/gss_keyring.c +++ b/lustre/ptlrpc/gss/gss_keyring.c @@ -51,7 +51,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/lustre/ptlrpc/gss/gss_krb5_mech.c b/lustre/ptlrpc/gss/gss_krb5_mech.c index 000d7a8..bd52ff1 100644 --- a/lustre/ptlrpc/gss/gss_krb5_mech.c +++ b/lustre/ptlrpc/gss/gss_krb5_mech.c @@ -58,7 +58,6 @@ #include #include #include -#include #include #include #include diff --git a/lustre/ptlrpc/gss/gss_mech_switch.c b/lustre/ptlrpc/gss/gss_mech_switch.c index be66ffd..6ab4af3 100644 --- a/lustre/ptlrpc/gss/gss_mech_switch.c +++ b/lustre/ptlrpc/gss/gss_mech_switch.c @@ -52,7 +52,6 @@ #include #include #include -#include #include #include #include diff --git a/lustre/ptlrpc/gss/gss_pipefs.c b/lustre/ptlrpc/gss/gss_pipefs.c index 016d455..5e1e7ca 100644 --- a/lustre/ptlrpc/gss/gss_pipefs.c +++ b/lustre/ptlrpc/gss/gss_pipefs.c @@ -62,7 +62,7 @@ struct rpc_clnt; /* for rpc_pipefs */ #include #include #include -#include +#include #include #include #include diff --git a/lustre/ptlrpc/gss/gss_sk_mech.c b/lustre/ptlrpc/gss/gss_sk_mech.c index fd1b071..53aaa52 100644 --- a/lustre/ptlrpc/gss/gss_sk_mech.c +++ b/lustre/ptlrpc/gss/gss_sk_mech.c @@ -39,7 +39,6 @@ #include #include #include -#include #include "gss_err.h" #include "gss_crypto.h" diff --git a/lustre/ptlrpc/gss/gss_svc_upcall.c b/lustre/ptlrpc/gss/gss_svc_upcall.c index e9ae2a3..7f4a129 100644 --- a/lustre/ptlrpc/gss/gss_svc_upcall.c +++ b/lustre/ptlrpc/gss/gss_svc_upcall.c @@ -60,7 +60,6 @@ #include #include #include -#include #include #include #include diff --git a/lustre/ptlrpc/gss/lproc_gss.c b/lustre/ptlrpc/gss/lproc_gss.c index 610f0b3..b210604 100644 --- a/lustre/ptlrpc/gss/lproc_gss.c +++ b/lustre/ptlrpc/gss/lproc_gss.c @@ -41,7 +41,6 @@ #include #include #include -#include #include #include #include diff --git a/lustre/ptlrpc/gss/sec_gss.c b/lustre/ptlrpc/gss/sec_gss.c index bee52f3..25cb573 100644 --- a/lustre/ptlrpc/gss/sec_gss.c +++ b/lustre/ptlrpc/gss/sec_gss.c @@ -59,7 +59,6 @@ #include #include #include -#include #include #include #include diff --git a/lustre/ptlrpc/layout.c b/lustre/ptlrpc/layout.c index d720645..9ffb860 100644 --- a/lustre/ptlrpc/layout.c +++ b/lustre/ptlrpc/layout.c @@ -46,12 +46,9 @@ #include -#include - #include #include #include -#include #include #include diff --git a/lustre/ptlrpc/lproc_ptlrpc.c b/lustre/ptlrpc/lproc_ptlrpc.c index 532cbaa..f3b110d 100644 --- a/lustre/ptlrpc/lproc_ptlrpc.c +++ b/lustre/ptlrpc/lproc_ptlrpc.c @@ -35,7 +35,6 @@ #include #include #include -#include #include #include #include "ptlrpc_internal.h" diff --git a/lustre/ptlrpc/nodemap_storage.c b/lustre/ptlrpc/nodemap_storage.c index 7894459..1e27dfe 100644 --- a/lustre/ptlrpc/nodemap_storage.c +++ b/lustre/ptlrpc/nodemap_storage.c @@ -51,7 +51,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/lustre/ptlrpc/nrs_orr.c b/lustre/ptlrpc/nrs_orr.c index 857b333..c848cde 100644 --- a/lustre/ptlrpc/nrs_orr.c +++ b/lustre/ptlrpc/nrs_orr.c @@ -45,7 +45,6 @@ #include #include #include -#include #include #include "ptlrpc_internal.h" diff --git a/lustre/ptlrpc/pack_generic.c b/lustre/ptlrpc/pack_generic.c index 0b2a137..5f40082 100644 --- a/lustre/ptlrpc/pack_generic.c +++ b/lustre/ptlrpc/pack_generic.c @@ -42,8 +42,6 @@ #include -#include - #include #include #include diff --git a/lustre/ptlrpc/sec_config.c b/lustre/ptlrpc/sec_config.c index 4951efe..050003a 100644 --- a/lustre/ptlrpc/sec_config.c +++ b/lustre/ptlrpc/sec_config.c @@ -44,7 +44,7 @@ #include #include #include -#include +#include #include #include "ptlrpc_internal.h" diff --git a/lustre/ptlrpc/wiretest.c b/lustre/ptlrpc/wiretest.c index 0a1fe03..1f6afb7 100644 --- a/lustre/ptlrpc/wiretest.c +++ b/lustre/ptlrpc/wiretest.c @@ -40,8 +40,8 @@ #include #include #include -#include #include +#include void lustre_assert_wire_constants(void) { diff --git a/lustre/quota/qsd_config.c b/lustre/quota/qsd_config.c index 91e1386..2701a08 100644 --- a/lustre/quota/qsd_config.c +++ b/lustre/quota/qsd_config.c @@ -31,7 +31,7 @@ #define DEBUG_SUBSYSTEM S_LQUOTA #include -#include +#include #include "qsd_internal.h" diff --git a/lustre/target/barrier.c b/lustre/target/barrier.c index b9363a2..5926f37 100644 --- a/lustre/target/barrier.c +++ b/lustre/target/barrier.c @@ -35,12 +35,11 @@ #include -#include #include #include #include #include -#include +#include static LIST_HEAD(barrier_instance_list); static DEFINE_SPINLOCK(barrier_instance_lock); diff --git a/lustre/target/tgt_handler.c b/lustre/target/tgt_handler.c index d630d85..8460774 100644 --- a/lustre/target/tgt_handler.c +++ b/lustre/target/tgt_handler.c @@ -1660,7 +1660,7 @@ void tgt_brw_unlock(struct obd_ioobj *obj, struct niobuf_remote *niob, static __u32 tgt_checksum_bulk(struct lu_target *tgt, struct ptlrpc_bulk_desc *desc, int opc, - cksum_type_t cksum_type) + enum cksum_types cksum_type) { struct cfs_crypto_hash_desc *hdesc; unsigned int bufsize; @@ -1821,10 +1821,10 @@ static void dump_all_bulk_pages(struct obdo *oa, int count, static int check_read_checksum(struct ptlrpc_bulk_desc *desc, struct obdo *oa, const lnet_process_id_t *peer, __u32 client_cksum, __u32 server_cksum, - cksum_type_t server_cksum_type) + enum cksum_types server_cksum_type) { char *msg; - cksum_type_t cksum_type; + enum cksum_types cksum_type; /* unlikely to happen and only if resend does not occur due to cksum * control failure on Client */ @@ -1991,7 +1991,7 @@ int tgt_brw_read(struct tgt_session_info *tsi) rc = -E2BIG; if (body->oa.o_valid & OBD_MD_FLCKSUM) { - cksum_type_t cksum_type = + enum cksum_types cksum_type = cksum_type_unpack(body->oa.o_valid & OBD_MD_FLFLAGS ? body->oa.o_flags : 0); @@ -2129,7 +2129,7 @@ int tgt_brw_write(struct tgt_session_info *tsi) __u32 *rcs; int objcount, niocount, npages; int rc, i, j; - cksum_type_t cksum_type = OBD_CKSUM_CRC32; + enum cksum_types cksum_type = OBD_CKSUM_CRC32; bool no_reply = false, mmap; struct tgt_thread_big_cache *tbc = req->rq_svc_thread->t_data; bool wait_sync = false; diff --git a/lustre/target/tgt_internal.h b/lustre/target/tgt_internal.h index 981e2ab..ec32234 100644 --- a/lustre/target/tgt_internal.h +++ b/lustre/target/tgt_internal.h @@ -35,7 +35,6 @@ #define _TG_INTERNAL_H #include -#include #include #include #include diff --git a/lustre/tests/check_fhandle_syscalls.c b/lustre/tests/check_fhandle_syscalls.c index 4460dbf..7080ee8 100644 --- a/lustre/tests/check_fhandle_syscalls.c +++ b/lustre/tests/check_fhandle_syscalls.c @@ -43,7 +43,7 @@ #include #include -#include +#include #define MAX_HANDLE_SZ 128 diff --git a/lustre/tests/checkfiemap.c b/lustre/tests/checkfiemap.c index e8e2ff3..2dea812 100644 --- a/lustre/tests/checkfiemap.c +++ b/lustre/tests/checkfiemap.c @@ -40,7 +40,7 @@ #include #include #include -#include +#include #ifndef FS_IOC_FIEMAP # define FS_IOC_FIEMAP (_IOWR('f', 11, struct fiemap)) diff --git a/lustre/tests/ll_dirstripe_verify.c b/lustre/tests/ll_dirstripe_verify.c index 6849b1c..24d584b 100644 --- a/lustre/tests/ll_dirstripe_verify.c +++ b/lustre/tests/ll_dirstripe_verify.c @@ -50,7 +50,7 @@ #include #include #include -#include +#include #define MAX_LOV_UUID_COUNT 1000 diff --git a/lustre/tests/llapi_fid_test.c b/lustre/tests/llapi_fid_test.c index c0fe8c4..ba8cd1e 100644 --- a/lustre/tests/llapi_fid_test.c +++ b/lustre/tests/llapi_fid_test.c @@ -42,7 +42,7 @@ #include #include -#include +#include #define ERROR(fmt, ...) \ fprintf(stderr, "%s: %s:%d: %s: " fmt "\n", \ diff --git a/lustre/tests/lp_utils.h b/lustre/tests/lp_utils.h index 5406148..b312534 100644 --- a/lustre/tests/lp_utils.h +++ b/lustre/tests/lp_utils.h @@ -35,7 +35,7 @@ #ifndef __LP_UTILS_H__ #define __LP_UTILS_H__ -#include "lustre/lustre_user.h" +#include #define FAIL(msg) \ \ diff --git a/lustre/tests/mpi/lp_utils.c b/lustre/tests/mpi/lp_utils.c index 879e814..4a68beb 100644 --- a/lustre/tests/mpi/lp_utils.c +++ b/lustre/tests/mpi/lp_utils.c @@ -44,7 +44,6 @@ #include #include #include -#include "lustre/lustre_user.h" #include "lp_utils.h" #define MAX_PROCESSES 8 diff --git a/lustre/tests/mpi/lp_utils.h b/lustre/tests/mpi/lp_utils.h index c541690..e30b60f 100644 --- a/lustre/tests/mpi/lp_utils.h +++ b/lustre/tests/mpi/lp_utils.h @@ -35,7 +35,7 @@ #ifndef __LP_UTILS_H__ #define __LP_UTILS_H__ -#include "lustre/lustre_user.h" +#include #define FAIL(msg) \ \ diff --git a/lustre/tests/mpi/parallel_grouplock.c b/lustre/tests/mpi/parallel_grouplock.c index dfe3cfa..fb38130 100644 --- a/lustre/tests/mpi/parallel_grouplock.c +++ b/lustre/tests/mpi/parallel_grouplock.c @@ -45,7 +45,6 @@ #include #include #include -#include #include "lp_utils.h" #define LPGL_BUF_LEN 8192 diff --git a/lustre/tests/openfile.c b/lustre/tests/openfile.c index 96cef6c..0a7bb8c 100644 --- a/lustre/tests/openfile.c +++ b/lustre/tests/openfile.c @@ -45,7 +45,7 @@ #include #include #include -#include +#include typedef struct flag_mapping { const char *string; diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 5e0cf1a..5e54d6d 100755 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -15987,7 +15987,6 @@ test_400a() { # LU-1606, was conf-sanity test_74 if ! [[ -d $prefix ]]; then # Assume we're running in tree and fixup the include path. - extra_flags+=" -I$LUSTRE/../libcfs/include" extra_flags+=" -I$LUSTRE/include" extra_flags+=" -L$LUSTRE/utils" fi @@ -16003,7 +16002,7 @@ run_test 400a "Lustre client api program can compile and link" test_400b() { # LU-1606, LU-5011 local header local out=$TMP/$tfile - local prefix=/usr/include/lustre + local prefix=/usr/include/linux/lustre # We use a hard coded prefix so that this test will not fail # when run in tree. There are headers in lustre/include/lustre/ @@ -16022,8 +16021,8 @@ test_400b() { # LU-1606, LU-5011 continue fi - if [[ "$(basename $header)" == liblustreapi.h ]]; then - continue # liblustreapi.h is deprecated. + if [[ "$(basename $header)" == lustre_ioctl.h ]]; then + continue # lustre_ioctl.h is internal header fi $CC -Wall -Werror -include $header -c -x c /dev/null -o $out || diff --git a/lustre/utils/gss/lgss_sk.c b/lustre/utils/gss/lgss_sk.c index e0430a3..1263944 100644 --- a/lustre/utils/gss/lgss_sk.c +++ b/lustre/utils/gss/lgss_sk.c @@ -40,7 +40,7 @@ #include #include #include -#include +#include #include "sk_utils.h" #include "err_util.h" diff --git a/lustre/utils/gss/sk_utils.h b/lustre/utils/gss/sk_utils.h index c7dbe77..6f7c027 100644 --- a/lustre/utils/gss/sk_utils.h +++ b/lustre/utils/gss/sk_utils.h @@ -30,7 +30,7 @@ #include #include -#include +#include #include #include #include diff --git a/lustre/utils/gss/svcgssd.c b/lustre/utils/gss/svcgssd.c index 0ed4f4c..7c11575 100644 --- a/lustre/utils/gss/svcgssd.c +++ b/lustre/utils/gss/svcgssd.c @@ -46,7 +46,6 @@ #include #include - #include #include #include @@ -58,7 +57,7 @@ #include "gss_util.h" #include "err_util.h" #include "lsupport.h" -#include "lustre_ver.h" +#include int null_enabled; int krb_enabled; diff --git a/lustre/utils/gss/svcgssd_proc.c b/lustre/utils/gss/svcgssd_proc.c index 367c9d1..5516bc1 100644 --- a/lustre/utils/gss/svcgssd_proc.c +++ b/lustre/utils/gss/svcgssd_proc.c @@ -57,7 +57,6 @@ #include "lsupport.h" #include "gss_oids.h" #include "sk_utils.h" -#include #define SVCGSSD_CONTEXT_CHANNEL "/proc/net/rpc/auth.sptlrpc.context/channel" #define SVCGSSD_INIT_CHANNEL "/proc/net/rpc/auth.sptlrpc.init/channel" diff --git a/lustre/utils/l_getidentity.c b/lustre/utils/l_getidentity.c index 1646079..29b0c5e 100644 --- a/lustre/utils/l_getidentity.c +++ b/lustre/utils/l_getidentity.c @@ -48,8 +48,8 @@ #include #include #include -#include -#include +#include +#include #define PERM_PATHNAME "/etc/lustre/perm.conf" diff --git a/lustre/utils/lctl.c b/lustre/utils/lctl.c index 282ce02..6764100 100644 --- a/lustre/utils/lctl.c +++ b/lustre/utils/lctl.c @@ -44,7 +44,7 @@ #include #include #include "obdctl.h" -#include +#include static int lctl_list_commands(int argc, char **argv); diff --git a/lustre/utils/lfs.c b/lustre/utils/lfs.c index 35c908e..d758248 100644 --- a/lustre/utils/lfs.c +++ b/lustre/utils/lfs.c @@ -65,8 +65,8 @@ #include #include #include -#include -#include +#include +#include #ifndef ARRAY_SIZE # define ARRAY_SIZE(a) ((sizeof(a)) / (sizeof((a)[0]))) diff --git a/lustre/utils/lhsmtool_posix.c b/lustre/utils/lhsmtool_posix.c index 3bdaa42..804dbe7 100644 --- a/lustre/utils/lhsmtool_posix.c +++ b/lustre/utils/lhsmtool_posix.c @@ -57,7 +57,7 @@ #include #include -#include +#include #include /* Progress reporting period */ diff --git a/lustre/utils/liblustreapi.c b/lustre/utils/liblustreapi.c index b68662d..5074e43 100644 --- a/lustre/utils/liblustreapi.c +++ b/lustre/utils/liblustreapi.c @@ -74,8 +74,8 @@ #include #include #include -#include -#include +#include +#include #include "lustreapi_internal.h" static int llapi_msg_level = LLAPI_MSG_MAX; @@ -3957,7 +3957,7 @@ static int cb_migrate_mdt_init(char *path, DIR *parent, DIR **dirp, { struct find_param *param = (struct find_param *)param_data; DIR *tmp_parent = parent; - char raw[OBD_MAX_IOCTL_BUFFER] = {'\0'}; + char raw[MAX_IOC_BUFLEN] = {'\0'}; char *rawbuf = raw; struct obd_ioctl_data data = { 0 }; int fd; @@ -4271,7 +4271,7 @@ int llapi_getstripe(char *path, struct find_param *param) int llapi_obd_fstatfs(int fd, __u32 type, __u32 index, struct obd_statfs *stat_buf, struct obd_uuid *uuid_buf) { - char raw[OBD_MAX_IOCTL_BUFFER] = {'\0'}; + char raw[MAX_IOC_BUFLEN] = {'\0'}; char *rawbuf = raw; struct obd_ioctl_data data = { 0 }; int rc = 0; diff --git a/lustre/utils/liblustreapi_hsm.c b/lustre/utils/liblustreapi_hsm.c index ad9f229..ed3511f 100644 --- a/lustre/utils/liblustreapi_hsm.c +++ b/lustre/utils/liblustreapi_hsm.c @@ -58,7 +58,6 @@ #endif #include -#include #include #include "lustreapi_internal.h" diff --git a/lustre/utils/liblustreapi_layout.c b/lustre/utils/liblustreapi_layout.c index 0168de2..5df0ae6 100644 --- a/lustre/utils/liblustreapi_layout.c +++ b/lustre/utils/liblustreapi_layout.c @@ -38,7 +38,6 @@ #include #include -#include #include "lustreapi_internal.h" /** diff --git a/lustre/utils/liblustreapi_param.c b/lustre/utils/liblustreapi_param.c index 56c1979..b9f86e8 100644 --- a/lustre/utils/liblustreapi_param.c +++ b/lustre/utils/liblustreapi_param.c @@ -28,7 +28,7 @@ #include #include -#include +#include #include #include "lustreapi_internal.h" diff --git a/lustre/utils/liblustreapi_util.c b/lustre/utils/liblustreapi_util.c index 44eeb31..52e7f9c 100644 --- a/lustre/utils/liblustreapi_util.c +++ b/lustre/utils/liblustreapi_util.c @@ -42,7 +42,7 @@ #include #include #include /* only needed for compat strlcpy() */ -#include /* only until LUSTRE_VERSION_CODE is gone */ +#include /* only until LUSTRE_VERSION_CODE is gone */ #include "lustreapi_internal.h" /* diff --git a/lustre/utils/libmount_utils_ldiskfs.c b/lustre/utils/libmount_utils_ldiskfs.c index c6751fc..c6ece22 100644 --- a/lustre/utils/libmount_utils_ldiskfs.c +++ b/lustre/utils/libmount_utils_ldiskfs.c @@ -69,7 +69,7 @@ #include #include #include -#include +#include #ifdef HAVE_SELINUX #include diff --git a/lustre/utils/ll_decode_filter_fid.c b/lustre/utils/ll_decode_filter_fid.c index ea10e6d..c8370fb 100644 --- a/lustre/utils/ll_decode_filter_fid.c +++ b/lustre/utils/ll_decode_filter_fid.c @@ -43,7 +43,7 @@ #include #include #include -#include +#include #define PFID_STRIPE_IDX_BITS 16 #define PFID_STRIPE_COUNT_MASK ((1 << PFID_STRIPE_IDX_BITS) - 1) diff --git a/lustre/utils/ll_decode_linkea.c b/lustre/utils/ll_decode_linkea.c index 0e3f863..1038df3 100644 --- a/lustre/utils/ll_decode_linkea.c +++ b/lustre/utils/ll_decode_linkea.c @@ -38,7 +38,7 @@ #include #include #include -#include +#include #define BUFFER_SIZE 65536 diff --git a/lustre/utils/llog_reader.c b/lustre/utils/llog_reader.c index 49f1f2a..3548d25 100644 --- a/lustre/utils/llog_reader.c +++ b/lustre/utils/llog_reader.c @@ -54,11 +54,11 @@ #include #include #include -#include -#include +#include +#include +#include +#include #include -#include -#include static inline int ext2_test_bit(int nr, const void *addr) { diff --git a/lustre/utils/lr_reader.c b/lustre/utils/lr_reader.c index 1b39180..a6d94c1 100644 --- a/lustre/utils/lr_reader.c +++ b/lustre/utils/lr_reader.c @@ -60,8 +60,8 @@ #include #include -#include -#include +#include +#include char *progname; static struct option const long_opts[] = { diff --git a/lustre/utils/lshowmount.c b/lustre/utils/lshowmount.c index 67f8587..5667ea0 100644 --- a/lustre/utils/lshowmount.c +++ b/lustre/utils/lshowmount.c @@ -49,7 +49,7 @@ #include #include -#include +#include #include "nidlist.h" #include "lustreapi_internal.h" diff --git a/lustre/utils/lsnapshot.c b/lustre/utils/lsnapshot.c index 856c6e9..309bbd8 100644 --- a/lustre/utils/lsnapshot.c +++ b/lustre/utils/lsnapshot.c @@ -44,8 +44,8 @@ #include #include -#include -#include +#include +#include #include "obdctl.h" diff --git a/lustre/utils/lustre_cfg.c b/lustre/utils/lustre_cfg.c index 45c3d5a..cb60057 100644 --- a/lustre/utils/lustre_cfg.c +++ b/lustre/utils/lustre_cfg.c @@ -56,9 +56,9 @@ #include #include #include -#include -#include -#include +#include +#include +#include #include #include diff --git a/lustre/utils/lustre_lfsck.c b/lustre/utils/lustre_lfsck.c index 45f492d..2524f99 100644 --- a/lustre/utils/lustre_lfsck.c +++ b/lustre/utils/lustre_lfsck.c @@ -42,9 +42,9 @@ #include "obdctl.h" #include "lustreapi_internal.h" -#include #include -#include +#include +#include /* Needs to be last to avoid clashes */ #include #include diff --git a/lustre/utils/lustreapi_internal.h b/lustre/utils/lustreapi_internal.h index ba2a847..3b94298 100644 --- a/lustre/utils/lustreapi_internal.h +++ b/lustre/utils/lustreapi_internal.h @@ -42,8 +42,10 @@ #include #include -#include -#include +#include +#include + +#define MAX_IOC_BUFLEN 8192 #define WANT_PATH 0x1 #define WANT_FSNAME 0x2 diff --git a/lustre/utils/mkfs_lustre.c b/lustre/utils/mkfs_lustre.c index c95e5be..a9faace 100644 --- a/lustre/utils/mkfs_lustre.c +++ b/lustre/utils/mkfs_lustre.c @@ -62,8 +62,8 @@ #include #include #include -#include -#include +#include +#include #include "mount_utils.h" diff --git a/lustre/utils/mount_lustre.c b/lustre/utils/mount_lustre.c index 9cd75f2..4c6e597 100644 --- a/lustre/utils/mount_lustre.c +++ b/lustre/utils/mount_lustre.c @@ -49,7 +49,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/lustre/utils/mount_utils.c b/lustre/utils/mount_utils.c index 21c0968..e3f44d0 100644 --- a/lustre/utils/mount_utils.c +++ b/lustre/utils/mount_utils.c @@ -42,7 +42,7 @@ #include #include #include -#include +#include #include #include #include @@ -50,8 +50,7 @@ #include #include #include -#include -#include +#include #include #include #include diff --git a/lustre/utils/mount_utils.h b/lustre/utils/mount_utils.h index 251a1fc..a8cff6d 100644 --- a/lustre/utils/mount_utils.h +++ b/lustre/utils/mount_utils.h @@ -55,8 +55,8 @@ #include #include -#include -#include +#include +#include extern char *progname; extern int verbose; diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index cb523a7..db5d248 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -69,14 +69,14 @@ #include #include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include -#include -#include #define MAX_STRING_SIZE 128 @@ -1010,8 +1010,8 @@ int jt_obd_list_ioctl(int argc, char **argv) memset(buf, 0, sizeof(rawbuf)); data->ioc_version = OBD_IOCTL_VERSION; data->ioc_inllen1 = - sizeof(rawbuf) - cfs_size_round(sizeof(*data)); - data->ioc_inlbuf1 = buf + cfs_size_round(sizeof(*data)); + sizeof(rawbuf) - __ALIGN_KERNEL(sizeof(*data), 8); + data->ioc_inlbuf1 = buf + __ALIGN_KERNEL(sizeof(*data), 8); data->ioc_len = obd_ioctl_packlen(data); data->ioc_count = index; @@ -2221,7 +2221,7 @@ int jt_obd_lov_getconfig(int argc, char **argv) memset(&desc, 0, sizeof(desc)); obd_str2uuid(&desc.ld_uuid, argv[1]); - desc.ld_tgt_count = ((OBD_MAX_IOCTL_BUFFER-sizeof(data)-sizeof(desc)) / + desc.ld_tgt_count = ((MAX_IOC_BUFLEN-sizeof(data)-sizeof(desc)) / (sizeof(*uuidarray) + sizeof(*obdgens))); repeat: diff --git a/lustre/utils/obdctl.h b/lustre/utils/obdctl.h index ad2c56a..41823b2 100644 --- a/lustre/utils/obdctl.h +++ b/lustre/utils/obdctl.h @@ -33,9 +33,7 @@ #ifndef _OBDCTL_H_ #define _OBDCTL_H_ -#include - -#define MAX_IOC_BUFLEN 8192 +#include /* ptlctl.a */ int ptl_initialize(int argc, char **argv); diff --git a/lustre/utils/wiretest.c b/lustre/utils/wiretest.c index e13c636..1788512 100644 --- a/lustre/utils/wiretest.c +++ b/lustre/utils/wiretest.c @@ -35,9 +35,9 @@ #include #include -#include -#include -#include +#include +#include +#include #define LASSERT(cond) if (!(cond)) { printf("failed " #cond "\n"); ret = 1; } #define LASSERTF(cond, fmt, ...) if (!(cond)) { printf("failed '" #cond "'" fmt, ## __VA_ARGS__);ret = 1;}