mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
fixed the handling of level II oplocks in samba4, especially when
acting as a cifs redirectory (using the cifs backend)
This commit is contained in:
parent
82e50a1ce8
commit
06a8100e6a
@ -33,7 +33,8 @@ BOOL cli_oplock_ack(struct cli_tree *tree, uint16 fnum, uint16 ack_level)
|
|||||||
SSVAL(req->out.vwv,VWV(0),0xFF);
|
SSVAL(req->out.vwv,VWV(0),0xFF);
|
||||||
SSVAL(req->out.vwv,VWV(1),0);
|
SSVAL(req->out.vwv,VWV(1),0);
|
||||||
SSVAL(req->out.vwv,VWV(2),fnum);
|
SSVAL(req->out.vwv,VWV(2),fnum);
|
||||||
SSVAL(req->out.vwv,VWV(3),ack_level);
|
SCVAL(req->out.vwv,VWV(3),LOCKING_ANDX_OPLOCK_RELEASE);
|
||||||
|
SCVAL(req->out.vwv,VWV(3)+1,ack_level);
|
||||||
SIVAL(req->out.vwv,VWV(4),0);
|
SIVAL(req->out.vwv,VWV(4),0);
|
||||||
SSVAL(req->out.vwv,VWV(6),0);
|
SSVAL(req->out.vwv,VWV(6),0);
|
||||||
SSVAL(req->out.vwv,VWV(7),0);
|
SSVAL(req->out.vwv,VWV(7),0);
|
||||||
|
@ -340,7 +340,7 @@ static BOOL handle_oplock_break(struct cli_transport *transport, uint_t len, con
|
|||||||
if (transport->oplock.handler) {
|
if (transport->oplock.handler) {
|
||||||
uint16 tid = SVAL(hdr, HDR_TID);
|
uint16 tid = SVAL(hdr, HDR_TID);
|
||||||
uint16 fnum = SVAL(vwv,VWV(2));
|
uint16 fnum = SVAL(vwv,VWV(2));
|
||||||
uint8 level = CVAL(vwv,VWV(3));
|
uint8 level = CVAL(vwv,VWV(3)+1);
|
||||||
transport->oplock.handler(transport, tid, fnum, level, transport->oplock.private);
|
transport->oplock.handler(transport, tid, fnum, level, transport->oplock.private);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,8 @@ BOOL req_send_oplock_break(struct tcon_context *conn, uint16 fnum, uint8 level)
|
|||||||
SSVAL(req->out.vwv, VWV(0), SMB_CHAIN_NONE);
|
SSVAL(req->out.vwv, VWV(0), SMB_CHAIN_NONE);
|
||||||
SSVAL(req->out.vwv, VWV(1), 0);
|
SSVAL(req->out.vwv, VWV(1), 0);
|
||||||
SSVAL(req->out.vwv, VWV(2), fnum);
|
SSVAL(req->out.vwv, VWV(2), fnum);
|
||||||
SSVAL(req->out.vwv, VWV(3), level);
|
SCVAL(req->out.vwv, VWV(3), LOCKING_ANDX_OPLOCK_RELEASE);
|
||||||
|
SCVAL(req->out.vwv, VWV(3)+1, level);
|
||||||
SIVAL(req->out.vwv, VWV(4), 0);
|
SIVAL(req->out.vwv, VWV(4), 0);
|
||||||
SSVAL(req->out.vwv, VWV(6), 0);
|
SSVAL(req->out.vwv, VWV(6), 0);
|
||||||
SSVAL(req->out.vwv, VWV(7), 0);
|
SSVAL(req->out.vwv, VWV(7), 0);
|
||||||
|
@ -736,7 +736,7 @@ static BOOL oplock_handler(struct cli_transport *transport, uint16 tid, uint16 f
|
|||||||
|
|
||||||
if (!do_close) {
|
if (!do_close) {
|
||||||
printf("oplock ack fnum=%d\n", fnum);
|
printf("oplock ack fnum=%d\n", fnum);
|
||||||
return cli_oplock_ack(tree, fnum, level == 1? 0x102 : 2);
|
return cli_oplock_ack(tree, fnum, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("oplock close fnum=%d\n", fnum);
|
printf("oplock close fnum=%d\n", fnum);
|
||||||
|
@ -54,7 +54,7 @@ static BOOL oplock_handler_ack(struct cli_transport *transport, uint16 tid, uint
|
|||||||
|
|
||||||
printf("Acking in oplock handler\n");
|
printf("Acking in oplock handler\n");
|
||||||
|
|
||||||
return cli_oplock_ack(tree, fnum, level == 1? 0x102 : 2);
|
return cli_oplock_ack(tree, fnum, level);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user