Lines Matching refs:sd
87 sr_raid6_discipline_init(struct sr_discipline *sd) in sr_raid6_discipline_init() argument
93 sd->sd_type = SR_MD_RAID6; in sr_raid6_discipline_init()
94 strlcpy(sd->sd_name, "RAID 6", sizeof(sd->sd_name)); in sr_raid6_discipline_init()
95 sd->sd_capabilities = SR_CAP_SYSTEM_DISK | SR_CAP_AUTO_ASSEMBLE | in sr_raid6_discipline_init()
97 sd->sd_max_wu = SR_RAID6_NOWU; in sr_raid6_discipline_init()
100 sd->sd_assemble = sr_raid6_assemble; in sr_raid6_discipline_init()
101 sd->sd_create = sr_raid6_create; in sr_raid6_discipline_init()
102 sd->sd_openings = sr_raid6_openings; in sr_raid6_discipline_init()
103 sd->sd_scsi_rw = sr_raid6_rw; in sr_raid6_discipline_init()
104 sd->sd_scsi_intr = sr_raid6_intr; in sr_raid6_discipline_init()
105 sd->sd_scsi_wu_done = sr_raid6_wu_done; in sr_raid6_discipline_init()
106 sd->sd_set_chunk_state = sr_raid6_set_chunk_state; in sr_raid6_discipline_init()
107 sd->sd_set_vol_state = sr_raid6_set_vol_state; in sr_raid6_discipline_init()
111 sr_raid6_create(struct sr_discipline *sd, struct bioc_createraid *bc, in sr_raid6_create() argument
115 sr_error(sd->sd_sc, "%s requires four or more chunks", in sr_raid6_create()
116 sd->sd_name); in sr_raid6_create()
124 sd->sd_meta->ssdi.ssd_strip_size = MAXPHYS; in sr_raid6_create()
125 sd->sd_meta->ssdi.ssd_size = (coerced_size & in sr_raid6_create()
126 ~(((u_int64_t)sd->sd_meta->ssdi.ssd_strip_size >> in sr_raid6_create()
129 return sr_raid6_init(sd); in sr_raid6_create()
133 sr_raid6_assemble(struct sr_discipline *sd, struct bioc_createraid *bc, in sr_raid6_assemble() argument
136 return sr_raid6_init(sd); in sr_raid6_assemble()
140 sr_raid6_init(struct sr_discipline *sd) in sr_raid6_init() argument
143 sd->mds.mdd_raid6.sr6_strip_bits = in sr_raid6_init()
144 sr_validate_stripsize(sd->sd_meta->ssdi.ssd_strip_size); in sr_raid6_init()
145 if (sd->mds.mdd_raid6.sr6_strip_bits == -1) { in sr_raid6_init()
146 sr_error(sd->sd_sc, "invalid strip size"); in sr_raid6_init()
151 sd->sd_max_ccb_per_wu = max(6, 2 * sd->sd_meta->ssdi.ssd_chunk_no); in sr_raid6_init()
157 sr_raid6_openings(struct sr_discipline *sd) in sr_raid6_openings() argument
159 return (sd->sd_max_wu >> 1); /* 2 wu's per IO */ in sr_raid6_openings()
163 sr_raid6_set_chunk_state(struct sr_discipline *sd, int c, int new_state) in sr_raid6_set_chunk_state() argument
169 DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname, in sr_raid6_set_chunk_state()
170 sd->sd_vol.sv_chunks[c]->src_meta.scmi.scm_devname, c, new_state); in sr_raid6_set_chunk_state()
174 old_state = sd->sd_vol.sv_chunks[c]->src_meta.scm_status; in sr_raid6_set_chunk_state()
222 DEVNAME(sd->sd_sc), in sr_raid6_set_chunk_state()
223 sd->sd_meta->ssd_devname, in sr_raid6_set_chunk_state()
224 sd->sd_vol.sv_chunks[c]->src_meta.scmi.scm_devname, in sr_raid6_set_chunk_state()
229 sd->sd_vol.sv_chunks[c]->src_meta.scm_status = new_state; in sr_raid6_set_chunk_state()
230 sd->sd_set_vol_state(sd); in sr_raid6_set_chunk_state()
232 sd->sd_must_flush = 1; in sr_raid6_set_chunk_state()
233 task_add(systq, &sd->sd_meta_save_task); in sr_raid6_set_chunk_state()
239 sr_raid6_set_vol_state(struct sr_discipline *sd) in sr_raid6_set_vol_state() argument
243 int old_state = sd->sd_vol_status; in sr_raid6_set_vol_state()
248 DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname); in sr_raid6_set_vol_state()
250 nd = sd->sd_meta->ssdi.ssd_chunk_no; in sr_raid6_set_vol_state()
256 s = sd->sd_vol.sv_chunks[i]->src_meta.scm_status; in sr_raid6_set_vol_state()
259 DEVNAME(sd->sd_sc), in sr_raid6_set_vol_state()
260 sd->sd_meta->ssd_devname, in sr_raid6_set_vol_state()
261 sd->sd_vol.sv_chunks[i]->src_meta.scmi.scm_devname); in sr_raid6_set_vol_state()
279 sd->sd_vol.sv_chunks[i]->src_meta.scm_status); in sr_raid6_set_vol_state()
284 DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname, in sr_raid6_set_vol_state()
353 DEVNAME(sd->sd_sc), sd->sd_meta->ssd_devname, in sr_raid6_set_vol_state()
358 sd->sd_vol_status = new_state; in sr_raid6_set_vol_state()
374 struct sr_discipline *sd = wu->swu_dis; in sr_raid6_rw() local
389 strip_size = sd->sd_meta->ssdi.ssd_strip_size; in sr_raid6_rw()
390 strip_bits = sd->mds.mdd_raid6.sr6_strip_bits; in sr_raid6_rw()
391 no_chunk = sd->sd_meta->ssdi.ssd_chunk_no - 2; in sr_raid6_rw()
399 if ((wu_r = sr_scsi_wu_get(sd, SCSI_NOSLEEP)) == NULL){ in sr_raid6_rw()
400 printf("%s: can't get wu_r", DEVNAME(sd->sd_sc)); in sr_raid6_rw()
442 scp = sd->sd_vol.sv_chunks[i]; in sr_raid6_rw()
564 qbuf = sr_block_get(sd, length); in sr_raid6_rw()
568 pbuf = sr_block_get(sd, length); in sr_raid6_rw()
623 TAILQ_INSERT_TAIL(&sd->sd_wu_defq, wu, swu_link); in sr_raid6_rw()
636 sr_scsi_wu_put(sd, wu_r); in sr_raid6_rw()
644 struct sr_discipline *sd = wu->swu_dis; in sr_failio() local
651 TAILQ_INSERT_TAIL(&sd->sd_wu_pendq, wu, swu_link); in sr_failio()
662 struct sr_discipline *sd = wu->swu_dis; in sr_raid6_intr() local
667 DEVNAME(sd->sd_sc), bp, wu->swu_xs); in sr_raid6_intr()
688 sr_block_put(sd, ccb->ccb_buf.b_data, ccb->ccb_buf.b_bcount); in sr_raid6_intr()
699 struct sr_discipline *sd = wu->swu_dis; in sr_raid6_wu_done() local
714 sd->sd_meta->ssd_devname, (long long)wu->swu_blk_start); in sr_raid6_wu_done()
717 if (sd->sd_scsi_rw(wu) == 0) in sr_raid6_wu_done()
721 sd->sd_meta->ssd_devname, (long long)wu->swu_blk_start); in sr_raid6_wu_done()
735 struct sr_discipline *sd = wu->swu_dis; in sr_raid6_addio() local
745 data = sr_block_get(sd, len); in sr_raid6_addio()
751 ccb = sr_ccb_rw(sd, chunk, blkno, len, data, xsflags, ccbflags); in sr_raid6_addio()
754 sr_block_put(sd, data, len); in sr_raid6_addio()