Lines Matching refs:sh

164 ops_run_partial_parity(struct stripe_head *sh, struct raid5_percpu *percpu,  in ops_run_partial_parity()  argument
167 int disks = sh->disks; in ops_run_partial_parity()
169 int count = 0, pd_idx = sh->pd_idx, i; in ops_run_partial_parity()
172 pr_debug("%s: stripe %llu\n", __func__, (unsigned long long)sh->sector); in ops_run_partial_parity()
180 if (sh->reconstruct_state == reconstruct_state_prexor_drain_run) { in ops_run_partial_parity()
186 srcs[count++] = sh->dev[pd_idx].page; in ops_run_partial_parity()
187 } else if (sh->reconstruct_state == reconstruct_state_drain_run) { in ops_run_partial_parity()
190 struct r5dev *dev = &sh->dev[i]; in ops_run_partial_parity()
199 NULL, sh, flex_array_get(percpu->scribble, 0) in ops_run_partial_parity()
200 + sizeof(struct page *) * (sh->disks + 2)); in ops_run_partial_parity()
203 tx = async_memcpy(sh->ppl_page, srcs[0], 0, 0, PAGE_SIZE, in ops_run_partial_parity()
206 tx = async_xor(sh->ppl_page, srcs, 0, count, PAGE_SIZE, in ops_run_partial_parity()
240 struct stripe_head *sh) in ppl_new_iounit() argument
273 static int ppl_log_stripe(struct ppl_log *log, struct stripe_head *sh) in ppl_log_stripe() argument
281 struct r5conf *conf = sh->raid_conf; in ppl_log_stripe()
283 pr_debug("%s: stripe: %llu\n", __func__, (unsigned long long)sh->sector); in ppl_log_stripe()
295 io = ppl_new_iounit(log, sh); in ppl_log_stripe()
305 for (i = 0; i < sh->disks; i++) { in ppl_log_stripe()
306 struct r5dev *dev = &sh->dev[i]; in ppl_log_stripe()
308 if (i != sh->pd_idx && test_bit(R5_Wantwrite, &dev->flags)) { in ppl_log_stripe()
334 if ((sh->sector == sh_last->sector + STRIPE_SECTORS) && in ppl_log_stripe()
345 e->parity_disk = cpu_to_le32(sh->pd_idx); in ppl_log_stripe()
352 if (!test_bit(STRIPE_FULL_WRITE, &sh->state)) { in ppl_log_stripe()
356 page_address(sh->ppl_page), in ppl_log_stripe()
360 list_add_tail(&sh->log_list, &io->stripe_list); in ppl_log_stripe()
362 sh->ppl_io = io; in ppl_log_stripe()
367 int ppl_write_stripe(struct r5conf *conf, struct stripe_head *sh) in ppl_write_stripe() argument
370 struct ppl_io_unit *io = sh->ppl_io; in ppl_write_stripe()
373 if (io || test_bit(STRIPE_SYNCING, &sh->state) || !sh->ppl_page || in ppl_write_stripe()
374 !test_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags) || in ppl_write_stripe()
375 !test_bit(R5_Insync, &sh->dev[sh->pd_idx].flags)) { in ppl_write_stripe()
376 clear_bit(STRIPE_LOG_TRAPPED, &sh->state); in ppl_write_stripe()
380 log = &ppl_conf->child_logs[sh->pd_idx]; in ppl_write_stripe()
389 set_bit(STRIPE_LOG_TRAPPED, &sh->state); in ppl_write_stripe()
390 clear_bit(STRIPE_DELAYED, &sh->state); in ppl_write_stripe()
391 atomic_inc(&sh->count); in ppl_write_stripe()
393 if (ppl_log_stripe(log, sh)) { in ppl_write_stripe()
395 list_add_tail(&sh->log_list, &ppl_conf->no_mem_stripes); in ppl_write_stripe()
409 struct stripe_head *sh, *next; in ppl_log_endio() local
416 list_for_each_entry_safe(sh, next, &io->stripe_list, log_list) { in ppl_log_endio()
417 list_del_init(&sh->log_list); in ppl_log_endio()
419 set_bit(STRIPE_HANDLE, &sh->state); in ppl_log_endio()
420 raid5_release_stripe(sh); in ppl_log_endio()
442 struct stripe_head *sh; in ppl_submit_iounit() local
488 list_for_each_entry(sh, &io->stripe_list, log_list) { in ppl_submit_iounit()
489 for (i = 0; i < sh->disks; i++) { in ppl_submit_iounit()
490 struct r5dev *dev = &sh->dev[i]; in ppl_submit_iounit()
499 if (test_bit(STRIPE_FULL_WRITE, &sh->state)) in ppl_submit_iounit()
502 if (!bio_add_page(bio, sh->ppl_page, PAGE_SIZE, 0)) { in ppl_submit_iounit()
510 bio_add_page(bio, sh->ppl_page, PAGE_SIZE, 0); in ppl_submit_iounit()
577 struct stripe_head *sh; in ppl_io_unit_finished() local
579 sh = list_first_entry(&ppl_conf->no_mem_stripes, in ppl_io_unit_finished()
581 list_del_init(&sh->log_list); in ppl_io_unit_finished()
582 set_bit(STRIPE_HANDLE, &sh->state); in ppl_io_unit_finished()
583 raid5_release_stripe(sh); in ppl_io_unit_finished()
706 void ppl_stripe_write_finished(struct stripe_head *sh) in ppl_stripe_write_finished() argument
710 io = sh->ppl_io; in ppl_stripe_write_finished()
711 sh->ppl_io = NULL; in ppl_stripe_write_finished()
861 struct stripe_head sh; in ppl_recover_entry() local
949 0, &disk, &sh); in ppl_recover_entry()
950 BUG_ON(sh.pd_idx != le32_to_cpu(e->parity_disk)); in ppl_recover_entry()
951 parity_rdev = conf->disks[sh.pd_idx].rdev; in ppl_recover_entry()