Lines Matching refs:sh
158 ops_run_partial_parity(struct stripe_head *sh, struct raid5_percpu *percpu, in ops_run_partial_parity() argument
161 int disks = sh->disks; in ops_run_partial_parity()
163 int count = 0, pd_idx = sh->pd_idx, i; in ops_run_partial_parity()
166 pr_debug("%s: stripe %llu\n", __func__, (unsigned long long)sh->sector); in ops_run_partial_parity()
174 if (sh->reconstruct_state == reconstruct_state_prexor_drain_run) { in ops_run_partial_parity()
180 srcs[count++] = sh->dev[pd_idx].page; in ops_run_partial_parity()
181 } else if (sh->reconstruct_state == reconstruct_state_drain_run) { in ops_run_partial_parity()
184 struct r5dev *dev = &sh->dev[i]; in ops_run_partial_parity()
193 NULL, sh, (void *) (srcs + sh->disks + 2)); in ops_run_partial_parity()
196 tx = async_memcpy(sh->ppl_page, srcs[0], 0, 0, PAGE_SIZE, in ops_run_partial_parity()
199 tx = async_xor(sh->ppl_page, srcs, 0, count, PAGE_SIZE, in ops_run_partial_parity()
233 struct stripe_head *sh) in ppl_new_iounit() argument
266 static int ppl_log_stripe(struct ppl_log *log, struct stripe_head *sh) in ppl_log_stripe() argument
274 struct r5conf *conf = sh->raid_conf; in ppl_log_stripe()
276 pr_debug("%s: stripe: %llu\n", __func__, (unsigned long long)sh->sector); in ppl_log_stripe()
288 io = ppl_new_iounit(log, sh); in ppl_log_stripe()
298 for (i = 0; i < sh->disks; i++) { in ppl_log_stripe()
299 struct r5dev *dev = &sh->dev[i]; in ppl_log_stripe()
301 if (i != sh->pd_idx && test_bit(R5_Wantwrite, &dev->flags)) { in ppl_log_stripe()
327 if ((sh->sector == sh_last->sector + RAID5_STRIPE_SECTORS(conf)) && in ppl_log_stripe()
338 e->parity_disk = cpu_to_le32(sh->pd_idx); in ppl_log_stripe()
345 if (!test_bit(STRIPE_FULL_WRITE, &sh->state)) { in ppl_log_stripe()
349 page_address(sh->ppl_page), in ppl_log_stripe()
353 list_add_tail(&sh->log_list, &io->stripe_list); in ppl_log_stripe()
355 sh->ppl_io = io; in ppl_log_stripe()
360 int ppl_write_stripe(struct r5conf *conf, struct stripe_head *sh) in ppl_write_stripe() argument
363 struct ppl_io_unit *io = sh->ppl_io; in ppl_write_stripe()
366 if (io || test_bit(STRIPE_SYNCING, &sh->state) || !sh->ppl_page || in ppl_write_stripe()
367 !test_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags) || in ppl_write_stripe()
368 !test_bit(R5_Insync, &sh->dev[sh->pd_idx].flags)) { in ppl_write_stripe()
369 clear_bit(STRIPE_LOG_TRAPPED, &sh->state); in ppl_write_stripe()
373 log = &ppl_conf->child_logs[sh->pd_idx]; in ppl_write_stripe()
382 set_bit(STRIPE_LOG_TRAPPED, &sh->state); in ppl_write_stripe()
383 clear_bit(STRIPE_DELAYED, &sh->state); in ppl_write_stripe()
384 atomic_inc(&sh->count); in ppl_write_stripe()
386 if (ppl_log_stripe(log, sh)) { in ppl_write_stripe()
388 list_add_tail(&sh->log_list, &ppl_conf->no_mem_stripes); in ppl_write_stripe()
402 struct stripe_head *sh, *next; in ppl_log_endio() local
409 list_for_each_entry_safe(sh, next, &io->stripe_list, log_list) { in ppl_log_endio()
410 list_del_init(&sh->log_list); in ppl_log_endio()
412 set_bit(STRIPE_HANDLE, &sh->state); in ppl_log_endio()
413 raid5_release_stripe(sh); in ppl_log_endio()
435 struct stripe_head *sh; in ppl_submit_iounit() local
482 list_for_each_entry(sh, &io->stripe_list, log_list) { in ppl_submit_iounit()
483 for (i = 0; i < sh->disks; i++) { in ppl_submit_iounit()
484 struct r5dev *dev = &sh->dev[i]; in ppl_submit_iounit()
493 if (test_bit(STRIPE_FULL_WRITE, &sh->state)) in ppl_submit_iounit()
496 if (!bio_add_page(bio, sh->ppl_page, PAGE_SIZE, 0)) { in ppl_submit_iounit()
505 bio_add_page(bio, sh->ppl_page, PAGE_SIZE, 0); in ppl_submit_iounit()
572 struct stripe_head *sh; in ppl_io_unit_finished() local
574 sh = list_first_entry(&ppl_conf->no_mem_stripes, in ppl_io_unit_finished()
576 list_del_init(&sh->log_list); in ppl_io_unit_finished()
577 set_bit(STRIPE_HANDLE, &sh->state); in ppl_io_unit_finished()
578 raid5_release_stripe(sh); in ppl_io_unit_finished()
701 void ppl_stripe_write_finished(struct stripe_head *sh) in ppl_stripe_write_finished() argument
705 io = sh->ppl_io; in ppl_stripe_write_finished()
706 sh->ppl_io = NULL; in ppl_stripe_write_finished()
856 struct stripe_head sh; in ppl_recover_entry() local
944 0, &disk, &sh); in ppl_recover_entry()
945 BUG_ON(sh.pd_idx != le32_to_cpu(e->parity_disk)); in ppl_recover_entry()
946 parity_rdev = conf->disks[sh.pd_idx].rdev; in ppl_recover_entry()