s3 onefs: Quiet a log message about oplocks being requested on streams
authorTim Prouty <tprouty@samba.org>
Thu, 2 Apr 2009 03:01:34 +0000 (03:01 +0000)
committerTim Prouty <tprouty@samba.org>
Thu, 2 Apr 2009 03:06:18 +0000 (20:06 -0700)
source3/modules/onefs_open.c

index d628443ef90e113f50f0db3104a01815c29c5fe5..f315b34c8bc1af42daafc56ce3b740ea7aa3a4f1 100644 (file)
@@ -199,23 +199,6 @@ static NTSTATUS onefs_open_file(files_struct *fsp,
        if ((conn->fs_capabilities & FILE_NAMED_STREAMS) && stream != NULL) {
                SMB_ASSERT(fsp->base_fsp);
 
-               /*
-                * We have never seen an oplock taken on a stream, and our
-                * current implementation doesn't support it.  If a request is
-                * seen, log a loud error message and ignore the requested
-                * oplock.
-                */
-               if ((oplock_request & ~SAMBA_PRIVATE_OPLOCK_MASK) !=
-                    NO_OPLOCK) {
-                       DEBUG(0, ("Oplock(%d) being requested on a stream! "
-                                 "Ignoring oplock request: base=%s, "
-                                 "stream=%s\n",
-                                 oplock_request & ~SAMBA_PRIVATE_OPLOCK_MASK,
-                                 base, stream));
-                       /* Recover by requesting NO_OPLOCK instead. */
-                       oplock_request &= SAMBA_PRIVATE_OPLOCK_MASK;
-               }
-
                DEBUG(10,("Opening a stream: base=%s(%d), stream=%s\n",
                          base, fsp->base_fsp->fh->fd, stream));
 
@@ -522,10 +505,7 @@ NTSTATUS onefs_open_file_ntcreate(connection_struct *conn,
         *
         *   1. Open the base file of a stream: Always done stat-only
         *
-        *   2. Open the stream: Oplocks are disallowed on streams, so an
-        *      oplock will never be contended.
-        *
-        *   3. open_file_fchmod(), which is called from 3 places:
+        *   2. open_file_fchmod(), which is called from 3 places:
         *      A. try_chown: Posix acls only. Never called on onefs.
         *      B. set_ea_dos_attributes: Can't be called from onefs, because
         *         SMB_VFS_SETXATTR return ENOSYS.
@@ -1773,6 +1753,21 @@ static NTSTATUS onefs_create_file_unixpath(connection_struct *conn,
                                  "failed: %s\n", base, nt_errstr(status)));
                        goto fail;
                }
+
+               /*
+                * Testing against windows xp/2003/vista shows that oplocks
+                * can actually be requested and granted on streams (see the
+                * RAW-OPLOCK-STREAM1 smbtorture test).
+                */
+               if ((oplock_request & ~SAMBA_PRIVATE_OPLOCK_MASK) !=
+                    NO_OPLOCK) {
+                       DEBUG(5, ("Oplock(%d) being requested on a stream! "
+                                 "Ignoring oplock request: fname=%s\n",
+                                 oplock_request & ~SAMBA_PRIVATE_OPLOCK_MASK,
+                                 fname));
+                       /* Request NO_OPLOCK instead. */
+                       oplock_request &= SAMBA_PRIVATE_OPLOCK_MASK;
+               }
        }
 
        /* Covert generic bits in the security descriptor. */