From 54973d04221c4f45db1e33e49cfd445c81518f86 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 18 May 2009 06:02:07 +0200 Subject: [PATCH] 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. --- source3/modules/vfs_gpfs.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 } }; -- 2.11.4.GIT