From 3627ceb5e25cdecd1a8113a5028cc898a1424349 Mon Sep 17 00:00:00 2001 From: Zack Kirsch Date: Mon, 11 May 2009 17:10:43 +0000 Subject: [PATCH] s3 onefs: Self-contend level2 oplocks on BRL --- source3/modules/onefs_cbrl.c | 15 ++++++++++++++- 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 a196511427c5..f7cb26ccd0e0 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 b69d93791501..d359f9c6f201 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)); -- 2.34.1