Exemplo n.º 1
0
static int
smb_fem_oplock_break(femarg_t *arg, caller_context_t *ct)
{
	smb_node_t	*node;
	int		rc;

	node = (smb_node_t *)((arg)->fa_fnode->fn_available);
	SMB_NODE_VALID(node);

	if (ct == NULL) {
		(void) smb_oplock_break(node, NULL, B_FALSE);
		return (0);
	}

	if (ct->cc_caller_id == smb_ct.cc_caller_id)
		return (0);

	if (ct->cc_flags & CC_DONTBLOCK) {
		if (smb_oplock_break(node, NULL, B_TRUE))
			return (0);
		ct->cc_flags |= CC_WOULDBLOCK;
		rc = EAGAIN;
	} else {
		(void) smb_oplock_break(node, NULL, B_FALSE);
		rc = 0;
	}
	return (rc);
}
Exemplo n.º 2
0
static int
smb_fem_oplock_break(femarg_t *arg, caller_context_t *ct, uint32_t flags)
{
	smb_node_t	*node;
	int		rc;

	node = (smb_node_t *)((arg)->fa_fnode->fn_available);
	SMB_NODE_VALID(node);

	ASSERT(ct != &smb_ct);

	if (ct && (ct->cc_flags & CC_DONTBLOCK)) {
		flags |= SMB_OPLOCK_BREAK_NOWAIT;
		rc = smb_oplock_break(NULL, node, flags);
		if (rc == EAGAIN)
			ct->cc_flags |= CC_WOULDBLOCK;
	} else {
		rc = smb_oplock_break(NULL, node, flags);
	}

	return (rc);
}