Lines Matching defs:wu

643 	struct sr_workunit	wu;
730 bzero(&wu, sizeof(wu));
731 wu.swu_flags |= SR_WUF_FAKE;
732 wu.swu_dis = sd;
733 sd->sd_scsi_sync(&wu);
2033 struct sr_workunit *wu = ccb->ccb_wu;
2034 struct sr_discipline *sd = wu->swu_dis;
2046 panic("%s: invalid target on wu: %p", DEVNAME(sc), wu);
2061 wu->swu_ios_failed++;
2064 wu->swu_ios_succeeded++;
2067 wu->swu_ios_complete++;
2073 struct sr_workunit *wu;
2089 wu = malloc(sd->sd_wu_size, M_DEVBUF, M_WAITOK | M_ZERO);
2090 TAILQ_INSERT_TAIL(&sd->sd_wu, wu, swu_next);
2091 TAILQ_INIT(&wu->swu_ccb);
2092 wu->swu_dis = sd;
2093 task_set(&wu->swu_task, sr_wu_done_callback, wu);
2094 sr_wu_put(sd, wu);
2103 struct sr_workunit *wu;
2107 while ((wu = TAILQ_FIRST(&sd->sd_wu_freeq)) != NULL)
2108 TAILQ_REMOVE(&sd->sd_wu_freeq, wu, swu_link);
2109 while ((wu = TAILQ_FIRST(&sd->sd_wu_pendq)) != NULL)
2110 TAILQ_REMOVE(&sd->sd_wu_pendq, wu, swu_link);
2111 while ((wu = TAILQ_FIRST(&sd->sd_wu_defq)) != NULL)
2112 TAILQ_REMOVE(&sd->sd_wu_defq, wu, swu_link);
2114 while ((wu = TAILQ_FIRST(&sd->sd_wu)) != NULL) {
2115 TAILQ_REMOVE(&sd->sd_wu, wu, swu_next);
2116 free(wu, M_DEVBUF, sd->sd_wu_size);
2124 struct sr_workunit *wu;
2127 wu = TAILQ_FIRST(&sd->sd_wu_freeq);
2128 if (wu) {
2129 TAILQ_REMOVE(&sd->sd_wu_freeq, wu, swu_link);
2134 DNPRINTF(SR_D_WU, "%s: sr_wu_get: %p\n", DEVNAME(sd->sd_sc), wu);
2136 return (wu);
2143 struct sr_workunit *wu = (struct sr_workunit *)xwu;
2145 DNPRINTF(SR_D_WU, "%s: sr_wu_put: %p\n", DEVNAME(sd->sd_sc), wu);
2147 sr_wu_release_ccbs(wu);
2148 sr_wu_init(sd, wu);
2151 TAILQ_INSERT_TAIL(&sd->sd_wu_freeq, wu, swu_link);
2157 sr_wu_init(struct sr_discipline *sd, struct sr_workunit *wu)
2162 if (wu->swu_cb_active == 1)
2163 panic("%s: sr_wu_init got active wu", DEVNAME(sd->sd_sc));
2166 wu->swu_xs = NULL;
2167 wu->swu_state = SR_WU_FREE;
2168 wu->swu_flags = 0;
2169 wu->swu_blk_start = 0;
2170 wu->swu_blk_end = 0;
2171 wu->swu_collider = NULL;
2175 sr_wu_enqueue_ccb(struct sr_workunit *wu, struct sr_ccb *ccb)
2177 struct sr_discipline *sd = wu->swu_dis;
2181 if (wu->swu_cb_active == 1)
2182 panic("%s: sr_wu_enqueue_ccb got active wu",
2184 ccb->ccb_wu = wu;
2185 wu->swu_io_count++;
2186 TAILQ_INSERT_TAIL(&wu->swu_ccb, ccb, ccb_link);
2191 sr_wu_release_ccbs(struct sr_workunit *wu)
2196 while ((ccb = TAILQ_FIRST(&wu->swu_ccb)) != NULL) {
2197 TAILQ_REMOVE(&wu->swu_ccb, ccb, ccb_link);
2201 wu->swu_io_count = 0;
2202 wu->swu_ios_complete = 0;
2203 wu->swu_ios_failed = 0;
2204 wu->swu_ios_succeeded = 0;
2208 sr_wu_done(struct sr_workunit *wu)
2210 struct sr_discipline *sd = wu->swu_dis;
2213 DEVNAME(sd->sd_sc), wu->swu_io_count, wu->swu_ios_complete,
2214 wu->swu_ios_failed);
2216 if (wu->swu_ios_complete < wu->swu_io_count)
2219 task_add(sd->sd_taskq, &wu->swu_task);
2225 struct sr_workunit *wu = xwu;
2226 struct sr_discipline *sd = wu->swu_dis;
2227 struct scsi_xfer *xs = wu->swu_xs;
2236 (wu->swu_flags & (SR_WUF_DISCIPLINE|SR_WUF_REBUILD)));
2241 if (wu->swu_ios_failed)
2248 if (sd->sd_scsi_wu_done(wu) == SR_WU_RESTART)
2254 if (wup == wu)
2257 panic("%s: wu %p not on pending queue",
2258 DEVNAME(sd->sd_sc), wu);
2259 TAILQ_REMOVE(&sd->sd_wu_pendq, wu, swu_link);
2261 if (wu->swu_collider) {
2262 if (wu->swu_ios_failed)
2263 sr_raid_recreate_wu(wu->swu_collider);
2266 sr_raid_startwu(wu->swu_collider);
2273 if (wu->swu_flags & SR_WUF_REBUILD)
2274 wu->swu_flags |= SR_WUF_REBUILDIOCOMP;
2275 if (wu->swu_flags & SR_WUF_WAKEUP)
2276 wakeup(wu);
2278 sd->sd_scsi_done(wu);
2279 else if (wu->swu_flags & SR_WUF_DISCIPLINE)
2280 sr_scsi_wu_put(sd, wu);
2281 else if (!(wu->swu_flags & SR_WUF_REBUILD))
2295 sr_scsi_wu_put(struct sr_discipline *sd, struct sr_workunit *wu)
2297 scsi_io_put(&sd->sd_iopool, wu);
2322 struct sr_workunit *wu = xs->io;
2338 /* scsi layer *can* re-send wu without calling sr_wu_put(). */
2339 sr_wu_release_ccbs(wu);
2340 sr_wu_init(sd, wu);
2341 wu->swu_state = SR_WU_INPROGRESS;
2342 wu->swu_xs = xs;
2353 if (sd->sd_scsi_rw(wu))
2360 if (sd->sd_scsi_sync(wu))
2367 if (sd->sd_scsi_tur(wu))
2374 if (sd->sd_scsi_start_stop(wu))
2381 if (sd->sd_scsi_inquiry(wu))
2389 if (sd->sd_scsi_read_cap(wu))
2396 if (sd->sd_scsi_req_sense(wu))
2984 struct sr_workunit *wu;
3029 TAILQ_FOREACH(wu, &sd->sd_wu_pendq, swu_link) {
3030 TAILQ_FOREACH(ccb, &wu->swu_ccb, ccb_link) {
3035 TAILQ_FOREACH(wu, &sd->sd_wu_defq, swu_link) {
3036 TAILQ_FOREACH(ccb, &wu->swu_ccb, ccb_link) {
4001 sr_raid_inquiry(struct sr_workunit *wu)
4003 struct sr_discipline *sd = wu->swu_dis;
4004 struct scsi_xfer *xs = wu->swu_xs;
4035 sr_raid_read_cap(struct sr_workunit *wu)
4037 struct sr_discipline *sd = wu->swu_dis;
4038 struct scsi_xfer *xs = wu->swu_xs;
4071 sr_raid_tur(struct sr_workunit *wu)
4073 struct sr_discipline *sd = wu->swu_dis;
4097 sr_raid_request_sense(struct sr_workunit *wu)
4099 struct sr_discipline *sd = wu->swu_dis;
4100 struct scsi_xfer *xs = wu->swu_xs;
4115 sr_raid_start_stop(struct sr_workunit *wu)
4117 struct scsi_xfer *xs = wu->swu_xs;
4121 DEVNAME(wu->swu_dis->sd_sc));
4134 sr_raid_sync(struct sr_workunit *wu)
4136 struct sr_discipline *sd = wu->swu_dis;
4141 /* when doing a fake sync don't count the wu */
4142 ios = (wu->swu_flags & SR_WUF_FAKE) ? 0 : 1;
4167 struct sr_workunit *wu = ccb->ccb_wu;
4169 struct sr_discipline *sd = wu->swu_dis;
4170 struct scsi_xfer *xs = wu->swu_xs;
4179 sr_wu_done(wu);
4184 sr_schedule_wu(struct sr_workunit *wu)
4186 struct sr_discipline *sd = wu->swu_dis;
4190 DNPRINTF(SR_D_WU, "sr_schedule_wu: schedule wu %p state %i "
4191 "flags 0x%x\n", wu, wu->swu_state, wu->swu_flags);
4193 KASSERT(wu->swu_io_count > 0);
4198 if (wu->swu_state == SR_WU_CONSTRUCT)
4202 if (wu->swu_state == SR_WU_REQUEUE)
4206 if (wu->swu_state == SR_WU_RESTART)
4209 if (wu->swu_state != SR_WU_INPROGRESS)
4211 wu->swu_state);
4215 if (wu->swu_blk_end < wup->swu_blk_start ||
4216 wup->swu_blk_end < wu->swu_blk_start)
4221 wu);
4222 wu->swu_state = SR_WU_DEFERRED;
4225 wup->swu_collider = wu;
4226 TAILQ_INSERT_TAIL(&sd->sd_wu_defq, wu, swu_link);
4232 sr_raid_startwu(wu);
4239 sr_raid_startwu(struct sr_workunit *wu)
4241 struct sr_discipline *sd = wu->swu_dis;
4244 DNPRINTF(SR_D_WU, "sr_raid_startwu: start wu %p\n", wu);
4248 if (wu->swu_state == SR_WU_DEFERRED) {
4249 TAILQ_REMOVE(&sd->sd_wu_defq, wu, swu_link);
4250 wu->swu_state = SR_WU_INPROGRESS;
4253 if (wu->swu_state != SR_WU_RESTART)
4254 TAILQ_INSERT_TAIL(&sd->sd_wu_pendq, wu, swu_link);
4257 if (wu->swu_cb_active == 1)
4259 wu->swu_cb_active = 1;
4261 TAILQ_FOREACH(ccb, &wu->swu_ccb, ccb_link)
4264 wu->swu_cb_active = 0;
4268 sr_raid_recreate_wu(struct sr_workunit *wu)
4270 struct sr_discipline *sd = wu->swu_dis;
4271 struct sr_workunit *wup = wu;
4572 sr_validate_io(struct sr_workunit *wu, daddr_t *blkno, char *func)
4574 struct sr_discipline *sd = wu->swu_dis;
4575 struct scsi_xfer *xs = wu->swu_xs;
4610 wu->swu_blk_start = *blkno;
4611 wu->swu_blk_end = *blkno + (xs->datalen >> DEV_BSHIFT) - 1;
4613 if (wu->swu_blk_end > sd->sd_meta->ssdi.ssd_size) {
4616 DEVNAME(sd->sd_sc), func, (long long)wu->swu_blk_start,
4617 (long long)wu->swu_blk_end, xs->datalen);
4710 /* get some wu */