summaryrefslogtreecommitdiff
path: root/source3/modules
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2009-05-18 06:02:07 +0200
committerKarolin Seeger <kseeger@samba.org>2009-05-26 09:39:45 +0200
commit8fdb9573cd1b8e5f2b4ed6fb76a8ab946266edf3 (patch)
tree01af8ae1cd54145123e6d7b1f69d12ab54781f1a /source3/modules
parent343253d04bd04ff972a5c9b03199bcc8fa820748 (diff)
downloadsamba-8fdb9573cd1b8e5f2b4ed6fb76a8ab946266edf3.tar.gz
Fix bug disclosed by lock8 torture test
We have to drop the gpfs level share modes, regardless of whether we put the file into the pending close queue. (cherry picked from commit 0eaf040f469972d1dfd2b53d8df97bb135e3e4d4)
Diffstat (limited to 'source3/modules')
-rw-r--r--source3/modules/vfs_gpfs.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
index b304d8bdc29..778f4a00fd7 100644
--- a/source3/modules/vfs_gpfs.c
+++ b/source3/modules/vfs_gpfs.c
@@ -49,6 +49,19 @@ static int vfs_gpfs_kernel_flock(vfs_handle_struct *handle, files_struct *fsp,
return 0;
}
+static int vfs_gpfs_close(vfs_handle_struct *handle, files_struct *fsp)
+{
+ int result;
+
+ if ((fsp->fh != NULL) && (fsp->fh->fd != -1)) {
+ set_gpfs_sharemode(fsp, 0, 0);
+ }
+
+ result = fd_close_posix(fsp);
+
+ return result;
+}
+
static int vfs_gpfs_setlease(vfs_handle_struct *handle, files_struct *fsp,
int leasetype)
{
@@ -923,6 +936,10 @@ static vfs_op_tuple gpfs_op_tuples[] = {
SMB_VFS_OP_FCHMOD,
SMB_VFS_LAYER_TRANSPARENT },
+ { SMB_VFS_OP(vfs_gpfs_close),
+ SMB_VFS_OP_CLOSE,
+ SMB_VFS_LAYER_TRANSPARENT },
+
{ SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP }
};