Lines Matching refs:dp

50 	mhd_drive_t		*dp  in mhd_add_drive()  argument
59 dlp->dl_drives[dlp->dl_ndrive++] = dp; in mhd_add_drive()
68 mhd_drive_t *dp in mhd_del_drive() argument
75 if (dlp->dl_drives[i] == dp) in mhd_del_drive()
78 assert(dlp->dl_drives[i] == dp); in mhd_del_drive()
102 mhd_drive_t *dp, in mhd_state() argument
107 mhd_drive_set_t *sp = dp->dr_sp; in mhd_state()
108 mhd_state_t old_state = dp->dr_state; in mhd_state()
115 dp->dr_rname, dp->dr_state, new_state)); in mhd_state()
116 dp->dr_state = new_state; in mhd_state()
117 mhd_cv_broadcast(&dp->dr_cv); in mhd_state()
135 mhde_perror(mhep, dp->dr_rname); in mhd_state()
149 mhd_drive_t *dp, in mhd_state_set() argument
154 return (mhd_state(dp, (dp->dr_state | new_state), mhep)); in mhd_state_set()
159 mhd_drive_t *dp, in mhd_state_clr() argument
164 return (mhd_state(dp, (dp->dr_state & ~new_state), mhep)); in mhd_state_clr()
172 mhd_drive_t *dp, in mhd_idle() argument
176 mhd_drive_set_t *sp = dp->dr_sp; in mhd_idle()
183 if (DRIVE_IS_IDLE(dp)) in mhd_idle()
185 if (mhd_state(dp, DRIVE_IDLING, mhep) != 0) in mhd_idle()
196 mhd_drive_t *dp in mhd_reserve() argument
199 mhd_drive_set_t *sp = dp->dr_sp; in mhd_reserve()
207 assert(dp->dr_fd >= 0); in mhd_reserve()
208 assert(dp->dr_state == DRIVE_RESERVING); in mhd_reserve()
219 err = ioctl(dp->dr_fd, MHIOCTKOWN, &tkown); in mhd_reserve()
223 mhd_perror("%s: MHIOCTKOWN", dp->dr_rname); in mhd_reserve()
224 (void) mhd_state(dp, DRIVE_ERRORED, NULL); in mhd_reserve()
225 dp->dr_errnum = errno; in mhd_reserve()
230 MHDPRINTF(("%s: MHIOCTKOWN: succeeded\n", dp->dr_rname)); in mhd_reserve()
231 (void) mhd_state(dp, DRIVE_IDLE, NULL); in mhd_reserve()
240 mhd_drive_t *dp in mhd_failfast() argument
243 mhd_drive_set_t *sp = dp->dr_sp; in mhd_failfast()
251 assert(dp->dr_fd >= 0); in mhd_failfast()
252 assert(dp->dr_state == DRIVE_FAILFASTING); in mhd_failfast()
257 err = ioctl(dp->dr_fd, MHIOCENFAILFAST, &ff); in mhd_failfast()
261 mhd_perror("%s: MHIOCENFAILFAST%s", dp->dr_rname, release); in mhd_failfast()
262 (void) mhd_state(dp, DRIVE_ERRORED, NULL); in mhd_failfast()
263 dp->dr_errnum = errno; in mhd_failfast()
269 dp->dr_rname, release)); in mhd_failfast()
270 (void) mhd_state(dp, DRIVE_IDLE, NULL); in mhd_failfast()
279 mhd_drive_t *dp in mhd_release() argument
282 mhd_drive_set_t *sp = dp->dr_sp; in mhd_release()
289 assert(dp->dr_fd >= 0); in mhd_release()
290 assert(dp->dr_state == DRIVE_RELEASING); in mhd_release()
295 err = ioctl(dp->dr_fd, MHIOCENFAILFAST, &ff); in mhd_release()
299 mhd_perror("%s: MHIOCENFAILFAST (release)", dp->dr_rname); in mhd_release()
300 (void) mhd_state(dp, DRIVE_ERRORED, NULL); in mhd_release()
301 dp->dr_errnum = errno; in mhd_release()
305 dp->dr_rname)); in mhd_release()
310 err = ioctl(dp->dr_fd, MHIOCRELEASE, NULL); in mhd_release()
314 mhd_perror("%s: MHIOCRELEASE", dp->dr_rname); in mhd_release()
315 (void) mhd_state(dp, DRIVE_ERRORED, NULL); in mhd_release()
316 dp->dr_errnum = errno; in mhd_release()
321 MHDPRINTF(("%s: MHIOCRELEASE: succeeded\n", dp->dr_rname)); in mhd_release()
322 (void) mhd_state(dp, DRIVE_IDLE, NULL); in mhd_release()
331 mhd_drive_t *dp in mhd_probe() argument
334 mhd_drive_set_t *sp = dp->dr_sp; in mhd_probe()
341 assert(dp->dr_fd >= 0); in mhd_probe()
342 assert(dp->dr_state & (DRIVE_PROBING | DRIVE_STATUSING)); in mhd_probe()
347 err = ioctl(dp->dr_fd, MHIOCSTATUS, NULL); in mhd_probe()
351 if (! (dp->dr_state & (DRIVE_PROBING | DRIVE_STATUSING))) in mhd_probe()
355 if (dp->dr_state & DRIVE_STATUSING) { in mhd_probe()
358 dp->dr_rname)); in mhd_probe()
359 dp->dr_errnum = MHD_E_RESERVED; in mhd_probe()
361 mhd_perror("%s: MHIOCSTATUS", dp->dr_rname); in mhd_probe()
362 dp->dr_errnum = errno; in mhd_probe()
365 dp->dr_rname)); in mhd_probe()
366 dp->dr_errnum = 0; in mhd_probe()
368 (void) mhd_state_clr(dp, DRIVE_STATUSING, NULL); in mhd_probe()
372 if (dp->dr_state & DRIVE_PROBING) { in mhd_probe()
375 dp->dr_time = now; in mhd_probe()
378 sp->sr_name, dp->dr_rname); in mhd_probe()
635 mhd_drive_t *dp, in match_SSA200() argument
639 mhd_cinfo_t *cinfop = &dp->dr_drive_id.did_cinfo; in match_SSA200()
719 mhd_drive_t *dp, in match_SSA100() argument
723 mhd_cinfo_t *cinfop = &dp->dr_drive_id.did_cinfo; in match_SSA100()
747 match_SSA200(dp, path); in match_SSA100()
761 mhd_drive_t *dp in mhd_ident() argument
764 mhd_drive_set_t *sp = dp->dr_sp; in mhd_ident()
776 assert(dp->dr_fd >= 0); in mhd_ident()
777 assert(dp->dr_state & DRIVE_IDENTING); in mhd_ident()
780 (void) memset(&dp->dr_drive_id, 0, sizeof (dp->dr_drive_id)); in mhd_ident()
783 if (dp->dr_state & DRIVE_SERIALING) { in mhd_ident()
797 err = ioctl(dp->dr_fd, USCSICMD, &ucmd); in mhd_ident()
803 dp->dr_rname, errno)); in mhd_ident()
804 dp->dr_drive_id.did_flags &= ~MHD_DID_SERIAL; in mhd_ident()
810 dp->dr_rname)); in mhd_ident()
811 dp->dr_drive_id.did_flags |= MHD_DID_SERIAL; in mhd_ident()
812 p = dp->dr_drive_id.did_serial; in mhd_ident()
813 e = p + sizeof (dp->dr_drive_id.did_serial); in mhd_ident()
827 for (p = dp->dr_drive_id.did_serial; (p < e); ++p) { in mhd_ident()
833 dp->dr_drive_id.did_flags &= ~MHD_DID_SERIAL; in mhd_ident()
837 if (dp->dr_state & DRIVE_VTOCING) { in mhd_ident()
841 err = read_extvtoc(dp->dr_fd, &vtoc_buf); in mhd_ident()
846 dp->dr_rname, errno)); in mhd_ident()
847 dp->dr_drive_id.did_flags &= ~MHD_DID_TIME; in mhd_ident()
850 dp->dr_rname)); in mhd_ident()
851 dp->dr_drive_id.did_flags |= MHD_DID_TIME; in mhd_ident()
852 dp->dr_drive_id.did_time = vtoc_buf.timestamp[0]; in mhd_ident()
855 dp->dr_drive_id.did_flags &= ~MHD_DID_TIME; in mhd_ident()
859 if (dp->dr_state & DRIVE_CINFOING) { in mhd_ident()
862 len = readlink(dp->dr_rname0, path, (sizeof (path) - 1)); in mhd_ident()
871 dp->dr_rname0, errno)); in mhd_ident()
872 dp->dr_drive_id.did_flags &= ~MHD_DID_CINFO; in mhd_ident()
875 dp->dr_rname0)); in mhd_ident()
876 dp->dr_drive_id.did_flags |= MHD_DID_CINFO; in mhd_ident()
877 (void) memset(&dp->dr_drive_id.did_cinfo, 0, in mhd_ident()
878 sizeof (dp->dr_drive_id.did_cinfo)); in mhd_ident()
879 match_SSA100(dp, path); in mhd_ident()
882 dp->dr_drive_id.did_flags &= ~MHD_DID_CINFO; in mhd_ident()
886 (void) mhd_state_clr(dp, DRIVE_IDENTING, NULL); in mhd_ident()
895 mhd_drive_t *dp in mhd_drive_thread() argument
898 mhd_drive_set_t *sp = dp->dr_sp; in mhd_drive_thread()
908 assert(dp->dr_thread == thr_self()); in mhd_drive_thread()
911 if (sp != dp->dr_sp) { in mhd_drive_thread()
913 dp->dr_rname, sp->sr_name, dp->dr_sp->sr_name)); in mhd_drive_thread()
916 sp = dp->dr_sp; in mhd_drive_thread()
921 if ((dp->dr_fd < 0) && (! (DRIVE_IS_IDLE(dp) || in mhd_drive_thread()
922 (dp->dr_state == DRIVE_IDLING)))) { in mhd_drive_thread()
927 dp->dr_fd = open(dp->dr_rname0, (O_RDWR|O_NDELAY), 0); in mhd_drive_thread()
930 if (dp->dr_fd < 0) { in mhd_drive_thread()
931 mhd_perror("%s: open", dp->dr_rname); in mhd_drive_thread()
932 (void) mhd_state(dp, DRIVE_ERRORED, NULL); in mhd_drive_thread()
933 dp->dr_errnum = errno; in mhd_drive_thread()
939 switch (dp->dr_state) { in mhd_drive_thread()
941 MHDPRINTF1(("%s: IDLE\n", dp->dr_rname)); in mhd_drive_thread()
946 dp->dr_rname, dp->dr_errnum)); in mhd_drive_thread()
950 (void) mhd_state(dp, DRIVE_IDLE, NULL); in mhd_drive_thread()
954 MHDPRINTF1(("%s: RESERVING\n", dp->dr_rname)); in mhd_drive_thread()
955 (void) mhd_reserve(dp); in mhd_drive_thread()
956 assert(DRIVE_IS_IDLE(dp)); in mhd_drive_thread()
960 MHDPRINTF1(("%s: FAILFASTING\n", dp->dr_rname)); in mhd_drive_thread()
961 (void) mhd_failfast(dp); in mhd_drive_thread()
962 assert(DRIVE_IS_IDLE(dp)); in mhd_drive_thread()
966 MHDPRINTF1(("%s: RELEASING\n", dp->dr_rname)); in mhd_drive_thread()
967 (void) mhd_release(dp); in mhd_drive_thread()
968 assert(DRIVE_IS_IDLE(dp)); in mhd_drive_thread()
973 assert(! (dp->dr_state & in mhd_drive_thread()
975 if (dp->dr_state & (DRIVE_PROBING | DRIVE_STATUSING)) { in mhd_drive_thread()
976 MHDPRINTF1(("%s: PROBING\n", dp->dr_rname)); in mhd_drive_thread()
977 (void) mhd_probe(dp); in mhd_drive_thread()
978 assert(! (dp->dr_state & DRIVE_STATUSING)); in mhd_drive_thread()
980 if (dp->dr_state & DRIVE_IDENTING) { in mhd_drive_thread()
981 MHDPRINTF1(("%s: IDENTING\n", dp->dr_rname)); in mhd_drive_thread()
982 (void) mhd_ident(dp); in mhd_drive_thread()
983 assert(! (dp->dr_state & DRIVE_IDENTING)); in mhd_drive_thread()
990 if ((dp->dr_fd >= 0) && (DRIVE_IS_IDLE(dp))) { in mhd_drive_thread()
995 (void) close(dp->dr_fd); /* sd/ssd bug */ in mhd_drive_thread()
998 dp->dr_fd = -1; in mhd_drive_thread()
1005 if (! DRIVE_IS_IDLE(dp)) in mhd_drive_thread()
1009 if (! (dp->dr_state & DRIVE_PROBING)) { in mhd_drive_thread()
1010 mhd_cv_wait(&dp->dr_cv, &sp->sr_mx); in mhd_drive_thread()
1012 mhd_cv_timedwait(&dp->dr_cv, &sp->sr_mx, in mhd_drive_thread()
1023 mhd_drive_t *dp, in mhd_thread_create() argument
1027 mhd_drive_set_t *sp = dp->dr_sp; in mhd_thread_create()
1033 assert(dp->dr_thread == NULL); in mhd_thread_create()
1037 (void *)dp, (THR_DETACHED | THR_BOUND), &thread) != 0) { in mhd_thread_create()
1041 dp->dr_thread = thread; in mhd_thread_create()
1096 mhd_drive_t *dp = NULL; in mhd_create_drive() local
1103 if ((dp = mhd_find_drive(rname)) != NULL) { in mhd_create_drive()
1104 mhd_drive_set_t *oldsp = dp->dr_sp; in mhd_create_drive()
1110 if (mhd_idle(dp, mhep) != 0) { in mhd_create_drive()
1115 mhd_del_drive_from_set(dp); in mhd_create_drive()
1118 mhd_add_drive_to_set(sp, dp); in mhd_create_drive()
1122 return (dp); in mhd_create_drive()
1131 dp = Zalloc(sizeof (*dp)); in mhd_create_drive()
1132 dp->dr_sp = sp; in mhd_create_drive()
1133 dp->dr_rname = Strdup(rname); in mhd_create_drive()
1134 dp->dr_rname0 = rname0; in mhd_create_drive()
1135 mhd_cv_init(&dp->dr_cv); in mhd_create_drive()
1136 dp->dr_thread = NULL; in mhd_create_drive()
1137 dp->dr_fd = -1; in mhd_create_drive()
1138 dp->dr_state = DRIVE_IDLE; in mhd_create_drive()
1142 dp->dr_fd = *fdp; in mhd_create_drive()
1147 mhd_add_drive_to_set(sp, dp); in mhd_create_drive()
1150 if (mhd_thread_create(dp, mhep) != 0) { in mhd_create_drive()
1151 Free(dp->dr_rname0); in mhd_create_drive()
1152 Free(dp->dr_rname); in mhd_create_drive()
1153 Free(dp); in mhd_create_drive()
1158 return (dp); in mhd_create_drive()
1172 mhd_drive_t *dp; in mhd_create_drive_anyset() local
1178 if ((dp = mhd_find_drive(rname)) != NULL) in mhd_create_drive_anyset()
1179 return (dp); in mhd_create_drive_anyset()
1183 dp = mhd_create_drive(null_sp, rname, fdp, mhep); in mhd_create_drive_anyset()
1187 return (dp); in mhd_create_drive_anyset()