svn commit: samba r10147 - branches/tmp/vl-cluster/source/smbd
trunk/source/smbd
vlendec at samba.org
vlendec at samba.org
Sat Sep 10 11:01:13 GMT 2005
Author: vlendec
Date: 2005-09-10 11:01:12 +0000 (Sat, 10 Sep 2005)
New Revision: 10147
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10147
Log:
Fix two bugs with kernel oplocks.
We still have a problem that when a kernel oplock exists, a stat open does not
break it and the open call gets a EAGAIN. In that case we need to defer the
open and have the kernel oplock break request handler release the oplock.
This exists in current 3_0 as well.
Volker
Modified:
branches/tmp/vl-cluster/source/smbd/open.c
branches/tmp/vl-cluster/source/smbd/oplock.c
trunk/source/smbd/open.c
trunk/source/smbd/oplock.c
Changeset:
Modified: branches/tmp/vl-cluster/source/smbd/open.c
===================================================================
--- branches/tmp/vl-cluster/source/smbd/open.c 2005-09-10 10:59:49 UTC (rev 10146)
+++ branches/tmp/vl-cluster/source/smbd/open.c 2005-09-10 11:01:12 UTC (rev 10147)
@@ -1660,7 +1660,6 @@
* file structs.
*/
- set_share_mode(lck, fsp, 0, fsp->oplock_type);
if ((fsp->oplock_type != NO_OPLOCK) &&
(fsp->oplock_type != FAKE_LEVEL_II_OPLOCK)) {
if (!set_file_oplock(fsp, fsp->oplock_type)) {
@@ -1668,6 +1667,7 @@
fsp->oplock_type = NO_OPLOCK;
}
}
+ set_share_mode(lck, fsp, 0, fsp->oplock_type);
if (create_options & FILE_DELETE_ON_CLOSE) {
uint32 dosattr= existing_dos_attributes;
Modified: branches/tmp/vl-cluster/source/smbd/oplock.c
===================================================================
--- branches/tmp/vl-cluster/source/smbd/oplock.c 2005-09-10 10:59:49 UTC (rev 10146)
+++ branches/tmp/vl-cluster/source/smbd/oplock.c 2005-09-10 11:01:12 UTC (rev 10147)
@@ -135,8 +135,11 @@
void release_file_oplock(files_struct *fsp)
{
- if ((fsp->oplock_type != NO_OPLOCK) && koplocks)
+ if ((fsp->oplock_type != NO_OPLOCK) &&
+ (fsp->oplock_type != FAKE_LEVEL_II_OPLOCK) &&
+ koplocks) {
koplocks->release_oplock(fsp);
+ }
if (fsp->oplock_type == LEVEL_II_OPLOCK)
level_II_oplocks_open--;
Modified: trunk/source/smbd/open.c
===================================================================
--- trunk/source/smbd/open.c 2005-09-10 10:59:49 UTC (rev 10146)
+++ trunk/source/smbd/open.c 2005-09-10 11:01:12 UTC (rev 10147)
@@ -1650,7 +1650,6 @@
* file structs.
*/
- set_share_mode(lck, fsp, 0, fsp->oplock_type);
if ((fsp->oplock_type != NO_OPLOCK) &&
(fsp->oplock_type != FAKE_LEVEL_II_OPLOCK)) {
if (!set_file_oplock(fsp, fsp->oplock_type)) {
@@ -1658,6 +1657,7 @@
fsp->oplock_type = NO_OPLOCK;
}
}
+ set_share_mode(lck, fsp, 0, fsp->oplock_type);
if (create_options & FILE_DELETE_ON_CLOSE) {
uint32 dosattr= existing_dos_attributes;
Modified: trunk/source/smbd/oplock.c
===================================================================
--- trunk/source/smbd/oplock.c 2005-09-10 10:59:49 UTC (rev 10146)
+++ trunk/source/smbd/oplock.c 2005-09-10 11:01:12 UTC (rev 10147)
@@ -134,8 +134,11 @@
void release_file_oplock(files_struct *fsp)
{
- if ((fsp->oplock_type != NO_OPLOCK) && koplocks)
+ if ((fsp->oplock_type != NO_OPLOCK) &&
+ (fsp->oplock_type != FAKE_LEVEL_II_OPLOCK) &&
+ koplocks) {
koplocks->release_oplock(fsp);
+ }
if (fsp->oplock_type == LEVEL_II_OPLOCK)
level_II_oplocks_open--;
More information about the samba-cvs
mailing list