The Samba-Bugzilla – Attachment 9305 Details for
Bug 10216
PANIC validate_oplock_types failed
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
look (text/plain), 2.37 KB, created by
Volker Lendecke
on 2013-10-18 15:10:28 UTC
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Volker Lendecke
Created:
2013-10-18 15:10:28 UTC
Size:
2.37 KB
patch
obsolete
>From 039f6a92eca67034fb5d098d5af092ecbaea0102 Mon Sep 17 00:00:00 2001 >From: Volker Lendecke <vl@samba.org> >Date: Fri, 18 Oct 2013 15:12:35 +0000 >Subject: [PATCH] smbd: Fix bug 10216 > >--- > source3/smbd/open.c | 32 ++++++++++++++++++++++++++++---- > 1 file changed, 28 insertions(+), 4 deletions(-) > >diff --git a/source3/smbd/open.c b/source3/smbd/open.c >index fa52fcc..c3e1a76 100644 >--- a/source3/smbd/open.c >+++ b/source3/smbd/open.c >@@ -1211,6 +1211,7 @@ static bool validate_oplock_types(files_struct *fsp, > bool ex_or_batch = false; > bool level2 = false; > bool no_oplock = false; >+ uint32_t num_non_stat_opens = 0; > uint32_t i; > > /* Ignore stat or internal opens, as is done in >@@ -1235,6 +1236,8 @@ static bool validate_oplock_types(files_struct *fsp, > continue; > } > >+ num_non_stat_opens += 1; >+ > if (BATCH_OPLOCK_TYPE(e->op_type)) { > /* batch - can only be one. */ > if (share_mode_stale_pid(d, i)) { >@@ -1294,7 +1297,7 @@ static bool validate_oplock_types(files_struct *fsp, > > remove_stale_share_mode_entries(d); > >- if ((batch || ex_or_batch) && (d->num_share_modes != 1)) { >+ if ((batch || ex_or_batch) && (num_non_stat_opens != 1)) { > DEBUG(1, ("got batch (%d) or ex (%d) non-exclusively (%d)\n", > (int)batch, (int)ex_or_batch, > (int)d->num_share_modes)); >@@ -1312,17 +1315,38 @@ static bool delay_for_oplock(files_struct *fsp, > { > struct share_mode_data *d = lck->data; > struct share_mode_entry *entry; >+ uint32_t num_non_stat_opens = 0; >+ uint32_t i; > > if ((oplock_request & INTERNAL_OPEN_ONLY) || is_stat_open(fsp->access_mask)) { > return false; > } >- if (lck->data->num_share_modes != 1) { >+ for (i=0; i<d->num_share_modes; i++) { >+ struct share_mode_entry *e = &d->share_modes[i]; >+ if (e->op_type == NO_OPLOCK && is_stat_open(e->access_mask)) { >+ continue; >+ } >+ num_non_stat_opens += 1; >+ >+ /* >+ * We found the a non-stat open, which in the exclusive/batch >+ * case will be inspected further down. >+ */ >+ entry = e; >+ } >+ if (num_non_stat_opens == 0) { >+ /* >+ * Nothing to wait for around >+ */ >+ return false; >+ } >+ if (num_non_stat_opens != 1) { > /* >- * More than one. There can't be any exclusive or batch left. >+ * More than one open around. There can't be any exclusive or >+ * batch left, this is all level2. > */ > return false; > } >- entry = &d->share_modes[0]; > > if (server_id_is_disconnected(&entry->pid)) { > /* >-- >1.8.1.2 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 10216
:
9301
| 9305