int smb_t2_request(struct smb_t2rq *t2p) { int error = EINVAL, i; for (i = 0; ; ) { /* * Don't send any new requests if force unmount is underway. * This check was moved into smb_rq_enqueue, called by * smb_t2_request_int() */ t2p->t2_flags &= ~SMBT2_RESTART; error = smb_t2_request_int(t2p); if (!error) break; if ((t2p->t2_flags & (SMBT2_RESTART | SMBT2_NORESTART)) != SMBT2_RESTART) break; if (++i > SMBMAXRESTARTS) break; mutex_enter(&(t2p)->t2_lock); if (t2p->t2_share) { cv_reltimedwait(&t2p->t2_cond, &(t2p)->t2_lock, (hz * SMB_RCNDELAY), TR_CLOCK_TICK); } else { delay(ddi_get_lbolt() + (hz * SMB_RCNDELAY)); } mutex_exit(&(t2p)->t2_lock); } return (error); }
int smb_t2_request(struct smb_t2rq *t2p) { int error = EINVAL, i; for (i = 0; i < SMB_MAXRCN; i++) { t2p->t2_flags &= ~SMBR_RESTART; error = smb_t2_request_int(t2p); if (error == 0) break; if ((t2p->t2_flags & (SMBT2_RESTART | SMBT2_NORESTART)) != SMBT2_RESTART) break; } return error; }