• Home
  • Raw
  • Download

Lines Matching full:sh

150 	/* all stripes in r5cache, in the order of seq at sh->log_start */
202 * sect: align_bi->bi_iter.bi_sector or sh->sector
319 struct stripe_head *sh, int disks) in r5c_handle_cached_data_endio() argument
323 for (i = sh->disks; i--; ) { in r5c_handle_cached_data_endio()
324 if (sh->dev[i].written) { in r5c_handle_cached_data_endio()
325 set_bit(R5_UPTODATE, &sh->dev[i].flags); in r5c_handle_cached_data_endio()
326 r5c_return_dev_pending_writes(conf, &sh->dev[i]); in r5c_handle_cached_data_endio()
327 md_bitmap_endwrite(conf->mddev->bitmap, sh->sector, in r5c_handle_cached_data_endio()
329 !test_bit(STRIPE_DEGRADED, &sh->state), in r5c_handle_cached_data_endio()
460 void r5c_make_stripe_write_out(struct stripe_head *sh) in r5c_make_stripe_write_out() argument
462 struct r5conf *conf = sh->raid_conf; in r5c_make_stripe_write_out()
467 WARN_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_make_stripe_write_out()
468 clear_bit(STRIPE_R5C_CACHING, &sh->state); in r5c_make_stripe_write_out()
470 if (!test_and_set_bit(STRIPE_PREREAD_ACTIVE, &sh->state)) in r5c_make_stripe_write_out()
474 static void r5c_handle_data_cached(struct stripe_head *sh) in r5c_handle_data_cached() argument
478 for (i = sh->disks; i--; ) in r5c_handle_data_cached()
479 if (test_and_clear_bit(R5_Wantwrite, &sh->dev[i].flags)) { in r5c_handle_data_cached()
480 set_bit(R5_InJournal, &sh->dev[i].flags); in r5c_handle_data_cached()
481 clear_bit(R5_LOCKED, &sh->dev[i].flags); in r5c_handle_data_cached()
483 clear_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5c_handle_data_cached()
490 static void r5c_handle_parity_cached(struct stripe_head *sh) in r5c_handle_parity_cached() argument
494 for (i = sh->disks; i--; ) in r5c_handle_parity_cached()
495 if (test_bit(R5_InJournal, &sh->dev[i].flags)) in r5c_handle_parity_cached()
496 set_bit(R5_Wantwrite, &sh->dev[i].flags); in r5c_handle_parity_cached()
503 static void r5c_finish_cache_stripe(struct stripe_head *sh) in r5c_finish_cache_stripe() argument
505 struct r5l_log *log = sh->raid_conf->log; in r5c_finish_cache_stripe()
508 BUG_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_finish_cache_stripe()
515 set_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags); in r5c_finish_cache_stripe()
516 } else if (test_bit(STRIPE_R5C_CACHING, &sh->state)) { in r5c_finish_cache_stripe()
517 r5c_handle_data_cached(sh); in r5c_finish_cache_stripe()
519 r5c_handle_parity_cached(sh); in r5c_finish_cache_stripe()
520 set_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags); in r5c_finish_cache_stripe()
526 struct stripe_head *sh, *next; in r5l_io_run_stripes() local
528 list_for_each_entry_safe(sh, next, &io->stripe_list, log_list) { in r5l_io_run_stripes()
529 list_del_init(&sh->log_list); in r5l_io_run_stripes()
531 r5c_finish_cache_stripe(sh); in r5l_io_run_stripes()
533 set_bit(STRIPE_HANDLE, &sh->state); in r5l_io_run_stripes()
534 raid5_release_stripe(sh); in r5l_io_run_stripes()
913 static int r5l_log_stripe(struct r5l_log *log, struct stripe_head *sh, in r5l_log_stripe() argument
933 if (test_and_clear_bit(STRIPE_R5C_PREFLUSH, &sh->state)) in r5l_log_stripe()
936 for (i = 0; i < sh->disks; i++) { in r5l_log_stripe()
937 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags) || in r5l_log_stripe()
938 test_bit(R5_InJournal, &sh->dev[i].flags)) in r5l_log_stripe()
940 if (i == sh->pd_idx || i == sh->qd_idx) in r5l_log_stripe()
942 if (test_bit(R5_WantFUA, &sh->dev[i].flags) && in r5l_log_stripe()
952 raid5_compute_blocknr(sh, i, 0), in r5l_log_stripe()
953 sh->dev[i].log_checksum, 0, false); in r5l_log_stripe()
954 r5l_append_payload_page(log, sh->dev[i].page); in r5l_log_stripe()
959 sh->sector, sh->dev[sh->pd_idx].log_checksum, in r5l_log_stripe()
960 sh->dev[sh->qd_idx].log_checksum, true); in r5l_log_stripe()
961 r5l_append_payload_page(log, sh->dev[sh->pd_idx].page); in r5l_log_stripe()
962 r5l_append_payload_page(log, sh->dev[sh->qd_idx].page); in r5l_log_stripe()
965 sh->sector, sh->dev[sh->pd_idx].log_checksum, in r5l_log_stripe()
967 r5l_append_payload_page(log, sh->dev[sh->pd_idx].page); in r5l_log_stripe()
971 list_add_tail(&sh->log_list, &io->stripe_list); in r5l_log_stripe()
973 sh->log_io = io; in r5l_log_stripe()
978 if (sh->log_start == MaxSector) { in r5l_log_stripe()
979 BUG_ON(!list_empty(&sh->r5c)); in r5l_log_stripe()
980 sh->log_start = io->log_start; in r5l_log_stripe()
982 list_add_tail(&sh->r5c, in r5l_log_stripe()
992 struct stripe_head *sh) in r5l_add_no_space_stripe() argument
995 list_add_tail(&sh->log_list, &log->no_space_stripes); in r5l_add_no_space_stripe()
1003 int r5l_write_stripe(struct r5l_log *log, struct stripe_head *sh) in r5l_write_stripe() argument
1005 struct r5conf *conf = sh->raid_conf; in r5l_write_stripe()
1016 if (sh->log_io || !test_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags) || in r5l_write_stripe()
1017 test_bit(STRIPE_SYNCING, &sh->state)) { in r5l_write_stripe()
1019 clear_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5l_write_stripe()
1023 WARN_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5l_write_stripe()
1025 for (i = 0; i < sh->disks; i++) { in r5l_write_stripe()
1028 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags) || in r5l_write_stripe()
1029 test_bit(R5_InJournal, &sh->dev[i].flags)) in r5l_write_stripe()
1034 if (test_bit(STRIPE_LOG_TRAPPED, &sh->state)) in r5l_write_stripe()
1036 addr = kmap_atomic(sh->dev[i].page); in r5l_write_stripe()
1037 sh->dev[i].log_checksum = crc32c_le(log->uuid_checksum, in r5l_write_stripe()
1041 parity_pages = 1 + !!(sh->qd_idx >= 0); in r5l_write_stripe()
1044 set_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5l_write_stripe()
1049 clear_bit(STRIPE_DELAYED, &sh->state); in r5l_write_stripe()
1050 atomic_inc(&sh->count); in r5l_write_stripe()
1058 r5l_add_no_space_stripe(log, sh); in r5l_write_stripe()
1061 ret = r5l_log_stripe(log, sh, data_pages, parity_pages); in r5l_write_stripe()
1064 list_add_tail(&sh->log_list, in r5l_write_stripe()
1072 * not in cache yet (sh->log_start == MaxSector). in r5l_write_stripe()
1075 sh->log_start == MaxSector) { in r5l_write_stripe()
1076 r5l_add_no_space_stripe(log, sh); in r5l_write_stripe()
1080 if (sh->log_start == log->last_checkpoint) in r5l_write_stripe()
1083 r5l_add_no_space_stripe(log, sh); in r5l_write_stripe()
1085 ret = r5l_log_stripe(log, sh, data_pages, parity_pages); in r5l_write_stripe()
1088 list_add_tail(&sh->log_list, in r5l_write_stripe()
1145 struct stripe_head *sh; in r5l_run_no_space_stripes() local
1149 sh = list_first_entry(&log->no_space_stripes, in r5l_run_no_space_stripes()
1151 list_del_init(&sh->log_list); in r5l_run_no_space_stripes()
1152 set_bit(STRIPE_HANDLE, &sh->state); in r5l_run_no_space_stripes()
1153 raid5_release_stripe(sh); in r5l_run_no_space_stripes()
1161 * for write back, returns log_start of first sh in stripe_in_journal_list
1165 struct stripe_head *sh; in r5c_calculate_new_cp() local
1179 sh = list_first_entry(&conf->log->stripe_in_journal_list, in r5c_calculate_new_cp()
1181 new_cp = sh->log_start; in r5c_calculate_new_cp()
1196 struct stripe_head *sh; in r5l_run_no_mem_stripe() local
1201 sh = list_first_entry(&log->no_mem_stripes, in r5l_run_no_mem_stripe()
1203 list_del_init(&sh->log_list); in r5l_run_no_mem_stripe()
1204 set_bit(STRIPE_HANDLE, &sh->state); in r5l_run_no_mem_stripe()
1205 raid5_release_stripe(sh); in r5l_run_no_mem_stripe()
1255 void r5l_stripe_write_finished(struct stripe_head *sh) in r5l_stripe_write_finished() argument
1259 io = sh->log_io; in r5l_stripe_write_finished()
1260 sh->log_io = NULL; in r5l_stripe_write_finished()
1375 static void r5c_flush_stripe(struct r5conf *conf, struct stripe_head *sh) in r5c_flush_stripe() argument
1377 BUG_ON(list_empty(&sh->lru)); in r5c_flush_stripe()
1378 BUG_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_flush_stripe()
1379 BUG_ON(test_bit(STRIPE_HANDLE, &sh->state)); in r5c_flush_stripe()
1385 BUG_ON(test_bit(STRIPE_ON_RELEASE_LIST, &sh->state)); in r5c_flush_stripe()
1388 list_del_init(&sh->lru); in r5c_flush_stripe()
1389 atomic_inc(&sh->count); in r5c_flush_stripe()
1391 set_bit(STRIPE_HANDLE, &sh->state); in r5c_flush_stripe()
1393 r5c_make_stripe_write_out(sh); in r5c_flush_stripe()
1395 if (test_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state)) in r5c_flush_stripe()
1399 raid5_release_stripe(sh); in r5c_flush_stripe()
1411 struct stripe_head *sh, *next; in r5c_flush_cache() local
1418 list_for_each_entry_safe(sh, next, &conf->r5c_full_stripe_list, lru) { in r5c_flush_cache()
1419 r5c_flush_stripe(conf, sh); in r5c_flush_cache()
1425 list_for_each_entry_safe(sh, next, in r5c_flush_cache()
1427 r5c_flush_stripe(conf, sh); in r5c_flush_cache()
1436 struct stripe_head *sh; in r5c_do_reclaim() local
1481 list_for_each_entry(sh, &log->stripe_in_journal_list, r5c) { in r5c_do_reclaim()
1490 if (!list_empty(&sh->lru) && in r5c_do_reclaim()
1491 !test_bit(STRIPE_HANDLE, &sh->state) && in r5c_do_reclaim()
1492 atomic_read(&sh->count) == 0) { in r5c_do_reclaim()
1493 r5c_flush_stripe(conf, sh); in r5c_do_reclaim()
1822 struct stripe_head *sh, in r5l_recovery_load_data() argument
1833 &dd_idx, sh); in r5l_recovery_load_data()
1834 r5l_recovery_read_page(log, ctx, sh->dev[dd_idx].page, log_offset); in r5l_recovery_load_data()
1835 sh->dev[dd_idx].log_checksum = in r5l_recovery_load_data()
1839 set_bit(R5_Wantwrite, &sh->dev[dd_idx].flags); in r5l_recovery_load_data()
1840 set_bit(STRIPE_R5C_CACHING, &sh->state); in r5l_recovery_load_data()
1844 struct stripe_head *sh, in r5l_recovery_load_parity() argument
1853 r5l_recovery_read_page(log, ctx, sh->dev[sh->pd_idx].page, log_offset); in r5l_recovery_load_parity()
1854 sh->dev[sh->pd_idx].log_checksum = in r5l_recovery_load_parity()
1856 set_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags); in r5l_recovery_load_parity()
1858 if (sh->qd_idx >= 0) { in r5l_recovery_load_parity()
1860 log, ctx, sh->dev[sh->qd_idx].page, in r5l_recovery_load_parity()
1862 sh->dev[sh->qd_idx].log_checksum = in r5l_recovery_load_parity()
1864 set_bit(R5_Wantwrite, &sh->dev[sh->qd_idx].flags); in r5l_recovery_load_parity()
1866 clear_bit(STRIPE_R5C_CACHING, &sh->state); in r5l_recovery_load_parity()
1869 static void r5l_recovery_reset_stripe(struct stripe_head *sh) in r5l_recovery_reset_stripe() argument
1873 sh->state = 0; in r5l_recovery_reset_stripe()
1874 sh->log_start = MaxSector; in r5l_recovery_reset_stripe()
1875 for (i = sh->disks; i--; ) in r5l_recovery_reset_stripe()
1876 sh->dev[i].flags = 0; in r5l_recovery_reset_stripe()
1881 struct stripe_head *sh, in r5l_recovery_replay_one_stripe() argument
1888 for (disk_index = 0; disk_index < sh->disks; disk_index++) { in r5l_recovery_replay_one_stripe()
1889 if (!test_bit(R5_Wantwrite, &sh->dev[disk_index].flags)) in r5l_recovery_replay_one_stripe()
1891 if (disk_index == sh->qd_idx || disk_index == sh->pd_idx) in r5l_recovery_replay_one_stripe()
1904 for (disk_index = 0; disk_index < sh->disks; disk_index++) { in r5l_recovery_replay_one_stripe()
1905 if (!test_bit(R5_Wantwrite, &sh->dev[disk_index].flags)) in r5l_recovery_replay_one_stripe()
1914 sync_page_io(rdev, sh->sector, PAGE_SIZE, in r5l_recovery_replay_one_stripe()
1915 sh->dev[disk_index].page, REQ_OP_WRITE, 0, in r5l_recovery_replay_one_stripe()
1924 sync_page_io(rrdev, sh->sector, PAGE_SIZE, in r5l_recovery_replay_one_stripe()
1925 sh->dev[disk_index].page, REQ_OP_WRITE, 0, in r5l_recovery_replay_one_stripe()
1934 r5l_recovery_reset_stripe(sh); in r5l_recovery_replay_one_stripe()
1943 struct stripe_head *sh; in r5c_recovery_alloc_stripe() local
1945 sh = raid5_get_active_stripe(conf, stripe_sect, 0, noblock, 0); in r5c_recovery_alloc_stripe()
1946 if (!sh) in r5c_recovery_alloc_stripe()
1949 r5l_recovery_reset_stripe(sh); in r5c_recovery_alloc_stripe()
1951 return sh; in r5c_recovery_alloc_stripe()
1957 struct stripe_head *sh; in r5c_recovery_lookup_stripe() local
1959 list_for_each_entry(sh, list, lru) in r5c_recovery_lookup_stripe()
1960 if (sh->sector == sect) in r5c_recovery_lookup_stripe()
1961 return sh; in r5c_recovery_lookup_stripe()
1969 struct stripe_head *sh, *next; in r5c_recovery_drop_stripes() local
1971 list_for_each_entry_safe(sh, next, cached_stripe_list, lru) { in r5c_recovery_drop_stripes()
1972 r5l_recovery_reset_stripe(sh); in r5c_recovery_drop_stripes()
1973 list_del_init(&sh->lru); in r5c_recovery_drop_stripes()
1974 raid5_release_stripe(sh); in r5c_recovery_drop_stripes()
1982 struct stripe_head *sh, *next; in r5c_recovery_replay_stripes() local
1984 list_for_each_entry_safe(sh, next, cached_stripe_list, lru) in r5c_recovery_replay_stripes()
1985 if (!test_bit(STRIPE_R5C_CACHING, &sh->state)) { in r5c_recovery_replay_stripes()
1986 r5l_recovery_replay_one_stripe(sh->raid_conf, sh, ctx); in r5c_recovery_replay_stripes()
1987 list_del_init(&sh->lru); in r5c_recovery_replay_stripes()
1988 raid5_release_stripe(sh); in r5c_recovery_replay_stripes()
2099 struct stripe_head *sh; in r5c_recovery_analyze_meta_block() local
2129 sh = r5c_recovery_lookup_stripe(cached_stripe_list, in r5c_recovery_analyze_meta_block()
2131 if (sh) { in r5c_recovery_analyze_meta_block()
2132 WARN_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_recovery_analyze_meta_block()
2133 r5l_recovery_reset_stripe(sh); in r5c_recovery_analyze_meta_block()
2134 list_del_init(&sh->lru); in r5c_recovery_analyze_meta_block()
2135 raid5_release_stripe(sh); in r5c_recovery_analyze_meta_block()
2151 sh = r5c_recovery_lookup_stripe(cached_stripe_list, in r5c_recovery_analyze_meta_block()
2154 if (!sh) { in r5c_recovery_analyze_meta_block()
2155 sh = r5c_recovery_alloc_stripe(conf, stripe_sect, 1); in r5c_recovery_analyze_meta_block()
2160 if (!sh) { in r5c_recovery_analyze_meta_block()
2163 sh = r5c_recovery_alloc_stripe( in r5c_recovery_analyze_meta_block()
2166 if (!sh) { in r5c_recovery_analyze_meta_block()
2181 sh = r5c_recovery_alloc_stripe( in r5c_recovery_analyze_meta_block()
2184 if (!sh) { in r5c_recovery_analyze_meta_block()
2189 list_add_tail(&sh->lru, cached_stripe_list); in r5c_recovery_analyze_meta_block()
2193 if (!test_bit(STRIPE_R5C_CACHING, &sh->state) && in r5c_recovery_analyze_meta_block()
2194 test_bit(R5_Wantwrite, &sh->dev[sh->pd_idx].flags)) { in r5c_recovery_analyze_meta_block()
2195 r5l_recovery_replay_one_stripe(conf, sh, ctx); in r5c_recovery_analyze_meta_block()
2196 list_move_tail(&sh->lru, cached_stripe_list); in r5c_recovery_analyze_meta_block()
2198 r5l_recovery_load_data(log, sh, ctx, payload, in r5c_recovery_analyze_meta_block()
2201 r5l_recovery_load_parity(log, sh, ctx, payload, in r5c_recovery_analyze_meta_block()
2222 struct stripe_head *sh) in r5c_recovery_load_one_stripe() argument
2227 for (i = sh->disks; i--; ) { in r5c_recovery_load_one_stripe()
2228 dev = sh->dev + i; in r5c_recovery_load_one_stripe()
2255 struct stripe_head *sh; in r5c_recovery_flush_log() local
2284 list_for_each_entry(sh, &ctx->cached_list, lru) { in r5c_recovery_flush_log()
2285 WARN_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_recovery_flush_log()
2286 r5c_recovery_load_one_stripe(log, sh); in r5c_recovery_flush_log()
2366 struct stripe_head *sh; in r5c_recovery_rewrite_data_only_stripes() local
2380 list_for_each_entry(sh, &ctx->cached_list, lru) { in r5c_recovery_rewrite_data_only_stripes()
2386 WARN_ON(!test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_recovery_rewrite_data_only_stripes()
2393 for (i = sh->disks; i--; ) { in r5c_recovery_rewrite_data_only_stripes()
2394 struct r5dev *dev = &sh->dev[i]; in r5c_recovery_rewrite_data_only_stripes()
2404 raid5_compute_blocknr(sh, i, 0)); in r5c_recovery_rewrite_data_only_stripes()
2424 sh->log_start = ctx->pos; in r5c_recovery_rewrite_data_only_stripes()
2425 list_add_tail(&sh->r5c, &log->stripe_in_journal_list); in r5c_recovery_rewrite_data_only_stripes()
2429 next_checkpoint = sh->log_start; in r5c_recovery_rewrite_data_only_stripes()
2441 struct stripe_head *sh, *next; in r5c_recovery_flush_data_only_stripes() local
2448 list_for_each_entry_safe(sh, next, &ctx->cached_list, lru) { in r5c_recovery_flush_data_only_stripes()
2449 r5c_make_stripe_write_out(sh); in r5c_recovery_flush_data_only_stripes()
2450 set_bit(STRIPE_HANDLE, &sh->state); in r5c_recovery_flush_data_only_stripes()
2451 list_del_init(&sh->lru); in r5c_recovery_flush_data_only_stripes()
2452 raid5_release_stripe(sh); in r5c_recovery_flush_data_only_stripes()
2644 struct stripe_head *sh, in r5c_try_caching_write() argument
2659 if (!test_bit(STRIPE_R5C_CACHING, &sh->state)) { in r5c_try_caching_write()
2677 set_bit(STRIPE_R5C_CACHING, &sh->state); in r5c_try_caching_write()
2688 if (s->failed || test_bit(STRIPE_SYNCING, &sh->state)) { in r5c_try_caching_write()
2689 r5c_make_stripe_write_out(sh); in r5c_try_caching_write()
2694 dev = &sh->dev[i]; in r5c_try_caching_write()
2698 r5c_make_stripe_write_out(sh); in r5c_try_caching_write()
2704 if (!test_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state) && in r5c_try_caching_write()
2705 !test_bit(STRIPE_R5C_FULL_STRIPE, &sh->state)) { in r5c_try_caching_write()
2706 tree_index = r5c_tree_index(conf, sh->sector); in r5c_try_caching_write()
2727 r5c_make_stripe_write_out(sh); in r5c_try_caching_write()
2737 set_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state); in r5c_try_caching_write()
2742 dev = &sh->dev[i]; in r5c_try_caching_write()
2758 set_bit(STRIPE_LOG_TRAPPED, &sh->state); in r5c_try_caching_write()
2767 void r5c_release_extra_page(struct stripe_head *sh) in r5c_release_extra_page() argument
2769 struct r5conf *conf = sh->raid_conf; in r5c_release_extra_page()
2774 sh->dev[0].orig_page == conf->disks[0].extra_page; in r5c_release_extra_page()
2776 for (i = sh->disks; i--; ) in r5c_release_extra_page()
2777 if (sh->dev[i].page != sh->dev[i].orig_page) { in r5c_release_extra_page()
2778 struct page *p = sh->dev[i].orig_page; in r5c_release_extra_page()
2780 sh->dev[i].orig_page = sh->dev[i].page; in r5c_release_extra_page()
2781 clear_bit(R5_OrigPageUPTDODATE, &sh->dev[i].flags); in r5c_release_extra_page()
2793 void r5c_use_extra_page(struct stripe_head *sh) in r5c_use_extra_page() argument
2795 struct r5conf *conf = sh->raid_conf; in r5c_use_extra_page()
2799 for (i = sh->disks; i--; ) { in r5c_use_extra_page()
2800 dev = &sh->dev[i]; in r5c_use_extra_page()
2812 struct stripe_head *sh, in r5c_finish_stripe_write_out() argument
2822 if (!log || !test_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags)) in r5c_finish_stripe_write_out()
2825 WARN_ON(test_bit(STRIPE_R5C_CACHING, &sh->state)); in r5c_finish_stripe_write_out()
2826 clear_bit(R5_InJournal, &sh->dev[sh->pd_idx].flags); in r5c_finish_stripe_write_out()
2831 for (i = sh->disks; i--; ) { in r5c_finish_stripe_write_out()
2832 clear_bit(R5_InJournal, &sh->dev[i].flags); in r5c_finish_stripe_write_out()
2833 if (test_and_clear_bit(R5_Overlap, &sh->dev[i].flags)) in r5c_finish_stripe_write_out()
2843 if (test_and_clear_bit(STRIPE_FULL_WRITE, &sh->state)) in r5c_finish_stripe_write_out()
2851 list_del_init(&sh->r5c); in r5c_finish_stripe_write_out()
2853 sh->log_start = MaxSector; in r5c_finish_stripe_write_out()
2859 if (test_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state) || in r5c_finish_stripe_write_out()
2860 test_bit(STRIPE_R5C_FULL_STRIPE, &sh->state)) { in r5c_finish_stripe_write_out()
2861 tree_index = r5c_tree_index(conf, sh->sector); in r5c_finish_stripe_write_out()
2878 if (test_and_clear_bit(STRIPE_R5C_PARTIAL_STRIPE, &sh->state)) { in r5c_finish_stripe_write_out()
2884 if (test_and_clear_bit(STRIPE_R5C_FULL_STRIPE, &sh->state)) { in r5c_finish_stripe_write_out()
2890 r5l_append_flush_payload(log, sh->sector); in r5c_finish_stripe_write_out()
2892 if (test_bit(STRIPE_SYNC_REQUESTED, &sh->state)) in r5c_finish_stripe_write_out()
2893 set_bit(STRIPE_HANDLE, &sh->state); in r5c_finish_stripe_write_out()
2896 int r5c_cache_data(struct r5l_log *log, struct stripe_head *sh) in r5c_cache_data() argument
2898 struct r5conf *conf = sh->raid_conf; in r5c_cache_data()
2906 for (i = 0; i < sh->disks; i++) { in r5c_cache_data()
2909 if (!test_bit(R5_Wantwrite, &sh->dev[i].flags)) in r5c_cache_data()
2911 addr = kmap_atomic(sh->dev[i].page); in r5c_cache_data()
2912 sh->dev[i].log_checksum = crc32c_le(log->uuid_checksum, in r5c_cache_data()
2923 clear_bit(STRIPE_DELAYED, &sh->state); in r5c_cache_data()
2924 atomic_inc(&sh->count); in r5c_cache_data()
2931 sh->log_start == MaxSector) in r5c_cache_data()
2932 r5l_add_no_space_stripe(log, sh); in r5c_cache_data()
2934 if (sh->log_start == log->last_checkpoint) in r5c_cache_data()
2937 r5l_add_no_space_stripe(log, sh); in r5c_cache_data()
2939 ret = r5l_log_stripe(log, sh, pages, 0); in r5c_cache_data()
2942 list_add_tail(&sh->log_list, &log->no_mem_stripes); in r5c_cache_data()