mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
s3:smbd: move global oplocks vars to smbd_server_connection
metze
This commit is contained in:
parent
2f435bb61a
commit
469a2c8e7c
@ -93,9 +93,6 @@ struct vfs_init_function_entry *backends = NULL;
|
||||
char *sparse_buf = NULL;
|
||||
char *LastDir = NULL;
|
||||
|
||||
/* Current number of oplocks we have outstanding. */
|
||||
int32_t exclusive_oplocks_open = 0;
|
||||
int32_t level_II_oplocks_open = 0;
|
||||
struct kernel_oplocks *koplocks = NULL;
|
||||
|
||||
struct smbd_parent_context *am_parent = NULL;
|
||||
|
@ -108,9 +108,6 @@ extern struct vfs_init_function_entry *backends;
|
||||
extern char *sparse_buf;
|
||||
extern char *LastDir;
|
||||
|
||||
/* Current number of oplocks we have outstanding. */
|
||||
extern int32_t exclusive_oplocks_open;
|
||||
extern int32_t level_II_oplocks_open;
|
||||
extern struct kernel_oplocks *koplocks;
|
||||
|
||||
struct smbd_parent_context;
|
||||
@ -519,6 +516,12 @@ struct smbd_server_connection {
|
||||
|
||||
uint64_t num_requests;
|
||||
|
||||
/* Current number of oplocks we have outstanding. */
|
||||
struct {
|
||||
int32_t exclusive_open;
|
||||
int32_t level_II_open;
|
||||
} oplocks;
|
||||
|
||||
struct {
|
||||
struct fd_event *fde;
|
||||
|
||||
|
@ -53,7 +53,7 @@ void break_kernel_oplock(struct messaging_context *msg_ctx, files_struct *fsp)
|
||||
|
||||
bool set_file_oplock(files_struct *fsp, int oplock_type)
|
||||
{
|
||||
|
||||
struct smbd_server_connection *sconn = fsp->conn->sconn;
|
||||
bool use_kernel = lp_kernel_oplocks(SNUM(fsp->conn)) && koplocks;
|
||||
|
||||
if (fsp->oplock_type == LEVEL_II_OPLOCK) {
|
||||
@ -75,9 +75,9 @@ bool set_file_oplock(files_struct *fsp, int oplock_type)
|
||||
fsp->oplock_type = oplock_type;
|
||||
fsp->sent_oplock_break = NO_BREAK_SENT;
|
||||
if (oplock_type == LEVEL_II_OPLOCK) {
|
||||
level_II_oplocks_open++;
|
||||
sconn->oplocks.level_II_open++;
|
||||
} else if (EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
|
||||
exclusive_oplocks_open++;
|
||||
sconn->oplocks.exclusive_open++;
|
||||
}
|
||||
|
||||
DEBUG(5,("set_file_oplock: granted oplock on file %s, %s/%lu, "
|
||||
@ -95,6 +95,8 @@ bool set_file_oplock(files_struct *fsp, int oplock_type)
|
||||
|
||||
void release_file_oplock(files_struct *fsp)
|
||||
{
|
||||
struct smbd_server_connection *sconn = fsp->conn->sconn;
|
||||
|
||||
if ((fsp->oplock_type != NO_OPLOCK) &&
|
||||
(fsp->oplock_type != FAKE_LEVEL_II_OPLOCK) &&
|
||||
koplocks) {
|
||||
@ -102,13 +104,13 @@ void release_file_oplock(files_struct *fsp)
|
||||
}
|
||||
|
||||
if (fsp->oplock_type == LEVEL_II_OPLOCK) {
|
||||
level_II_oplocks_open--;
|
||||
sconn->oplocks.level_II_open--;
|
||||
} else if (EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
|
||||
exclusive_oplocks_open--;
|
||||
sconn->oplocks.exclusive_open--;
|
||||
}
|
||||
|
||||
SMB_ASSERT(exclusive_oplocks_open>=0);
|
||||
SMB_ASSERT(level_II_oplocks_open>=0);
|
||||
SMB_ASSERT(sconn->oplocks.exclusive_open>=0);
|
||||
SMB_ASSERT(sconn->oplocks.level_II_open>=0);
|
||||
|
||||
if (EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
|
||||
/* This doesn't matter for close. */
|
||||
@ -130,6 +132,8 @@ void release_file_oplock(files_struct *fsp)
|
||||
|
||||
static void downgrade_file_oplock(files_struct *fsp)
|
||||
{
|
||||
struct smbd_server_connection *sconn = fsp->conn->sconn;
|
||||
|
||||
if (!EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
|
||||
DEBUG(0, ("trying to downgrade an already-downgraded oplock!\n"));
|
||||
return;
|
||||
@ -139,8 +143,8 @@ static void downgrade_file_oplock(files_struct *fsp)
|
||||
koplocks->ops->release_oplock(koplocks, fsp, LEVEL_II_OPLOCK);
|
||||
}
|
||||
fsp->oplock_type = LEVEL_II_OPLOCK;
|
||||
exclusive_oplocks_open--;
|
||||
level_II_oplocks_open++;
|
||||
sconn->oplocks.exclusive_open--;
|
||||
sconn->oplocks.level_II_open++;
|
||||
fsp->sent_oplock_break = NO_BREAK_SENT;
|
||||
}
|
||||
|
||||
@ -265,7 +269,8 @@ static files_struct *initial_break_processing(
|
||||
dbgtext( "initial_break_processing: called for %s/%u\n",
|
||||
file_id_string_tos(&id), (int)file_id);
|
||||
dbgtext( "Current oplocks_open (exclusive = %d, levelII = %d)\n",
|
||||
exclusive_oplocks_open, level_II_oplocks_open );
|
||||
sconn->oplocks.exclusive_open,
|
||||
sconn->oplocks.level_II_open);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user