Fix bug disclosed by lock8 torture test
authorVolker Lendecke <vl@samba.org>
Mon, 18 May 2009 04:02:07 +0000 (06:02 +0200)
committerVolker Lendecke <vl@samba.org>
Wed, 20 May 2009 13:15:57 +0000 (15:15 +0200)
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

index b304d8bdc29329ea01e266e0d48941fc7bdd86c5..778f4a00fd7cabf5ee69bd66af269869dcb4e821 100644 (file)
@@ -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 }
 
 };