mirror of
https://github.com/samba-team/samba.git
synced 2025-03-27 22:50:26 +03:00
Implements a vfs module for cephfs, a distributed file system
with posix semantics, built on the ceph distributed object storage layer. The ceph vfs module interfaces to the libcephfs userspace API, and is primarily a lightweight wrapper around libcephfs, translating error codes and parameters as necessary. Signed-off-by: Sam Lang <sam.lang@inktank.com> Reviewed-by: Volker Lendecke <Volker.Lendecke@SerNet.DE> Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
parent
4b97a19e58
commit
301a1f9192
@ -913,6 +913,7 @@ VFS_LINUX_XFS_SGID_OBJ = modules/vfs_linux_xfs_sgid.o
|
||||
VFS_TIME_AUDIT_OBJ = modules/vfs_time_audit.o
|
||||
VFS_MEDIA_HARMONY_OBJ = modules/vfs_media_harmony.o
|
||||
VFS_BTRFS_OBJ = modules/vfs_btrfs.o
|
||||
VFS_CEPH_OBJ = modules/vfs_ceph.o
|
||||
|
||||
PAM_ERRORS_OBJ = ../libcli/auth/pam_errors.o
|
||||
PLAINTEXT_AUTH_OBJ = auth/pampass.o auth/pass_check.o $(PAM_ERRORS_OBJ)
|
||||
@ -2965,6 +2966,10 @@ bin/btrfs.@SHLIBEXT@: $(BINARY_PREREQS) $(VFS_BTRFS_OBJ)
|
||||
@echo "Building plugin $@"
|
||||
@$(SHLD_MODULE) $(VFS_BTRFS_OBJ)
|
||||
|
||||
bin/ceph.@SHLIBEXT@: $(BINARY_PREREQS) $(VFS_CEPH_OBJ)
|
||||
@echo "Building plugin $@"
|
||||
@$(SHLD_MODULE) $(VFS_CEPH_OBJ)
|
||||
|
||||
#########################################################
|
||||
## IdMap NSS plugins
|
||||
|
||||
|
@ -1023,6 +1023,36 @@ if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
|
||||
default_shared_modules="$default_shared_modules vfs_gpfs"
|
||||
fi
|
||||
|
||||
#############################
|
||||
# check if building with libcephfs
|
||||
# fail if --with-libcephfs specified but no headers found
|
||||
printf "%s" "checking for CephFS... "
|
||||
AC_CHECK_HEADERS(cephfs/libcephfs.h)
|
||||
|
||||
save_LIBS="$LIBS"
|
||||
LIBS="$LIBS -lcephfs"
|
||||
AC_TRY_LINK([#include <cephfs/libcephfs.h>],
|
||||
[ceph_version(0, 0, 0)],
|
||||
samba_cv_HAVE_CEPHFS=yes,
|
||||
samba_cv_HAVE_CEPHFS=no
|
||||
)
|
||||
|
||||
if test x"$ac_cv_header_cephfs_libcephfs_h" = x"yes" && test x"$samba_cv_HAVE_CEPHFS" = x"yes"; then
|
||||
AC_DEFINE(HAVE_CEPH, 1, [Whether CEPH headers are available])
|
||||
default_shared_modules="$default_shared_modules vfs_ceph"
|
||||
save_CFLAGS="$CFLAGS"
|
||||
save_LDFLAGS="$LDFLAGS"
|
||||
save_LIBS="$save_LIBS -lcephfs"
|
||||
else
|
||||
if test x"$CEPHFS_PATH_SPEC" = x"yes"; then
|
||||
AC_MSG_ERROR([No valid libcephfs found in ${CEPHFS_PATH}])
|
||||
fi
|
||||
fi
|
||||
|
||||
CFLAGS="$save_CFLAGS"
|
||||
LDFLAGS="$save_LDFLAGS"
|
||||
LIBS="$save_LIBS"
|
||||
|
||||
# Note that all the libunwind symbols in the API are defined to internal
|
||||
# platform-specific version, so we must include libunwind.h before checking
|
||||
# any of them.
|
||||
@ -6455,6 +6485,7 @@ SMB_MODULE(vfs_linux_xfs_sgid, \$(VFS_LINUX_XFS_SGID_OBJ), "bin/linux_xfs_sgid.$
|
||||
SMB_MODULE(vfs_time_audit, \$(VFS_TIME_AUDIT_OBJ), "bin/time_audit.$SHLIBEXT", VFS)
|
||||
SMB_MODULE(vfs_media_harmony, \$(VFS_MEDIA_HARMONY_OBJ), "bin/media_harmony.$SHLIBEXT", VFS)
|
||||
SMB_MODULE(vfs_btrfs, \$(VFS_BTRFS_OBJ), "bin/btrfs.$SHLIBEXT", VFS)
|
||||
SMB_MODULE(vfs_ceph, \$(VFS_CEPH_OBJ), "bin/ceph.$SHLIBEXT", VFS)
|
||||
|
||||
SMB_SUBSYSTEM(VFS,smbd/vfs.o)
|
||||
|
||||
|
1261
source3/modules/vfs_ceph.c
Normal file
1261
source3/modules/vfs_ceph.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -50,6 +50,7 @@ VFS_LINUX_XFS_SGID_SRC = 'vfs_linux_xfs_sgid.c'
|
||||
VFS_TIME_AUDIT_SRC = 'vfs_time_audit.c'
|
||||
VFS_MEDIA_HARMONY_SRC = 'vfs_media_harmony.c'
|
||||
VFS_BTRFS_SRC = 'vfs_btrfs.c'
|
||||
VFS_CEPH_SRC = 'vfs_ceph.c'
|
||||
|
||||
|
||||
bld.SAMBA3_SUBSYSTEM('NFS4_ACLS',
|
||||
@ -503,3 +504,12 @@ bld.SAMBA3_MODULE('perfcount_test',
|
||||
init_function='',
|
||||
internal_module=bld.SAMBA3_IS_STATIC_MODULE('perfcount_test'),
|
||||
enabled=bld.SAMBA3_IS_ENABLED_MODULE('perfcount_test'))
|
||||
|
||||
bld.SAMBA3_MODULE('vfs_ceph',
|
||||
subsystem='vfs',
|
||||
source=VFS_CEPH_SRC,
|
||||
deps='samba-util cephfs',
|
||||
init_function='',
|
||||
internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_ceph'),
|
||||
enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_ceph'),
|
||||
cflags=bld.CONFIG_GET('CCFLAGS_CEPHFS'))
|
||||
|
@ -54,6 +54,10 @@ def set_options(opt):
|
||||
help=("enable building against (too) old version of ctdb (default=false)"),
|
||||
action="store_true", dest='enable_old_ctdb', default=False)
|
||||
|
||||
opt.add_option('--with-libcephfs',
|
||||
help=("Directory under which libcephfs is installed"),
|
||||
action="store", dest='libcephfs_dir', default=None)
|
||||
|
||||
|
||||
|
||||
def configure(conf):
|
||||
@ -1699,6 +1703,14 @@ main() {
|
||||
if conf.CHECK_HEADERS('linux/ioctl.h sys/ioctl.h'):
|
||||
conf.DEFINE('HAVE_LINUX_IOCTL', '1')
|
||||
|
||||
conf.env['CCFLAGS_CEPHFS'] = "-D_FILE_OFFSET_BITS=64"
|
||||
if Options.options.libcephfs_dir:
|
||||
conf.env['CPPPATH_CEPHFS'] = Options.options.libcephfs_dir + '/include'
|
||||
conf.env['LIBPATH_CEPHFS'] = Options.options.libcephfs_dir + '/lib'
|
||||
|
||||
if conf.CHECK_HEADERS('cephfs/libcephfs.h', False, False, 'cephfs') and conf.CHECK_LIB('cephfs'):
|
||||
conf.DEFINE('HAVE_CEPH', '1')
|
||||
|
||||
default_static_modules.extend(TO_LIST('''pdb_smbpasswd pdb_tdbsam pdb_wbc_sam
|
||||
auth_sam auth_unix auth_winbind auth_wbc
|
||||
auth_domain auth_builtin vfs_default
|
||||
@ -1766,6 +1778,9 @@ main() {
|
||||
if conf.CONFIG_SET('SAMBA_FAM_LIBS'):
|
||||
default_shared_modules.extend(TO_LIST('vfs_notify_fam'))
|
||||
|
||||
if conf.CONFIG_SET("HAVE_CEPH"):
|
||||
default_shared_modules.extend(TO_LIST('vfs_ceph'))
|
||||
|
||||
explicit_shared_modules = TO_LIST(Options.options.shared_modules, delimiter=',')
|
||||
explicit_static_modules = TO_LIST(Options.options.static_modules, delimiter=',')
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user