Lines Matching refs:sh
310 struct stripe_head *sh, int disks) in r5c_handle_cached_data_endio() argument
314 for (i = sh->disks; i--; ) { in r5c_handle_cached_data_endio()
315 if (sh->dev[i].written) { in r5c_handle_cached_data_endio()
316 set_bit(R5_UPTODATE, &sh->dev[i].flags); in r5c_handle_cached_data_endio()
317 r5c_return_dev_pending_writes(conf, &sh->dev[i]); in r5c_handle_cached_data_endio()
318 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in r5c_handle_cached_data_endio()
320 !test_bit(STRIPE_DEGRADED, &sh->state), in r5c_handle_cached_data_endio()
451 void r5c_make_stripe_write_out(struct stripe_head *sh) in r5c_make_stripe_write_out() argument
453 struct r5conf *conf = sh->raid_conf; in r5c_make_stripe_write_out()
458 WARN_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_make_stripe_write_out()
459 clear_bit(STRIPE_R5C_CACHING, &sh->state); in r5c_make_stripe_write_out()
461 if (!test_and_set_bit(STRIPE_PREREAD_ACTIVE, &sh->state)) in r5c_make_stripe_write_out()
465 static void r5c_handle_data_cached(struct stripe_head *sh) in r5c_handle_data_cached() argument
469 for (i = sh->disks; i--; ) in r5c_handle_data_cached()
470 if (test_and_clear_bit(R5_Wantwrite, &sh->dev[i].flags)) { in r5c_handle_data_cached()
471 set_bit(R5_InJournal, &sh->dev[i].flags); in r5c_handle_data_cached()
472 clear_bit(R5_LOCKED, &sh->dev[i].flags); in r5c_handle_data_cached()
474 clear_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5c_handle_data_cached()
481 static void r5c_handle_parity_cached(struct stripe_head *sh) in r5c_handle_parity_cached() argument
485 for (i = sh->disks; i--; ) in r5c_handle_parity_cached()
486 if (test_bit(R5_InJournal, &sh->dev[i].flags)) in r5c_handle_parity_cached()
487 set_bit(R5_Wantwrite, &sh->dev[i].flags); in r5c_handle_parity_cached()
494 static void r5c_finish_cache_stripe(struct stripe_head *sh) in r5c_finish_cache_stripe() argument
496 struct r5l_log *log = sh->raid_conf->log; in r5c_finish_cache_stripe()
499 BUG_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_finish_cache_stripe()
506 set_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags); in r5c_finish_cache_stripe()
507 } else if (test_bit(STRIPE_R5C_CACHING, &sh->state)) { in r5c_finish_cache_stripe()
508 r5c_handle_data_cached(sh); in r5c_finish_cache_stripe()
510 r5c_handle_parity_cached(sh); in r5c_finish_cache_stripe()
511 set_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags); in r5c_finish_cache_stripe()
517 struct stripe_head *sh, *next; in r5l_io_run_stripes() local
519 list_for_each_entry_safe(sh, next, &io->stripe_list, log_list) { in r5l_io_run_stripes()
520 list_del_init(&sh->log_list); in r5l_io_run_stripes()
522 r5c_finish_cache_stripe(sh); in r5l_io_run_stripes()
524 set_bit(STRIPE_HANDLE, &sh->state); in r5l_io_run_stripes()
525 raid5_release_stripe(sh); in r5l_io_run_stripes()
904 static int r5l_log_stripe(struct r5l_log *log, struct stripe_head *sh, in r5l_log_stripe() argument
924 if (test_and_clear_bit(STRIPE_R5C_PREFLUSH, &sh->state)) in r5l_log_stripe()
927 for (i = 0; i < sh->disks; i++) { in r5l_log_stripe()
928 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags) || in r5l_log_stripe()
929 test_bit(R5_InJournal, &sh->dev[i].flags)) in r5l_log_stripe()
931 if (i == sh->pd_idx || i == sh->qd_idx) in r5l_log_stripe()
933 if (test_bit(R5_WantFUA, &sh->dev[i].flags) && in r5l_log_stripe()
943 raid5_compute_blocknr(sh, i, 0), in r5l_log_stripe()
944 sh->dev[i].log_checksum, 0, false); in r5l_log_stripe()
945 r5l_append_payload_page(log, sh->dev[i].page); in r5l_log_stripe()
950 sh->sector, sh->dev[sh->pd_idx].log_checksum, in r5l_log_stripe()
951 sh->dev[sh->qd_idx].log_checksum, true); in r5l_log_stripe()
952 r5l_append_payload_page(log, sh->dev[sh->pd_idx].page); in r5l_log_stripe()
953 r5l_append_payload_page(log, sh->dev[sh->qd_idx].page); in r5l_log_stripe()
956 sh->sector, sh->dev[sh->pd_idx].log_checksum, in r5l_log_stripe()
958 r5l_append_payload_page(log, sh->dev[sh->pd_idx].page); in r5l_log_stripe()
962 list_add_tail(&sh->log_list, &io->stripe_list); in r5l_log_stripe()
964 sh->log_io = io; in r5l_log_stripe()
969 if (sh->log_start == MaxSector) { in r5l_log_stripe()
970 BUG_ON(!list_empty(&sh->r5c)); in r5l_log_stripe()
971 sh->log_start = io->log_start; in r5l_log_stripe()
973 list_add_tail(&sh->r5c, in r5l_log_stripe()
983 struct stripe_head *sh) in r5l_add_no_space_stripe() argument
986 list_add_tail(&sh->log_list, &log->no_space_stripes); in r5l_add_no_space_stripe()
994 int r5l_write_stripe(struct r5l_log *log, struct stripe_head *sh) in r5l_write_stripe() argument
996 struct r5conf *conf = sh->raid_conf; in r5l_write_stripe()
1007 if (sh->log_io || !test_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags) || in r5l_write_stripe()
1008 test_bit(STRIPE_SYNCING, &sh->state)) { in r5l_write_stripe()
1010 clear_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5l_write_stripe()
1014 WARN_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5l_write_stripe()
1016 for (i = 0; i < sh->disks; i++) { in r5l_write_stripe()
1019 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags) || in r5l_write_stripe()
1020 test_bit(R5_InJournal, &sh->dev[i].flags)) in r5l_write_stripe()
1025 if (test_bit(STRIPE_LOG_TRAPPED, &sh->state)) in r5l_write_stripe()
1027 addr = kmap_atomic(sh->dev[i].page); in r5l_write_stripe()
1028 sh->dev[i].log_checksum = crc32c_le(log->uuid_checksum, in r5l_write_stripe()
1032 parity_pages = 1 + !!(sh->qd_idx >= 0); in r5l_write_stripe()
1035 set_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5l_write_stripe()
1040 clear_bit(STRIPE_DELAYED, &sh->state); in r5l_write_stripe()
1041 atomic_inc(&sh->count); in r5l_write_stripe()
1049 r5l_add_no_space_stripe(log, sh); in r5l_write_stripe()
1052 ret = r5l_log_stripe(log, sh, data_pages, parity_pages); in r5l_write_stripe()
1055 list_add_tail(&sh->log_list, in r5l_write_stripe()
1066 sh->log_start == MaxSector) { in r5l_write_stripe()
1067 r5l_add_no_space_stripe(log, sh); in r5l_write_stripe()
1071 if (sh->log_start == log->last_checkpoint) in r5l_write_stripe()
1074 r5l_add_no_space_stripe(log, sh); in r5l_write_stripe()
1076 ret = r5l_log_stripe(log, sh, data_pages, parity_pages); in r5l_write_stripe()
1079 list_add_tail(&sh->log_list, in r5l_write_stripe()
1136 struct stripe_head *sh; in r5l_run_no_space_stripes() local
1140 sh = list_first_entry(&log->no_space_stripes, in r5l_run_no_space_stripes()
1142 list_del_init(&sh->log_list); in r5l_run_no_space_stripes()
1143 set_bit(STRIPE_HANDLE, &sh->state); in r5l_run_no_space_stripes()
1144 raid5_release_stripe(sh); in r5l_run_no_space_stripes()
1156 struct stripe_head *sh; in r5c_calculate_new_cp() local
1170 sh = list_first_entry(&conf->log->stripe_in_journal_list, in r5c_calculate_new_cp()
1172 new_cp = sh->log_start; in r5c_calculate_new_cp()
1187 struct stripe_head *sh; in r5l_run_no_mem_stripe() local
1192 sh = list_first_entry(&log->no_mem_stripes, in r5l_run_no_mem_stripe()
1194 list_del_init(&sh->log_list); in r5l_run_no_mem_stripe()
1195 set_bit(STRIPE_HANDLE, &sh->state); in r5l_run_no_mem_stripe()
1196 raid5_release_stripe(sh); in r5l_run_no_mem_stripe()
1246 void r5l_stripe_write_finished(struct stripe_head *sh) in r5l_stripe_write_finished() argument
1250 io = sh->log_io; in r5l_stripe_write_finished()
1251 sh->log_io = NULL; in r5l_stripe_write_finished()
1366 static void r5c_flush_stripe(struct r5conf *conf, struct stripe_head *sh) in r5c_flush_stripe() argument
1368 BUG_ON(list_empty(&sh->lru)); in r5c_flush_stripe()
1369 BUG_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_flush_stripe()
1370 BUG_ON(test_bit(STRIPE_HANDLE, &sh->state)); in r5c_flush_stripe()
1376 BUG_ON(test_bit(STRIPE_ON_RELEASE_LIST, &sh->state)); in r5c_flush_stripe()
1379 list_del_init(&sh->lru); in r5c_flush_stripe()
1380 atomic_inc(&sh->count); in r5c_flush_stripe()
1382 set_bit(STRIPE_HANDLE, &sh->state); in r5c_flush_stripe()
1384 r5c_make_stripe_write_out(sh); in r5c_flush_stripe()
1386 if (test_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state)) in r5c_flush_stripe()
1390 raid5_release_stripe(sh); in r5c_flush_stripe()
1402 struct stripe_head *sh, *next; in r5c_flush_cache() local
1409 list_for_each_entry_safe(sh, next, &conf->r5c_full_stripe_list, lru) { in r5c_flush_cache()
1410 r5c_flush_stripe(conf, sh); in r5c_flush_cache()
1416 list_for_each_entry_safe(sh, next, in r5c_flush_cache()
1418 r5c_flush_stripe(conf, sh); in r5c_flush_cache()
1427 struct stripe_head *sh; in r5c_do_reclaim() local
1472 list_for_each_entry(sh, &log->stripe_in_journal_list, r5c) { in r5c_do_reclaim()
1481 if (!list_empty(&sh->lru) && in r5c_do_reclaim()
1482 !test_bit(STRIPE_HANDLE, &sh->state) && in r5c_do_reclaim()
1483 atomic_read(&sh->count) == 0) { in r5c_do_reclaim()
1484 r5c_flush_stripe(conf, sh); in r5c_do_reclaim()
1813 struct stripe_head *sh, in r5l_recovery_load_data() argument
1824 &dd_idx, sh); in r5l_recovery_load_data()
1825 r5l_recovery_read_page(log, ctx, sh->dev[dd_idx].page, log_offset); in r5l_recovery_load_data()
1826 sh->dev[dd_idx].log_checksum = in r5l_recovery_load_data()
1830 set_bit(R5_Wantwrite, &sh->dev[dd_idx].flags); in r5l_recovery_load_data()
1831 set_bit(STRIPE_R5C_CACHING, &sh->state); in r5l_recovery_load_data()
1835 struct stripe_head *sh, in r5l_recovery_load_parity() argument
1844 r5l_recovery_read_page(log, ctx, sh->dev[sh->pd_idx].page, log_offset); in r5l_recovery_load_parity()
1845 sh->dev[sh->pd_idx].log_checksum = in r5l_recovery_load_parity()
1847 set_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags); in r5l_recovery_load_parity()
1849 if (sh->qd_idx >= 0) { in r5l_recovery_load_parity()
1851 log, ctx, sh->dev[sh->qd_idx].page, in r5l_recovery_load_parity()
1853 sh->dev[sh->qd_idx].log_checksum = in r5l_recovery_load_parity()
1855 set_bit(R5_Wantwrite, &sh->dev[sh->qd_idx].flags); in r5l_recovery_load_parity()
1857 clear_bit(STRIPE_R5C_CACHING, &sh->state); in r5l_recovery_load_parity()
1860 static void r5l_recovery_reset_stripe(struct stripe_head *sh) in r5l_recovery_reset_stripe() argument
1864 sh->state = 0; in r5l_recovery_reset_stripe()
1865 sh->log_start = MaxSector; in r5l_recovery_reset_stripe()
1866 for (i = sh->disks; i--; ) in r5l_recovery_reset_stripe()
1867 sh->dev[i].flags = 0; in r5l_recovery_reset_stripe()
1872 struct stripe_head *sh, in r5l_recovery_replay_one_stripe() argument
1879 for (disk_index = 0; disk_index < sh->disks; disk_index++) { in r5l_recovery_replay_one_stripe()
1880 if (!test_bit(R5_Wantwrite, &sh->dev[disk_index].flags)) in r5l_recovery_replay_one_stripe()
1882 if (disk_index == sh->qd_idx || disk_index == sh->pd_idx) in r5l_recovery_replay_one_stripe()
1895 for (disk_index = 0; disk_index < sh->disks; disk_index++) { in r5l_recovery_replay_one_stripe()
1896 if (!test_bit(R5_Wantwrite, &sh->dev[disk_index].flags)) in r5l_recovery_replay_one_stripe()
1905 sync_page_io(rdev, sh->sector, PAGE_SIZE, in r5l_recovery_replay_one_stripe()
1906 sh->dev[disk_index].page, REQ_OP_WRITE, 0, in r5l_recovery_replay_one_stripe()
1915 sync_page_io(rrdev, sh->sector, PAGE_SIZE, in r5l_recovery_replay_one_stripe()
1916 sh->dev[disk_index].page, REQ_OP_WRITE, 0, in r5l_recovery_replay_one_stripe()
1925 r5l_recovery_reset_stripe(sh); in r5l_recovery_replay_one_stripe()
1934 struct stripe_head *sh; in r5c_recovery_alloc_stripe() local
1936 sh = raid5_get_active_stripe(conf, stripe_sect, 0, noblock, 0); in r5c_recovery_alloc_stripe()
1937 if (!sh) in r5c_recovery_alloc_stripe()
1940 r5l_recovery_reset_stripe(sh); in r5c_recovery_alloc_stripe()
1942 return sh; in r5c_recovery_alloc_stripe()
1948 struct stripe_head *sh; in r5c_recovery_lookup_stripe() local
1950 list_for_each_entry(sh, list, lru) in r5c_recovery_lookup_stripe()
1951 if (sh->sector == sect) in r5c_recovery_lookup_stripe()
1952 return sh; in r5c_recovery_lookup_stripe()
1960 struct stripe_head *sh, *next; in r5c_recovery_drop_stripes() local
1962 list_for_each_entry_safe(sh, next, cached_stripe_list, lru) { in r5c_recovery_drop_stripes()
1963 r5l_recovery_reset_stripe(sh); in r5c_recovery_drop_stripes()
1964 list_del_init(&sh->lru); in r5c_recovery_drop_stripes()
1965 raid5_release_stripe(sh); in r5c_recovery_drop_stripes()
1973 struct stripe_head *sh, *next; in r5c_recovery_replay_stripes() local
1975 list_for_each_entry_safe(sh, next, cached_stripe_list, lru) in r5c_recovery_replay_stripes()
1976 if (!test_bit(STRIPE_R5C_CACHING, &sh->state)) { in r5c_recovery_replay_stripes()
1977 r5l_recovery_replay_one_stripe(sh->raid_conf, sh, ctx); in r5c_recovery_replay_stripes()
1978 list_del_init(&sh->lru); in r5c_recovery_replay_stripes()
1979 raid5_release_stripe(sh); in r5c_recovery_replay_stripes()
2090 struct stripe_head *sh; in r5c_recovery_analyze_meta_block() local
2120 sh = r5c_recovery_lookup_stripe(cached_stripe_list, in r5c_recovery_analyze_meta_block()
2122 if (sh) { in r5c_recovery_analyze_meta_block()
2123 WARN_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_recovery_analyze_meta_block()
2124 r5l_recovery_reset_stripe(sh); in r5c_recovery_analyze_meta_block()
2125 list_del_init(&sh->lru); in r5c_recovery_analyze_meta_block()
2126 raid5_release_stripe(sh); in r5c_recovery_analyze_meta_block()
2142 sh = r5c_recovery_lookup_stripe(cached_stripe_list, in r5c_recovery_analyze_meta_block()
2145 if (!sh) { in r5c_recovery_analyze_meta_block()
2146 sh = r5c_recovery_alloc_stripe(conf, stripe_sect, 1); in r5c_recovery_analyze_meta_block()
2151 if (!sh) { in r5c_recovery_analyze_meta_block()
2154 sh = r5c_recovery_alloc_stripe( in r5c_recovery_analyze_meta_block()
2157 if (!sh) { in r5c_recovery_analyze_meta_block()
2172 sh = r5c_recovery_alloc_stripe( in r5c_recovery_analyze_meta_block()
2175 if (!sh) { in r5c_recovery_analyze_meta_block()
2180 list_add_tail(&sh->lru, cached_stripe_list); in r5c_recovery_analyze_meta_block()
2184 if (!test_bit(STRIPE_R5C_CACHING, &sh->state) && in r5c_recovery_analyze_meta_block()
2185 test_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags)) { in r5c_recovery_analyze_meta_block()
2186 r5l_recovery_replay_one_stripe(conf, sh, ctx); in r5c_recovery_analyze_meta_block()
2187 list_move_tail(&sh->lru, cached_stripe_list); in r5c_recovery_analyze_meta_block()
2189 r5l_recovery_load_data(log, sh, ctx, payload, in r5c_recovery_analyze_meta_block()
2192 r5l_recovery_load_parity(log, sh, ctx, payload, in r5c_recovery_analyze_meta_block()
2213 struct stripe_head *sh) in r5c_recovery_load_one_stripe() argument
2218 for (i = sh->disks; i--; ) { in r5c_recovery_load_one_stripe()
2219 dev = sh->dev + i; in r5c_recovery_load_one_stripe()
2246 struct stripe_head *sh; in r5c_recovery_flush_log() local
2275 list_for_each_entry(sh, &ctx->cached_list, lru) { in r5c_recovery_flush_log()
2276 WARN_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_recovery_flush_log()
2277 r5c_recovery_load_one_stripe(log, sh); in r5c_recovery_flush_log()
2357 struct stripe_head *sh; in r5c_recovery_rewrite_data_only_stripes() local
2371 list_for_each_entry(sh, &ctx->cached_list, lru) { in r5c_recovery_rewrite_data_only_stripes()
2377 WARN_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_recovery_rewrite_data_only_stripes()
2384 for (i = sh->disks; i--; ) { in r5c_recovery_rewrite_data_only_stripes()
2385 struct r5dev *dev = &sh->dev[i]; in r5c_recovery_rewrite_data_only_stripes()
2395 raid5_compute_blocknr(sh, i, 0)); in r5c_recovery_rewrite_data_only_stripes()
2415 sh->log_start = ctx->pos; in r5c_recovery_rewrite_data_only_stripes()
2416 list_add_tail(&sh->r5c, &log->stripe_in_journal_list); in r5c_recovery_rewrite_data_only_stripes()
2420 next_checkpoint = sh->log_start; in r5c_recovery_rewrite_data_only_stripes()
2432 struct stripe_head *sh, *next; in r5c_recovery_flush_data_only_stripes() local
2439 list_for_each_entry_safe(sh, next, &ctx->cached_list, lru) { in r5c_recovery_flush_data_only_stripes()
2440 r5c_make_stripe_write_out(sh); in r5c_recovery_flush_data_only_stripes()
2441 set_bit(STRIPE_HANDLE, &sh->state); in r5c_recovery_flush_data_only_stripes()
2442 list_del_init(&sh->lru); in r5c_recovery_flush_data_only_stripes()
2443 raid5_release_stripe(sh); in r5c_recovery_flush_data_only_stripes()
2635 struct stripe_head *sh, in r5c_try_caching_write() argument
2650 if (!test_bit(STRIPE_R5C_CACHING, &sh->state)) { in r5c_try_caching_write()
2668 set_bit(STRIPE_R5C_CACHING, &sh->state); in r5c_try_caching_write()
2679 if (s->failed || test_bit(STRIPE_SYNCING, &sh->state)) { in r5c_try_caching_write()
2680 r5c_make_stripe_write_out(sh); in r5c_try_caching_write()
2685 dev = &sh->dev[i]; in r5c_try_caching_write()
2689 r5c_make_stripe_write_out(sh); in r5c_try_caching_write()
2695 if (!test_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state) && in r5c_try_caching_write()
2696 !test_bit(STRIPE_R5C_FULL_STRIPE, &sh->state)) { in r5c_try_caching_write()
2697 tree_index = r5c_tree_index(conf, sh->sector); in r5c_try_caching_write()
2718 r5c_make_stripe_write_out(sh); in r5c_try_caching_write()
2728 set_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state); in r5c_try_caching_write()
2733 dev = &sh->dev[i]; in r5c_try_caching_write()
2749 set_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5c_try_caching_write()
2758 void r5c_release_extra_page(struct stripe_head *sh) in r5c_release_extra_page() argument
2760 struct r5conf *conf = sh->raid_conf; in r5c_release_extra_page()
2765 sh->dev[0].orig_page == conf->disks[0].extra_page; in r5c_release_extra_page()
2767 for (i = sh->disks; i--; ) in r5c_release_extra_page()
2768 if (sh->dev[i].page != sh->dev[i].orig_page) { in r5c_release_extra_page()
2769 struct page *p = sh->dev[i].orig_page; in r5c_release_extra_page()
2771 sh->dev[i].orig_page = sh->dev[i].page; in r5c_release_extra_page()
2772 clear_bit(R5_OrigPageUPTDODATE, &sh->dev[i].flags); in r5c_release_extra_page()
2784 void r5c_use_extra_page(struct stripe_head *sh) in r5c_use_extra_page() argument
2786 struct r5conf *conf = sh->raid_conf; in r5c_use_extra_page()
2790 for (i = sh->disks; i--; ) { in r5c_use_extra_page()
2791 dev = &sh->dev[i]; in r5c_use_extra_page()
2803 struct stripe_head *sh, in r5c_finish_stripe_write_out() argument
2813 if (!log || !test_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags)) in r5c_finish_stripe_write_out()
2816 WARN_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_finish_stripe_write_out()
2817 clear_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags); in r5c_finish_stripe_write_out()
2822 for (i = sh->disks; i--; ) { in r5c_finish_stripe_write_out()
2823 clear_bit(R5_InJournal, &sh->dev[i].flags); in r5c_finish_stripe_write_out()
2824 if (test_and_clear_bit(R5_Overlap, &sh->dev[i].flags)) in r5c_finish_stripe_write_out()
2834 if (test_and_clear_bit(STRIPE_FULL_WRITE, &sh->state)) in r5c_finish_stripe_write_out()
2842 list_del_init(&sh->r5c); in r5c_finish_stripe_write_out()
2844 sh->log_start = MaxSector; in r5c_finish_stripe_write_out()
2850 if (test_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state) || in r5c_finish_stripe_write_out()
2851 test_bit(STRIPE_R5C_FULL_STRIPE, &sh->state)) { in r5c_finish_stripe_write_out()
2852 tree_index = r5c_tree_index(conf, sh->sector); in r5c_finish_stripe_write_out()
2869 if (test_and_clear_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state)) { in r5c_finish_stripe_write_out()
2875 if (test_and_clear_bit(STRIPE_R5C_FULL_STRIPE, &sh->state)) { in r5c_finish_stripe_write_out()
2881 r5l_append_flush_payload(log, sh->sector); in r5c_finish_stripe_write_out()
2883 if (test_bit(STRIPE_SYNC_REQUESTED, &sh->state)) in r5c_finish_stripe_write_out()
2884 set_bit(STRIPE_HANDLE, &sh->state); in r5c_finish_stripe_write_out()
2887 int r5c_cache_data(struct r5l_log *log, struct stripe_head *sh) in r5c_cache_data() argument
2889 struct r5conf *conf = sh->raid_conf; in r5c_cache_data()
2897 for (i = 0; i < sh->disks; i++) { in r5c_cache_data()
2900 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags)) in r5c_cache_data()
2902 addr = kmap_atomic(sh->dev[i].page); in r5c_cache_data()
2903 sh->dev[i].log_checksum = crc32c_le(log->uuid_checksum, in r5c_cache_data()
2914 clear_bit(STRIPE_DELAYED, &sh->state); in r5c_cache_data()
2915 atomic_inc(&sh->count); in r5c_cache_data()
2922 sh->log_start == MaxSector) in r5c_cache_data()
2923 r5l_add_no_space_stripe(log, sh); in r5c_cache_data()
2925 if (sh->log_start == log->last_checkpoint) in r5c_cache_data()
2928 r5l_add_no_space_stripe(log, sh); in r5c_cache_data()
2930 ret = r5l_log_stripe(log, sh, pages, 0); in r5c_cache_data()
2933 list_add_tail(&sh->log_list, &log->no_mem_stripes); in r5c_cache_data()