files_struct *fsp, int oplock_type);
void (*release_oplock)(struct kernel_oplocks *ctx,
files_struct *fsp, int oplock_type);
- void (*contend_level2_oplocks_begin)(files_struct *fsp,
- enum level2_contention_type type);
- void (*contend_level2_oplocks_end)(files_struct *fsp,
- enum level2_contention_type type);
};
#include "smb_macros.h"
void smbd_contend_level2_oplocks_begin(files_struct *fsp,
enum level2_contention_type type)
{
- struct smbd_server_connection *sconn = fsp->conn->sconn;
- struct kernel_oplocks *koplocks = sconn->oplocks.kernel_ops;
- bool use_kernel = lp_kernel_oplocks(SNUM(fsp->conn)) &&
- (koplocks != NULL);
-
- if (use_kernel && koplocks->ops->contend_level2_oplocks_begin) {
- koplocks->ops->contend_level2_oplocks_begin(fsp, type);
- return;
- }
-
contend_level2_oplocks_begin_default(fsp, type);
}
void smbd_contend_level2_oplocks_end(files_struct *fsp,
enum level2_contention_type type)
{
- struct smbd_server_connection *sconn = fsp->conn->sconn;
- struct kernel_oplocks *koplocks = sconn->oplocks.kernel_ops;
- bool use_kernel = lp_kernel_oplocks(SNUM(fsp->conn)) &&
- (koplocks != NULL);
-
- /* Only kernel oplocks implement this so far */
- if (use_kernel && koplocks->ops->contend_level2_oplocks_end) {
- koplocks->ops->contend_level2_oplocks_end(fsp, type);
- }
+ return;
}
/****************************************************************************
static const struct kernel_oplocks_ops linux_koplocks = {
.set_oplock = linux_set_kernel_oplock,
.release_oplock = linux_release_kernel_oplock,
- .contend_level2_oplocks_begin = NULL,
- .contend_level2_oplocks_end = NULL,
};
struct kernel_oplocks *linux_init_kernel_oplocks(struct smbd_server_connection *sconn)