Lines Matching refs:sh
184 struct stripe_head *sh, *next; in r5l_io_run_stripes() local
186 list_for_each_entry_safe(sh, next, &io->stripe_list, log_list) { in r5l_io_run_stripes()
187 list_del_init(&sh->log_list); in r5l_io_run_stripes()
188 set_bit(STRIPE_HANDLE, &sh->state); in r5l_io_run_stripes()
189 raid5_release_stripe(sh); in r5l_io_run_stripes()
373 static void r5l_log_stripe(struct r5l_log *log, struct stripe_head *sh, in r5l_log_stripe() argument
389 for (i = 0; i < sh->disks; i++) { in r5l_log_stripe()
390 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags)) in r5l_log_stripe()
392 if (i == sh->pd_idx || i == sh->qd_idx) in r5l_log_stripe()
395 raid5_compute_blocknr(sh, i, 0), in r5l_log_stripe()
396 sh->dev[i].log_checksum, 0, false); in r5l_log_stripe()
397 r5l_append_payload_page(log, sh->dev[i].page); in r5l_log_stripe()
400 if (sh->qd_idx >= 0) { in r5l_log_stripe()
402 sh->sector, sh->dev[sh->pd_idx].log_checksum, in r5l_log_stripe()
403 sh->dev[sh->qd_idx].log_checksum, true); in r5l_log_stripe()
404 r5l_append_payload_page(log, sh->dev[sh->pd_idx].page); in r5l_log_stripe()
405 r5l_append_payload_page(log, sh->dev[sh->qd_idx].page); in r5l_log_stripe()
408 sh->sector, sh->dev[sh->pd_idx].log_checksum, in r5l_log_stripe()
410 r5l_append_payload_page(log, sh->dev[sh->pd_idx].page); in r5l_log_stripe()
413 list_add_tail(&sh->log_list, &io->stripe_list); in r5l_log_stripe()
415 sh->log_io = io; in r5l_log_stripe()
423 int r5l_write_stripe(struct r5l_log *log, struct stripe_head *sh) in r5l_write_stripe() argument
434 if (sh->log_io || !test_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags) || in r5l_write_stripe()
435 test_bit(STRIPE_SYNCING, &sh->state)) { in r5l_write_stripe()
437 clear_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5l_write_stripe()
441 for (i = 0; i < sh->disks; i++) { in r5l_write_stripe()
444 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags)) in r5l_write_stripe()
448 if (test_bit(STRIPE_LOG_TRAPPED, &sh->state)) in r5l_write_stripe()
450 addr = kmap_atomic(sh->dev[i].page); in r5l_write_stripe()
451 sh->dev[i].log_checksum = crc32c_le(log->uuid_checksum, in r5l_write_stripe()
455 parity_pages = 1 + !!(sh->qd_idx >= 0); in r5l_write_stripe()
467 set_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5l_write_stripe()
472 clear_bit(STRIPE_DELAYED, &sh->state); in r5l_write_stripe()
473 atomic_inc(&sh->count); in r5l_write_stripe()
479 r5l_log_stripe(log, sh, data_pages, parity_pages); in r5l_write_stripe()
482 list_add_tail(&sh->log_list, &log->no_space_stripes); in r5l_write_stripe()
522 struct stripe_head *sh; in r5l_run_no_space_stripes() local
526 sh = list_first_entry(&log->no_space_stripes, in r5l_run_no_space_stripes()
528 list_del_init(&sh->log_list); in r5l_run_no_space_stripes()
529 set_bit(STRIPE_HANDLE, &sh->state); in r5l_run_no_space_stripes()
530 raid5_release_stripe(sh); in r5l_run_no_space_stripes()
585 void r5l_stripe_write_finished(struct stripe_head *sh) in r5l_stripe_write_finished() argument
589 io = sh->log_io; in r5l_stripe_write_finished()
590 sh->log_io = NULL; in r5l_stripe_write_finished()
860 struct stripe_head *sh; in r5l_recovery_flush_one_stripe() local
864 sh = raid5_get_active_stripe(conf, stripe_sect, 0, 0, 0); in r5l_recovery_flush_one_stripe()
871 &disk_index, sh); in r5l_recovery_flush_one_stripe()
874 sh->dev[disk_index].page, READ, false); in r5l_recovery_flush_one_stripe()
875 sh->dev[disk_index].log_checksum = in r5l_recovery_flush_one_stripe()
877 set_bit(R5_Wantwrite, &sh->dev[disk_index].flags); in r5l_recovery_flush_one_stripe()
880 disk_index = sh->pd_idx; in r5l_recovery_flush_one_stripe()
882 sh->dev[disk_index].page, READ, false); in r5l_recovery_flush_one_stripe()
883 sh->dev[disk_index].log_checksum = in r5l_recovery_flush_one_stripe()
885 set_bit(R5_Wantwrite, &sh->dev[disk_index].flags); in r5l_recovery_flush_one_stripe()
887 if (sh->qd_idx >= 0) { in r5l_recovery_flush_one_stripe()
888 disk_index = sh->qd_idx; in r5l_recovery_flush_one_stripe()
891 PAGE_SIZE, sh->dev[disk_index].page, in r5l_recovery_flush_one_stripe()
893 sh->dev[disk_index].log_checksum = in r5l_recovery_flush_one_stripe()
896 &sh->dev[disk_index].flags); in r5l_recovery_flush_one_stripe()
910 for (disk_index = 0; disk_index < sh->disks; disk_index++) { in r5l_recovery_flush_one_stripe()
914 if (!test_bit(R5_Wantwrite, &sh->dev[disk_index].flags)) in r5l_recovery_flush_one_stripe()
916 addr = kmap_atomic(sh->dev[disk_index].page); in r5l_recovery_flush_one_stripe()
919 if (checksum != sh->dev[disk_index].log_checksum) in r5l_recovery_flush_one_stripe()
923 for (disk_index = 0; disk_index < sh->disks; disk_index++) { in r5l_recovery_flush_one_stripe()
927 &sh->dev[disk_index].flags)) in r5l_recovery_flush_one_stripe()
934 sh->dev[disk_index].page, WRITE, false); in r5l_recovery_flush_one_stripe()
938 sh->dev[disk_index].page, WRITE, false); in r5l_recovery_flush_one_stripe()
940 raid5_release_stripe(sh); in r5l_recovery_flush_one_stripe()
944 for (disk_index = 0; disk_index < sh->disks; disk_index++) in r5l_recovery_flush_one_stripe()
945 sh->dev[disk_index].flags = 0; in r5l_recovery_flush_one_stripe()
946 raid5_release_stripe(sh); in r5l_recovery_flush_one_stripe()