From: Stefan Metzmacher Date: Fri, 11 Oct 2019 15:42:18 +0000 (+0200) Subject: s3:locking: split out del_share_mode_open_id() X-Git-Tag: talloc-2.4.0~375 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8ccbbbd4ba4de405ce5bbf839e3aa0236aaf274b;p=thirdparty%2Fsamba.git s3:locking: split out del_share_mode_open_id() Signed-off-by: Stefan Metzmacher Reviewed-by: Ralph Boehme Reviewed-by: Jeremy Allison --- diff --git a/source3/locking/share_mode_lock.c b/source3/locking/share_mode_lock.c index a30ab3921ee..909bfdfbcce 100644 --- a/source3/locking/share_mode_lock.c +++ b/source3/locking/share_mode_lock.c @@ -2495,7 +2495,9 @@ static void del_share_mode_fn( state->ok = true; } -bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp) +bool del_share_mode_open_id(struct share_mode_lock *lck, + struct server_id open_pid, + uint64_t open_file_id) { struct del_share_mode_state state = { .ok = false }; struct share_mode_data *d = NULL; @@ -2504,21 +2506,14 @@ bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp) status = share_mode_lock_access_private_data(lck, &d); if (!NT_STATUS_IS_OK(status)) { - struct file_id id = share_mode_lock_file_id(lck); - struct file_id_buf id_buf; /* Any error recovery possible here ? */ - DBG_ERR("share_mode_lock_access_private_data() failed for " - "%s %s - %s\n", - file_id_str_buf(id, &id_buf), - fsp_str_dbg(fsp), - nt_errstr(status)); return false; } ok = share_mode_entry_do( d, - messaging_server_id(fsp->conn->sconn->msg_ctx), - fh_get_gen_id(fsp->fh), + open_pid, + open_file_id, del_share_mode_fn, &state); if (!ok) { @@ -2532,6 +2527,25 @@ bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp) return true; } +bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp) +{ + struct server_id pid = + messaging_server_id(fsp->conn->sconn->msg_ctx); + bool ok; + + ok = del_share_mode_open_id(lck, pid, fh_get_gen_id(fsp->fh)); + if (!ok) { + struct file_id id = share_mode_lock_file_id(lck); + struct file_id_buf id_buf; + DBG_ERR("share_mode_lock_access_private_data() failed for " + "%s %s\n", + file_id_str_buf(id, &id_buf), + fsp_str_dbg(fsp)); + return false; + } + return true; +} + struct remove_share_oplock_state { bool ok; }; diff --git a/source3/locking/share_mode_lock.h b/source3/locking/share_mode_lock.h index 0ce539229b5..eb74144a77d 100644 --- a/source3/locking/share_mode_lock.h +++ b/source3/locking/share_mode_lock.h @@ -37,6 +37,9 @@ struct file_id share_mode_lock_file_id(const struct share_mode_lock *lck); struct share_mode_lock *get_existing_share_mode_lock(TALLOC_CTX *mem_ctx, struct file_id id); +bool del_share_mode_open_id(struct share_mode_lock *lck, + struct server_id open_pid, + uint64_t open_file_id); bool del_share_mode(struct share_mode_lock *lck, struct files_struct *fsp); bool downgrade_share_oplock(struct share_mode_lock *lck,