Lines Matching full:sh
141 /* all stripes in r5cache, in the order of seq at sh->log_start */
193 * sect: align_bi->bi_iter.bi_sector or sh->sector
308 struct stripe_head *sh, int disks) in r5c_handle_cached_data_endio() argument
312 for (i = sh->disks; i--; ) { in r5c_handle_cached_data_endio()
313 if (sh->dev[i].written) { in r5c_handle_cached_data_endio()
314 set_bit(R5_UPTODATE, &sh->dev[i].flags); in r5c_handle_cached_data_endio()
315 r5c_return_dev_pending_writes(conf, &sh->dev[i]); in r5c_handle_cached_data_endio()
448 void r5c_make_stripe_write_out(struct stripe_head *sh) in r5c_make_stripe_write_out() argument
450 struct r5conf *conf = sh->raid_conf; in r5c_make_stripe_write_out()
455 WARN_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_make_stripe_write_out()
456 clear_bit(STRIPE_R5C_CACHING, &sh->state); in r5c_make_stripe_write_out()
458 if (!test_and_set_bit(STRIPE_PREREAD_ACTIVE, &sh->state)) in r5c_make_stripe_write_out()
462 static void r5c_handle_data_cached(struct stripe_head *sh) in r5c_handle_data_cached() argument
466 for (i = sh->disks; i--; ) in r5c_handle_data_cached()
467 if (test_and_clear_bit(R5_Wantwrite, &sh->dev[i].flags)) { in r5c_handle_data_cached()
468 set_bit(R5_InJournal, &sh->dev[i].flags); in r5c_handle_data_cached()
469 clear_bit(R5_LOCKED, &sh->dev[i].flags); in r5c_handle_data_cached()
471 clear_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5c_handle_data_cached()
478 static void r5c_handle_parity_cached(struct stripe_head *sh) in r5c_handle_parity_cached() argument
482 for (i = sh->disks; i--; ) in r5c_handle_parity_cached()
483 if (test_bit(R5_InJournal, &sh->dev[i].flags)) in r5c_handle_parity_cached()
484 set_bit(R5_Wantwrite, &sh->dev[i].flags); in r5c_handle_parity_cached()
491 static void r5c_finish_cache_stripe(struct stripe_head *sh) in r5c_finish_cache_stripe() argument
493 struct r5l_log *log = READ_ONCE(sh->raid_conf->log); in r5c_finish_cache_stripe()
496 BUG_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_finish_cache_stripe()
503 set_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags); in r5c_finish_cache_stripe()
504 } else if (test_bit(STRIPE_R5C_CACHING, &sh->state)) { in r5c_finish_cache_stripe()
505 r5c_handle_data_cached(sh); in r5c_finish_cache_stripe()
507 r5c_handle_parity_cached(sh); in r5c_finish_cache_stripe()
508 set_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags); in r5c_finish_cache_stripe()
514 struct stripe_head *sh, *next; in r5l_io_run_stripes() local
516 list_for_each_entry_safe(sh, next, &io->stripe_list, log_list) { in r5l_io_run_stripes()
517 list_del_init(&sh->log_list); in r5l_io_run_stripes()
519 r5c_finish_cache_stripe(sh); in r5l_io_run_stripes()
521 set_bit(STRIPE_HANDLE, &sh->state); in r5l_io_run_stripes()
522 raid5_release_stripe(sh); in r5l_io_run_stripes()
899 static int r5l_log_stripe(struct r5l_log *log, struct stripe_head *sh, in r5l_log_stripe() argument
919 if (test_and_clear_bit(STRIPE_R5C_PREFLUSH, &sh->state)) in r5l_log_stripe()
922 for (i = 0; i < sh->disks; i++) { in r5l_log_stripe()
923 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags) || in r5l_log_stripe()
924 test_bit(R5_InJournal, &sh->dev[i].flags)) in r5l_log_stripe()
926 if (i == sh->pd_idx || i == sh->qd_idx) in r5l_log_stripe()
928 if (test_bit(R5_WantFUA, &sh->dev[i].flags) && in r5l_log_stripe()
938 raid5_compute_blocknr(sh, i, 0), in r5l_log_stripe()
939 sh->dev[i].log_checksum, 0, false); in r5l_log_stripe()
940 r5l_append_payload_page(log, sh->dev[i].page); in r5l_log_stripe()
945 sh->sector, sh->dev[sh->pd_idx].log_checksum, in r5l_log_stripe()
946 sh->dev[sh->qd_idx].log_checksum, true); in r5l_log_stripe()
947 r5l_append_payload_page(log, sh->dev[sh->pd_idx].page); in r5l_log_stripe()
948 r5l_append_payload_page(log, sh->dev[sh->qd_idx].page); in r5l_log_stripe()
951 sh->sector, sh->dev[sh->pd_idx].log_checksum, in r5l_log_stripe()
953 r5l_append_payload_page(log, sh->dev[sh->pd_idx].page); in r5l_log_stripe()
957 list_add_tail(&sh->log_list, &io->stripe_list); in r5l_log_stripe()
959 sh->log_io = io; in r5l_log_stripe()
964 if (sh->log_start == MaxSector) { in r5l_log_stripe()
965 BUG_ON(!list_empty(&sh->r5c)); in r5l_log_stripe()
966 sh->log_start = io->log_start; in r5l_log_stripe()
968 list_add_tail(&sh->r5c, in r5l_log_stripe()
978 struct stripe_head *sh) in r5l_add_no_space_stripe() argument
981 list_add_tail(&sh->log_list, &log->no_space_stripes); in r5l_add_no_space_stripe()
989 int r5l_write_stripe(struct r5l_log *log, struct stripe_head *sh) in r5l_write_stripe() argument
991 struct r5conf *conf = sh->raid_conf; in r5l_write_stripe()
1002 if (sh->log_io || !test_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags) || in r5l_write_stripe()
1003 test_bit(STRIPE_SYNCING, &sh->state)) { in r5l_write_stripe()
1005 clear_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5l_write_stripe()
1009 WARN_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5l_write_stripe()
1011 for (i = 0; i < sh->disks; i++) { in r5l_write_stripe()
1014 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags) || in r5l_write_stripe()
1015 test_bit(R5_InJournal, &sh->dev[i].flags)) in r5l_write_stripe()
1020 if (test_bit(STRIPE_LOG_TRAPPED, &sh->state)) in r5l_write_stripe()
1022 addr = kmap_local_page(sh->dev[i].page); in r5l_write_stripe()
1023 sh->dev[i].log_checksum = crc32c_le(log->uuid_checksum, in r5l_write_stripe()
1027 parity_pages = 1 + !!(sh->qd_idx >= 0); in r5l_write_stripe()
1030 set_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5l_write_stripe()
1035 clear_bit(STRIPE_DELAYED, &sh->state); in r5l_write_stripe()
1036 atomic_inc(&sh->count); in r5l_write_stripe()
1044 r5l_add_no_space_stripe(log, sh); in r5l_write_stripe()
1047 ret = r5l_log_stripe(log, sh, data_pages, parity_pages); in r5l_write_stripe()
1050 list_add_tail(&sh->log_list, in r5l_write_stripe()
1058 * not in cache yet (sh->log_start == MaxSector). in r5l_write_stripe()
1061 sh->log_start == MaxSector) { in r5l_write_stripe()
1062 r5l_add_no_space_stripe(log, sh); in r5l_write_stripe()
1066 if (sh->log_start == log->last_checkpoint) in r5l_write_stripe()
1069 r5l_add_no_space_stripe(log, sh); in r5l_write_stripe()
1071 ret = r5l_log_stripe(log, sh, data_pages, parity_pages); in r5l_write_stripe()
1074 list_add_tail(&sh->log_list, in r5l_write_stripe()
1131 struct stripe_head *sh; in r5l_run_no_space_stripes() local
1135 sh = list_first_entry(&log->no_space_stripes, in r5l_run_no_space_stripes()
1137 list_del_init(&sh->log_list); in r5l_run_no_space_stripes()
1138 set_bit(STRIPE_HANDLE, &sh->state); in r5l_run_no_space_stripes()
1139 raid5_release_stripe(sh); in r5l_run_no_space_stripes()
1147 * for write back, returns log_start of first sh in stripe_in_journal_list
1151 struct stripe_head *sh; in r5c_calculate_new_cp() local
1165 sh = list_first_entry(&log->stripe_in_journal_list, in r5c_calculate_new_cp()
1167 new_cp = sh->log_start; in r5c_calculate_new_cp()
1182 struct stripe_head *sh; in r5l_run_no_mem_stripe() local
1187 sh = list_first_entry(&log->no_mem_stripes, in r5l_run_no_mem_stripe()
1189 list_del_init(&sh->log_list); in r5l_run_no_mem_stripe()
1190 set_bit(STRIPE_HANDLE, &sh->state); in r5l_run_no_mem_stripe()
1191 raid5_release_stripe(sh); in r5l_run_no_mem_stripe()
1241 void r5l_stripe_write_finished(struct stripe_head *sh) in r5l_stripe_write_finished() argument
1245 io = sh->log_io; in r5l_stripe_write_finished()
1246 sh->log_io = NULL; in r5l_stripe_write_finished()
1361 static void r5c_flush_stripe(struct r5conf *conf, struct stripe_head *sh) in r5c_flush_stripe() argument
1363 BUG_ON(list_empty(&sh->lru)); in r5c_flush_stripe()
1364 BUG_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_flush_stripe()
1365 BUG_ON(test_bit(STRIPE_HANDLE, &sh->state)); in r5c_flush_stripe()
1371 BUG_ON(test_bit(STRIPE_ON_RELEASE_LIST, &sh->state)); in r5c_flush_stripe()
1374 list_del_init(&sh->lru); in r5c_flush_stripe()
1375 atomic_inc(&sh->count); in r5c_flush_stripe()
1377 set_bit(STRIPE_HANDLE, &sh->state); in r5c_flush_stripe()
1379 r5c_make_stripe_write_out(sh); in r5c_flush_stripe()
1381 if (test_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state)) in r5c_flush_stripe()
1385 raid5_release_stripe(sh); in r5c_flush_stripe()
1397 struct stripe_head *sh, *next; in r5c_flush_cache() local
1404 list_for_each_entry_safe(sh, next, &conf->r5c_full_stripe_list, lru) { in r5c_flush_cache()
1405 r5c_flush_stripe(conf, sh); in r5c_flush_cache()
1411 list_for_each_entry_safe(sh, next, in r5c_flush_cache()
1413 r5c_flush_stripe(conf, sh); in r5c_flush_cache()
1422 struct stripe_head *sh; in r5c_do_reclaim() local
1467 list_for_each_entry(sh, &log->stripe_in_journal_list, r5c) { in r5c_do_reclaim()
1476 if (!list_empty(&sh->lru) && in r5c_do_reclaim()
1477 !test_bit(STRIPE_HANDLE, &sh->state) && in r5c_do_reclaim()
1478 atomic_read(&sh->count) == 0) { in r5c_do_reclaim()
1479 r5c_flush_stripe(conf, sh); in r5c_do_reclaim()
1802 struct stripe_head *sh, in r5l_recovery_load_data() argument
1813 &dd_idx, sh); in r5l_recovery_load_data()
1814 r5l_recovery_read_page(log, ctx, sh->dev[dd_idx].page, log_offset); in r5l_recovery_load_data()
1815 sh->dev[dd_idx].log_checksum = in r5l_recovery_load_data()
1819 set_bit(R5_Wantwrite, &sh->dev[dd_idx].flags); in r5l_recovery_load_data()
1820 set_bit(STRIPE_R5C_CACHING, &sh->state); in r5l_recovery_load_data()
1824 struct stripe_head *sh, in r5l_recovery_load_parity() argument
1833 r5l_recovery_read_page(log, ctx, sh->dev[sh->pd_idx].page, log_offset); in r5l_recovery_load_parity()
1834 sh->dev[sh->pd_idx].log_checksum = in r5l_recovery_load_parity()
1836 set_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags); in r5l_recovery_load_parity()
1838 if (sh->qd_idx >= 0) { in r5l_recovery_load_parity()
1840 log, ctx, sh->dev[sh->qd_idx].page, in r5l_recovery_load_parity()
1842 sh->dev[sh->qd_idx].log_checksum = in r5l_recovery_load_parity()
1844 set_bit(R5_Wantwrite, &sh->dev[sh->qd_idx].flags); in r5l_recovery_load_parity()
1846 clear_bit(STRIPE_R5C_CACHING, &sh->state); in r5l_recovery_load_parity()
1849 static void r5l_recovery_reset_stripe(struct stripe_head *sh) in r5l_recovery_reset_stripe() argument
1853 sh->state = 0; in r5l_recovery_reset_stripe()
1854 sh->log_start = MaxSector; in r5l_recovery_reset_stripe()
1855 for (i = sh->disks; i--; ) in r5l_recovery_reset_stripe()
1856 sh->dev[i].flags = 0; in r5l_recovery_reset_stripe()
1861 struct stripe_head *sh, in r5l_recovery_replay_one_stripe() argument
1868 for (disk_index = 0; disk_index < sh->disks; disk_index++) { in r5l_recovery_replay_one_stripe()
1869 if (!test_bit(R5_Wantwrite, &sh->dev[disk_index].flags)) in r5l_recovery_replay_one_stripe()
1871 if (disk_index == sh->qd_idx || disk_index == sh->pd_idx) in r5l_recovery_replay_one_stripe()
1884 for (disk_index = 0; disk_index < sh->disks; disk_index++) { in r5l_recovery_replay_one_stripe()
1885 if (!test_bit(R5_Wantwrite, &sh->dev[disk_index].flags)) in r5l_recovery_replay_one_stripe()
1892 sync_page_io(rdev, sh->sector, PAGE_SIZE, in r5l_recovery_replay_one_stripe()
1893 sh->dev[disk_index].page, REQ_OP_WRITE, in r5l_recovery_replay_one_stripe()
1900 sync_page_io(rrdev, sh->sector, PAGE_SIZE, in r5l_recovery_replay_one_stripe()
1901 sh->dev[disk_index].page, REQ_OP_WRITE, in r5l_recovery_replay_one_stripe()
1908 r5l_recovery_reset_stripe(sh); in r5l_recovery_replay_one_stripe()
1917 struct stripe_head *sh; in r5c_recovery_alloc_stripe() local
1919 sh = raid5_get_active_stripe(conf, NULL, stripe_sect, in r5c_recovery_alloc_stripe()
1921 if (!sh) in r5c_recovery_alloc_stripe()
1924 r5l_recovery_reset_stripe(sh); in r5c_recovery_alloc_stripe()
1926 return sh; in r5c_recovery_alloc_stripe()
1932 struct stripe_head *sh; in r5c_recovery_lookup_stripe() local
1934 list_for_each_entry(sh, list, lru) in r5c_recovery_lookup_stripe()
1935 if (sh->sector == sect) in r5c_recovery_lookup_stripe()
1936 return sh; in r5c_recovery_lookup_stripe()
1944 struct stripe_head *sh, *next; in r5c_recovery_drop_stripes() local
1946 list_for_each_entry_safe(sh, next, cached_stripe_list, lru) { in r5c_recovery_drop_stripes()
1947 r5l_recovery_reset_stripe(sh); in r5c_recovery_drop_stripes()
1948 list_del_init(&sh->lru); in r5c_recovery_drop_stripes()
1949 raid5_release_stripe(sh); in r5c_recovery_drop_stripes()
1957 struct stripe_head *sh, *next; in r5c_recovery_replay_stripes() local
1959 list_for_each_entry_safe(sh, next, cached_stripe_list, lru) in r5c_recovery_replay_stripes()
1960 if (!test_bit(STRIPE_R5C_CACHING, &sh->state)) { in r5c_recovery_replay_stripes()
1961 r5l_recovery_replay_one_stripe(sh->raid_conf, sh, ctx); in r5c_recovery_replay_stripes()
1962 list_del_init(&sh->lru); in r5c_recovery_replay_stripes()
1963 raid5_release_stripe(sh); in r5c_recovery_replay_stripes()
2074 struct stripe_head *sh; in r5c_recovery_analyze_meta_block() local
2104 sh = r5c_recovery_lookup_stripe(cached_stripe_list, in r5c_recovery_analyze_meta_block()
2106 if (sh) { in r5c_recovery_analyze_meta_block()
2107 WARN_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_recovery_analyze_meta_block()
2108 r5l_recovery_reset_stripe(sh); in r5c_recovery_analyze_meta_block()
2109 list_del_init(&sh->lru); in r5c_recovery_analyze_meta_block()
2110 raid5_release_stripe(sh); in r5c_recovery_analyze_meta_block()
2126 sh = r5c_recovery_lookup_stripe(cached_stripe_list, in r5c_recovery_analyze_meta_block()
2129 if (!sh) { in r5c_recovery_analyze_meta_block()
2130 sh = r5c_recovery_alloc_stripe(conf, stripe_sect, 1); in r5c_recovery_analyze_meta_block()
2135 if (!sh) { in r5c_recovery_analyze_meta_block()
2138 sh = r5c_recovery_alloc_stripe( in r5c_recovery_analyze_meta_block()
2141 if (!sh) { in r5c_recovery_analyze_meta_block()
2156 sh = r5c_recovery_alloc_stripe( in r5c_recovery_analyze_meta_block()
2159 if (!sh) { in r5c_recovery_analyze_meta_block()
2164 list_add_tail(&sh->lru, cached_stripe_list); in r5c_recovery_analyze_meta_block()
2168 if (!test_bit(STRIPE_R5C_CACHING, &sh->state) && in r5c_recovery_analyze_meta_block()
2169 test_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags)) { in r5c_recovery_analyze_meta_block()
2170 r5l_recovery_replay_one_stripe(conf, sh, ctx); in r5c_recovery_analyze_meta_block()
2171 list_move_tail(&sh->lru, cached_stripe_list); in r5c_recovery_analyze_meta_block()
2173 r5l_recovery_load_data(log, sh, ctx, payload, in r5c_recovery_analyze_meta_block()
2176 r5l_recovery_load_parity(log, sh, ctx, payload, in r5c_recovery_analyze_meta_block()
2197 struct stripe_head *sh) in r5c_recovery_load_one_stripe() argument
2202 for (i = sh->disks; i--; ) { in r5c_recovery_load_one_stripe()
2203 dev = sh->dev + i; in r5c_recovery_load_one_stripe()
2230 struct stripe_head *sh; in r5c_recovery_flush_log() local
2259 list_for_each_entry(sh, &ctx->cached_list, lru) { in r5c_recovery_flush_log()
2260 WARN_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_recovery_flush_log()
2261 r5c_recovery_load_one_stripe(log, sh); in r5c_recovery_flush_log()
2341 struct stripe_head *sh; in r5c_recovery_rewrite_data_only_stripes() local
2355 list_for_each_entry(sh, &ctx->cached_list, lru) { in r5c_recovery_rewrite_data_only_stripes()
2361 WARN_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_recovery_rewrite_data_only_stripes()
2368 for (i = sh->disks; i--; ) { in r5c_recovery_rewrite_data_only_stripes()
2369 struct r5dev *dev = &sh->dev[i]; in r5c_recovery_rewrite_data_only_stripes()
2379 raid5_compute_blocknr(sh, i, 0)); in r5c_recovery_rewrite_data_only_stripes()
2399 sh->log_start = ctx->pos; in r5c_recovery_rewrite_data_only_stripes()
2400 list_add_tail(&sh->r5c, &log->stripe_in_journal_list); in r5c_recovery_rewrite_data_only_stripes()
2404 next_checkpoint = sh->log_start; in r5c_recovery_rewrite_data_only_stripes()
2416 struct stripe_head *sh, *next; in r5c_recovery_flush_data_only_stripes() local
2428 list_for_each_entry_safe(sh, next, &ctx->cached_list, lru) { in r5c_recovery_flush_data_only_stripes()
2429 r5c_make_stripe_write_out(sh); in r5c_recovery_flush_data_only_stripes()
2430 set_bit(STRIPE_HANDLE, &sh->state); in r5c_recovery_flush_data_only_stripes()
2431 list_del_init(&sh->lru); in r5c_recovery_flush_data_only_stripes()
2432 raid5_release_stripe(sh); in r5c_recovery_flush_data_only_stripes()
2624 struct stripe_head *sh, in r5c_try_caching_write() argument
2639 if (!test_bit(STRIPE_R5C_CACHING, &sh->state)) { in r5c_try_caching_write()
2657 set_bit(STRIPE_R5C_CACHING, &sh->state); in r5c_try_caching_write()
2668 if (s->failed || test_bit(STRIPE_SYNCING, &sh->state)) { in r5c_try_caching_write()
2669 r5c_make_stripe_write_out(sh); in r5c_try_caching_write()
2674 dev = &sh->dev[i]; in r5c_try_caching_write()
2678 r5c_make_stripe_write_out(sh); in r5c_try_caching_write()
2684 if (!test_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state) && in r5c_try_caching_write()
2685 !test_bit(STRIPE_R5C_FULL_STRIPE, &sh->state)) { in r5c_try_caching_write()
2686 tree_index = r5c_tree_index(conf, sh->sector); in r5c_try_caching_write()
2707 r5c_make_stripe_write_out(sh); in r5c_try_caching_write()
2717 set_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state); in r5c_try_caching_write()
2722 dev = &sh->dev[i]; in r5c_try_caching_write()
2738 set_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5c_try_caching_write()
2747 void r5c_release_extra_page(struct stripe_head *sh) in r5c_release_extra_page() argument
2749 struct r5conf *conf = sh->raid_conf; in r5c_release_extra_page()
2754 sh->dev[0].orig_page == conf->disks[0].extra_page; in r5c_release_extra_page()
2756 for (i = sh->disks; i--; ) in r5c_release_extra_page()
2757 if (sh->dev[i].page != sh->dev[i].orig_page) { in r5c_release_extra_page()
2758 struct page *p = sh->dev[i].orig_page; in r5c_release_extra_page()
2760 sh->dev[i].orig_page = sh->dev[i].page; in r5c_release_extra_page()
2761 clear_bit(R5_OrigPageUPTDODATE, &sh->dev[i].flags); in r5c_release_extra_page()
2773 void r5c_use_extra_page(struct stripe_head *sh) in r5c_use_extra_page() argument
2775 struct r5conf *conf = sh->raid_conf; in r5c_use_extra_page()
2779 for (i = sh->disks; i--; ) { in r5c_use_extra_page()
2780 dev = &sh->dev[i]; in r5c_use_extra_page()
2792 struct stripe_head *sh, in r5c_finish_stripe_write_out() argument
2801 if (!log || !test_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags)) in r5c_finish_stripe_write_out()
2804 WARN_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_finish_stripe_write_out()
2805 clear_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags); in r5c_finish_stripe_write_out()
2810 for (i = sh->disks; i--; ) { in r5c_finish_stripe_write_out()
2811 clear_bit(R5_InJournal, &sh->dev[i].flags); in r5c_finish_stripe_write_out()
2812 if (test_and_clear_bit(R5_Overlap, &sh->dev[i].flags)) in r5c_finish_stripe_write_out()
2813 wake_up_bit(&sh->dev[i].flags, R5_Overlap); in r5c_finish_stripe_write_out()
2822 if (test_and_clear_bit(STRIPE_FULL_WRITE, &sh->state)) in r5c_finish_stripe_write_out()
2827 list_del_init(&sh->r5c); in r5c_finish_stripe_write_out()
2829 sh->log_start = MaxSector; in r5c_finish_stripe_write_out()
2835 if (test_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state) || in r5c_finish_stripe_write_out()
2836 test_bit(STRIPE_R5C_FULL_STRIPE, &sh->state)) { in r5c_finish_stripe_write_out()
2837 tree_index = r5c_tree_index(conf, sh->sector); in r5c_finish_stripe_write_out()
2854 if (test_and_clear_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state)) { in r5c_finish_stripe_write_out()
2860 if (test_and_clear_bit(STRIPE_R5C_FULL_STRIPE, &sh->state)) { in r5c_finish_stripe_write_out()
2866 r5l_append_flush_payload(log, sh->sector); in r5c_finish_stripe_write_out()
2868 if (test_bit(STRIPE_SYNC_REQUESTED, &sh->state)) in r5c_finish_stripe_write_out()
2869 set_bit(STRIPE_HANDLE, &sh->state); in r5c_finish_stripe_write_out()
2872 int r5c_cache_data(struct r5l_log *log, struct stripe_head *sh) in r5c_cache_data() argument
2874 struct r5conf *conf = sh->raid_conf; in r5c_cache_data()
2882 for (i = 0; i < sh->disks; i++) { in r5c_cache_data()
2885 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags)) in r5c_cache_data()
2887 addr = kmap_local_page(sh->dev[i].page); in r5c_cache_data()
2888 sh->dev[i].log_checksum = crc32c_le(log->uuid_checksum, in r5c_cache_data()
2899 clear_bit(STRIPE_DELAYED, &sh->state); in r5c_cache_data()
2900 atomic_inc(&sh->count); in r5c_cache_data()
2907 sh->log_start == MaxSector) in r5c_cache_data()
2908 r5l_add_no_space_stripe(log, sh); in r5c_cache_data()
2910 if (sh->log_start == log->last_checkpoint) in r5c_cache_data()
2913 r5l_add_no_space_stripe(log, sh); in r5c_cache_data()
2915 ret = r5l_log_stripe(log, sh, pages, 0); in r5c_cache_data()
2918 list_add_tail(&sh->log_list, &log->no_mem_stripes); in r5c_cache_data()