1
0
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:
Sam Lang 2013-04-24 12:52:57 -07:00 committed by Jeremy Allison
parent 4b97a19e58
commit 301a1f9192
5 changed files with 1322 additions and 0 deletions

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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'))

View File

@ -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=',')