#if HAVE_ONEFS
#include "oplock_onefs.h"
+#include "smbd/smbd.h"
#include "smbd/globals.h"
#include <ifs/ifs_syscalls.h>
struct onefs_oplocks_context {
struct kernel_oplocks *ctx;
+ struct smbd_server_connection *sconn;
const struct oplocks_event_ops *onefs_ops;
int onefs_event_fd;
struct fd_event *read_fde;
enum onefs_callback_state state;
union {
files_struct *fsp; /* ONEFS_OPEN_FILE */
- uint16_t mid; /* ONEFS_WAITING_FOR_OPLOCK */
+ uint64_t mid; /* ONEFS_WAITING_FOR_OPLOCK */
} data;
};
fsp_str_dbg(r->data.fsp));
case ONEFS_WAITING_FOR_OPLOCK:
result = talloc_asprintf(talloc_tos(), "cb record %llu for "
- "pending mid %d", r->id,
- (int)r->data.mid);
+ "pending mid %llu", r->id,
+ (unsigned long long)r->data.mid);
break;
default:
result = talloc_asprintf(talloc_tos(), "cb record %llu unknown "
* 2. OPEN_FILE: Once ifs_createfile completes, the callback record is
* transitioned to this state via onefs_set_oplock_callback.
*/
-uint64_t onefs_oplock_wait_record(uint16_t mid)
+uint64_t onefs_oplock_wait_record(uint64_t mid)
{
struct onefs_callback_record *result;
static uint64_t id_generator = 0;
*/
if (open_was_deferred(cb->data.mid)) {
if (asprintf(&msg, "Trying to upgrade callback for deferred "
- "open mid=%d\n", cb->data.mid) != -1) {
+ "open mid=%llu\n", (unsigned long long)cb->data.mid) != -1) {
smb_panic(msg);
}
smb_panic("Trying to upgrade callback for deferred open "
DEBUG(0,("Level 1 oplock break failed for file %s. Forcefully "
"revoking oplock\n", fsp_str_dbg(fsp)));
- global_client_failed_oplock_break = True;
remove_oplock(fsp);
/*
return;
}
- DEBUG(10, ("Got semlock available for mid %d\n", cb->data.mid));
+ DEBUG(10, ("Got semlock available for mid %llu\n",
+ (unsigned long long)cb->data.mid));
/* Paranoia check */
if (!(open_was_deferred(cb->data.mid))) {
static void semlock_async_failure_handler(uint64_t id)
{
struct onefs_callback_record *cb;
- struct pending_message_list *pml;
struct deferred_open_record *state;
DEBUG(1, ("semlock_async_failure_handler called: %llu\n", id));
return;
}
- DEBUG(1, ("Got semlock_async_failure message for mid %d\n", cb->data.mid));
+ DEBUG(1, ("Got semlock_async_failure message for mid %llu\n",
+ (unsigned long long)cb->data.mid));
/* Paranoia check */
if (!(open_was_deferred(cb->data.mid))) {
}
/* Find the actual deferred open record. */
- if (!(pml = get_open_deferred_message(cb->data.mid))) {
+ if (!get_open_deferred_message_state(cb->data.mid, NULL, &state)) {
DEBUG(0, ("Could not find deferred request for "
"mid %d\n", cb->data.mid));
destroy_onefs_callback_record(id);
return;
}
- state = (struct deferred_open_record *)pml->private_data.data;
/* Update to failed so the client can be notified on retried open. */
state->failed = true;
.semlock_async_failure = semlock_async_failure_handler,
};
-struct kernel_oplocks *onefs_init_kernel_oplocks(TALLOC_CTX *mem_ctx)
+struct kernel_oplocks *onefs_init_kernel_oplocks(struct smbd_server_connection *sconn)
{
struct kernel_oplocks *_ctx = NULL;
struct onefs_oplocks_context *ctx = NULL;
if (!ctx) {
goto err_out;
}
+ ctx->sconn = sconn;
_ctx->ops = &onefs_koplocks_ops;
_ctx->flags = (KOPLOCKS_LEVEL2_SUPPORTED |
DEBUG(10, ("oplock event_fd = %d\n", ctx->onefs_event_fd));
/* Register the oplock event_fd with samba's event system */
- ctx->read_fde = event_add_fd(smbd_event_context(),
+ ctx->read_fde = event_add_fd(sconn->ev_ctx,
ctx,
ctx->onefs_event_fd,
EVENT_FD_READ,