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); }
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); }