svn commit: samba r19654 - in branches/SAMBA_3_0_24/source: .
include lib smbd
jmcd at samba.org
jmcd at samba.org
Fri Nov 10 15:40:49 GMT 2006
Author: jmcd
Date: 2006-11-10 15:40:48 +0000 (Fri, 10 Nov 2006)
New Revision: 19654
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19654
Log:
merge GPFS vfs support from 3.0, including adding kernel_flock vfs op.
Modified:
branches/SAMBA_3_0_24/source/Makefile.in
branches/SAMBA_3_0_24/source/configure.in
branches/SAMBA_3_0_24/source/include/smbprofile.h
branches/SAMBA_3_0_24/source/include/vfs.h
branches/SAMBA_3_0_24/source/include/vfs_macros.h
branches/SAMBA_3_0_24/source/lib/system.c
branches/SAMBA_3_0_24/source/smbd/open.c
branches/SAMBA_3_0_24/source/smbd/vfs-wrap.c
branches/SAMBA_3_0_24/source/smbd/vfs.c
Changeset:
Modified: branches/SAMBA_3_0_24/source/Makefile.in
===================================================================
--- branches/SAMBA_3_0_24/source/Makefile.in 2006-11-10 15:28:44 UTC (rev 19653)
+++ branches/SAMBA_3_0_24/source/Makefile.in 2006-11-10 15:40:48 UTC (rev 19654)
@@ -374,6 +374,7 @@
VFS_SHADOW_COPY_OBJ = modules/vfs_shadow_copy.o
VFS_AFSACL_OBJ = modules/vfs_afsacl.o
VFS_CATIA_OBJ = modules/vfs_catia.o
+VFS_GPFS_OBJ = modules/vfs_gpfs.o modules/gpfs.o
PLAINTEXT_AUTH_OBJ = auth/pampass.o auth/pass_check.o
@@ -1373,6 +1374,10 @@
@$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_CATIA_OBJ:.o=. at PICSUFFIX@) \
@SONAMEFLAG@`basename $@`
+bin/gpfs. at SHLIBEXT@: $(VFS_GPFS_OBJ)
+ @echo "Building plugin $@"
+ @$(SHLD) $(LDSHFLAGS) -o $@ $(VFS_GPFS_OBJ) \
+ @SONAMEFLAG@`basename $@`
bin/wbinfo at EXEEXT@: $(WBINFO_OBJ) @BUILD_POPT@ bin/.dummy
@echo Linking $@
Modified: branches/SAMBA_3_0_24/source/configure.in
===================================================================
--- branches/SAMBA_3_0_24/source/configure.in 2006-11-10 15:28:44 UTC (rev 19653)
+++ branches/SAMBA_3_0_24/source/configure.in 2006-11-10 15:40:48 UTC (rev 19654)
@@ -1286,6 +1286,20 @@
AC_CHECK_FUNCS(backtrace_symbols)
AC_CHECK_LIB(exc, trace_back_stack)
+echo -n "checking for GPFS GPL libs... "
+save_LIBS="$LIBS"
+LIBS="$LIBS -lgpfs_gpl"
+AC_TRY_LINK([#include <gpfs_gpl.h>],
+ [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
+ samba_cv_HAVE_GPFS=yes,
+ samba_cv_HAVE_GPFS=no)
+echo $samba_cv_HAVE_GPFS
+if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
+ AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
+ default_shared_modules="$default_shared_modules vfs_gpfs"
+fi
+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.
@@ -5598,6 +5612,7 @@
SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
+SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
SMB_SUBSYSTEM(VFS,smbd/vfs.o)
AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
Modified: branches/SAMBA_3_0_24/source/include/smbprofile.h
===================================================================
--- branches/SAMBA_3_0_24/source/include/smbprofile.h 2006-11-10 15:28:44 UTC (rev 19653)
+++ branches/SAMBA_3_0_24/source/include/smbprofile.h 2006-11-10 15:40:48 UTC (rev 19654)
@@ -101,6 +101,8 @@
unsigned syscall_ftruncate_count;
unsigned syscall_ftruncate_time;
unsigned syscall_fcntl_lock_count;
+ unsigned syscall_kernel_flock_count;
+ unsigned syscall_kernel_flock_time;
unsigned syscall_fcntl_lock_time;
unsigned syscall_fcntl_getlock_count;
unsigned syscall_fcntl_getlock_time;
Modified: branches/SAMBA_3_0_24/source/include/vfs.h
===================================================================
--- branches/SAMBA_3_0_24/source/include/vfs.h 2006-11-10 15:28:44 UTC (rev 19653)
+++ branches/SAMBA_3_0_24/source/include/vfs.h 2006-11-10 15:40:48 UTC (rev 19654)
@@ -142,6 +142,7 @@
SMB_VFS_OP_UTIME,
SMB_VFS_OP_FTRUNCATE,
SMB_VFS_OP_LOCK,
+ SMB_VFS_OP_KERNEL_FLOCK,
SMB_VFS_OP_GETLOCK,
SMB_VFS_OP_SYMLINK,
SMB_VFS_OP_READLINK,
@@ -264,6 +265,7 @@
int (*utime)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, struct utimbuf *times);
int (*ftruncate)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_OFF_T offset);
BOOL (*lock)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, int op, SMB_OFF_T offset, SMB_OFF_T count, int type);
+ int (*kernel_flock)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, uint32 share_mode);
BOOL (*getlock)(struct vfs_handle_struct *handle, struct files_struct *fsp, int fd, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid);
int (*symlink)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *oldpath, const char *newpath);
int (*readlink)(struct vfs_handle_struct *handle, struct connection_struct *conn, const char *path, char *buf, size_t bufsiz);
@@ -378,6 +380,7 @@
struct vfs_handle_struct *utime;
struct vfs_handle_struct *ftruncate;
struct vfs_handle_struct *lock;
+ struct vfs_handle_struct *kernel_flock;
struct vfs_handle_struct *getlock;
struct vfs_handle_struct *symlink;
struct vfs_handle_struct *readlink;
Modified: branches/SAMBA_3_0_24/source/include/vfs_macros.h
===================================================================
--- branches/SAMBA_3_0_24/source/include/vfs_macros.h 2006-11-10 15:28:44 UTC (rev 19653)
+++ branches/SAMBA_3_0_24/source/include/vfs_macros.h 2006-11-10 15:40:48 UTC (rev 19654)
@@ -70,6 +70,7 @@
#define SMB_VFS_UTIME(conn, path, times) ((conn)->vfs.ops.utime((conn)->vfs.handles.utime, (conn), (path), (times)))
#define SMB_VFS_FTRUNCATE(fsp, fd, offset) ((fsp)->conn->vfs.ops.ftruncate((fsp)->conn->vfs.handles.ftruncate, (fsp), (fd), (offset)))
#define SMB_VFS_LOCK(fsp, fd, op, offset, count, type) ((fsp)->conn->vfs.ops.lock((fsp)->conn->vfs.handles.lock, (fsp), (fd) ,(op), (offset), (count), (type)))
+#define SMB_VFS_KERNEL_FLOCK(fsp, fd, share_mode) ((fsp)->conn->vfs.ops.kernel_flock((fsp)->conn->vfs.handles.kernel_flock, (fsp), (fd), (share_mode)))
#define SMB_VFS_GETLOCK(fsp, fd, poffset, pcount, ptype, ppid) ((fsp)->conn->vfs.ops.getlock((fsp)->conn->vfs.handles.getlock, (fsp), (fd) ,(poffset), (pcount), (ptype), (ppid)))
#define SMB_VFS_SYMLINK(conn, oldpath, newpath) ((conn)->vfs.ops.symlink((conn)->vfs.handles.symlink, (conn), (oldpath), (newpath)))
#define SMB_VFS_READLINK(conn, path, buf, bufsiz) ((conn)->vfs.ops.readlink((conn)->vfs.handles.readlink, (conn), (path), (buf), (bufsiz)))
@@ -182,6 +183,7 @@
#define SMB_VFS_OPAQUE_UTIME(conn, path, times) ((conn)->vfs_opaque.ops.utime((conn)->vfs_opaque.handles.utime, (conn), (path), (times)))
#define SMB_VFS_OPAQUE_FTRUNCATE(fsp, fd, offset) ((fsp)->conn->vfs_opaque.ops.ftruncate((fsp)->conn->vfs_opaque.handles.ftruncate, (fsp), (fd), (offset)))
#define SMB_VFS_OPAQUE_LOCK(fsp, fd, op, offset, count, type) ((fsp)->conn->vfs_opaque.ops.lock((fsp)->conn->vfs_opaque.handles.lock, (fsp), (fd) ,(op), (offset), (count), (type)))
+#define SMB_VFS_OPAQUE_FLOCK(fsp, fd, share_mode) ((fsp)->conn->vfs_opaque.ops.lock((fsp)->conn->vfs_opaque.handles.kernel_flock, (fsp), (fd), (share_mode)))
#define SMB_VFS_OPAQUE_GETLOCK(fsp, fd, poffset, pcount, ptype, ppid) ((fsp)->conn->vfs_opaque.ops.getlock((fsp)->conn->vfs_opaque.handles.getlock, (fsp), (fd), (poffset), (pcount), (ptype), (ppid)))
#define SMB_VFS_OPAQUE_SYMLINK(conn, oldpath, newpath) ((conn)->vfs_opaque.ops.symlink((conn)->vfs_opaque.handles.symlink, (conn), (oldpath), (newpath)))
#define SMB_VFS_OPAQUE_READLINK(conn, path, buf, bufsiz) ((conn)->vfs_opaque.ops.readlink((conn)->vfs_opaque.handles.readlink, (conn), (path), (buf), (bufsiz)))
@@ -295,6 +297,7 @@
#define SMB_VFS_NEXT_UTIME(handle, conn, path, times) ((handle)->vfs_next.ops.utime((handle)->vfs_next.handles.utime, (conn), (path), (times)))
#define SMB_VFS_NEXT_FTRUNCATE(handle, fsp, fd, offset) ((handle)->vfs_next.ops.ftruncate((handle)->vfs_next.handles.ftruncate, (fsp), (fd), (offset)))
#define SMB_VFS_NEXT_LOCK(handle, fsp, fd, op, offset, count, type) ((handle)->vfs_next.ops.lock((handle)->vfs_next.handles.lock, (fsp), (fd) ,(op), (offset), (count), (type)))
+#define SMB_VFS_NEXT_KERNEL_FLOCK(handle, fsp, fd, share_mode)((handle)->vfs_next.ops.lock((handle)->vfs_next.handles.kernel_flock, (fsp), (fd), (share_mode)))
#define SMB_VFS_NEXT_GETLOCK(handle, fsp, fd, poffset, pcount, ptype, ppid) ((handle)->vfs_next.ops.getlock((handle)->vfs_next.handles.getlock, (fsp), (fd), (poffset), (pcount), (ptype), (ppid)))
#define SMB_VFS_NEXT_SYMLINK(handle, conn, oldpath, newpath) ((handle)->vfs_next.ops.symlink((handle)->vfs_next.handles.symlink, (conn), (oldpath), (newpath)))
#define SMB_VFS_NEXT_READLINK(handle, conn, path, buf, bufsiz) ((handle)->vfs_next.ops.readlink((handle)->vfs_next.handles.readlink, (conn), (path), (buf), (bufsiz)))
Modified: branches/SAMBA_3_0_24/source/lib/system.c
===================================================================
--- branches/SAMBA_3_0_24/source/lib/system.c 2006-11-10 15:28:44 UTC (rev 19653)
+++ branches/SAMBA_3_0_24/source/lib/system.c 2006-11-10 15:40:48 UTC (rev 19654)
@@ -367,6 +367,28 @@
}
/*******************************************************************
+ A flock() wrapper that will perform the kernel flock.
+********************************************************************/
+
+void kernel_flock(int fd, uint32 share_mode)
+{
+#if HAVE_KERNEL_SHARE_MODES
+ int kernel_mode = 0;
+ if (share_mode == FILE_SHARE_WRITE) {
+ kernel_mode = LOCK_MAND|LOCK_WRITE;
+ } else if (share_mode == FILE_SHARE_READ) {
+ kernel_mode = LOCK_MAND|LOCK_READ;
+ } else if (share_mode == FILE_SHARE_NONE) {
+ kernel_mode = LOCK_MAND;
+ }
+ if (kernel_mode) {
+ flock(fd, kernel_mode);
+ }
+#endif
+ ;
+}
+
+/*******************************************************************
An opendir wrapper that will deal with 64 bit filesizes.
********************************************************************/
Modified: branches/SAMBA_3_0_24/source/smbd/open.c
===================================================================
--- branches/SAMBA_3_0_24/source/smbd/open.c 2006-11-10 15:28:44 UTC (rev 19653)
+++ branches/SAMBA_3_0_24/source/smbd/open.c 2006-11-10 15:40:48 UTC (rev 19654)
@@ -774,29 +774,6 @@
}
/****************************************************************************
- Set a kernel flock on a file for NFS interoperability.
- This requires a patch to Linux.
-****************************************************************************/
-
-static void kernel_flock(files_struct *fsp, uint32 share_mode)
-{
-#if HAVE_KERNEL_SHARE_MODES
- int kernel_mode = 0;
- if (share_mode == FILE_SHARE_WRITE) {
- kernel_mode = LOCK_MAND|LOCK_WRITE;
- } else if (share_mode == FILE_SHARE_READ) {
- kernel_mode = LOCK_MAND|LOCK_READ;
- } else if (share_mode == FILE_SHARE_NONE) {
- kernel_mode = LOCK_MAND;
- }
- if (kernel_mode) {
- flock(fsp->fh->fd, kernel_mode);
- }
-#endif
- ;
-}
-
-/****************************************************************************
On overwrite open ensure that the attributes match.
****************************************************************************/
@@ -1115,7 +1092,9 @@
struct share_mode_lock *lck = NULL;
uint32 open_access_mask = access_mask;
NTSTATUS status;
+ int ret_flock;
+
if (conn->printer) {
/*
* Printers are handled completely differently.
@@ -1631,10 +1610,21 @@
these only read them. Nobody but Samba can ever set a deny
mode and we have already checked our more authoritative
locking database for permission to set this deny mode. If
- the kernel refuses the operations then the kernel is wrong */
+ the kernel refuses the operations then the kernel is wrong.
+ note that GPFS supports it as well - jmcd */
- kernel_flock(fsp, share_access);
+ ret_flock = SMB_VFS_KERNEL_FLOCK(fsp, fsp->fh->fd, share_access);
+ if(ret_flock == -1 ){
+ talloc_free(lck);
+ fd_close(conn, fsp);
+ file_free(fsp);
+
+ set_saved_ntstatus(NT_STATUS_SHARING_VIOLATION);
+ return NULL;
+ }
+
+
/*
* At this point onwards, we can guarentee that the share entry
* is locked, whether we created the file or not, and that the
Modified: branches/SAMBA_3_0_24/source/smbd/vfs-wrap.c
===================================================================
--- branches/SAMBA_3_0_24/source/smbd/vfs-wrap.c 2006-11-10 15:28:44 UTC (rev 19653)
+++ branches/SAMBA_3_0_24/source/smbd/vfs-wrap.c 2006-11-10 15:40:48 UTC (rev 19654)
@@ -764,6 +764,15 @@
return result;
}
+int vfswrap_kernel_flock(vfs_handle_struct *handle, files_struct *fsp,
+ int fd, uint32 share_mode)
+{
+ START_PROFILE(syscall_kernel_flock);
+ kernel_flock(fd, share_mode);
+ END_PROFILE(syscall_kernel_flock);
+ return 0;
+}
+
BOOL vfswrap_getlock(vfs_handle_struct *handle, files_struct *fsp, int fd, SMB_OFF_T *poffset, SMB_OFF_T *pcount, int *ptype, pid_t *ppid)
{
BOOL result;
Modified: branches/SAMBA_3_0_24/source/smbd/vfs.c
===================================================================
--- branches/SAMBA_3_0_24/source/smbd/vfs.c 2006-11-10 15:28:44 UTC (rev 19653)
+++ branches/SAMBA_3_0_24/source/smbd/vfs.c 2006-11-10 15:40:48 UTC (rev 19654)
@@ -97,6 +97,7 @@
vfswrap_utime,
vfswrap_ftruncate,
vfswrap_lock,
+ vfswrap_kernel_flock,
vfswrap_getlock,
vfswrap_symlink,
vfswrap_readlink,
More information about the samba-cvs
mailing list