diff options
-rw-r--r-- | source3/modules/onefs_cbrl.c | 15 | ||||
-rw-r--r-- | source3/smbd/oplock_onefs.c | 1 |
2 files changed, 14 insertions, 2 deletions
diff --git a/source3/modules/onefs_cbrl.c b/source3/modules/onefs_cbrl.c index a196511427..f7cb26ccd0 100644 --- a/source3/modules/onefs_cbrl.c +++ b/source3/modules/onefs_cbrl.c @@ -150,6 +150,11 @@ static void onefs_cbrl_async_success(uint64_t id) else bs->state = ONEFS_CBRL_NONE; + /* Self contend our own level 2 oplock. The kernel handles + * contention of other opener's level 2 oplocks. */ + contend_level2_oplocks_begin(blr->fsp, + LEVEL2_CONTEND_WINDOWS_BRL); + /* Process the queue, to try the next lock or finish up. */ process_blocking_lock_queue(); } @@ -215,7 +220,7 @@ static void onefs_init_cbrl(void) DEBUG(10, ("cbrl_event_fd = %d\n", cbrl_event_fd)); - /* Register the oplock event_fd with samba's event system */ + /* Register the CBRL event_fd with samba's event system */ cbrl_fde = event_add_fd(smbd_event_context(), NULL, cbrl_event_fd, @@ -366,6 +371,10 @@ failure: return status; success: + /* Self contend our own level 2 oplock. The kernel handles + * contention of other opener's level 2 oplocks. */ + contend_level2_oplocks_begin(br_lck->fsp, + LEVEL2_CONTEND_WINDOWS_BRL); END_PROFILE(syscall_brl_lock); @@ -400,6 +409,10 @@ bool onefs_brl_unlock_windows(vfs_handle_struct *handle, return false; } + /* For symmetry purposes, end our oplock contention even though its + * currently a no-op. */ + contend_level2_oplocks_end(br_lck->fsp, LEVEL2_CONTEND_WINDOWS_BRL); + DEBUG(10, ("returning true.\n")); return true; diff --git a/source3/smbd/oplock_onefs.c b/source3/smbd/oplock_onefs.c index b69d937915..d359f9c6f2 100644 --- a/source3/smbd/oplock_onefs.c +++ b/source3/smbd/oplock_onefs.c @@ -526,7 +526,6 @@ static void onefs_semlock_write(int fd, enum level2_contention_type type, switch (type) { case LEVEL2_CONTEND_ALLOC_GROW: - case LEVEL2_CONTEND_WINDOWS_BRL: case LEVEL2_CONTEND_POSIX_BRL: DEBUG(10, ("Taking %d write semlock for cmd %d on fd: %d\n", semlock_op, type, fd)); |