diff options
author | Volker Lendecke <vl@samba.org> | 2009-05-18 06:02:07 +0200 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2009-05-26 09:39:45 +0200 |
commit | 8fdb9573cd1b8e5f2b4ed6fb76a8ab946266edf3 (patch) | |
tree | 01af8ae1cd54145123e6d7b1f69d12ab54781f1a /source3/modules | |
parent | 343253d04bd04ff972a5c9b03199bcc8fa820748 (diff) | |
download | samba-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.c | 17 |
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 } }; |