Lines Matching full:wc
778 static void ocfs2_unlock_folios(struct ocfs2_write_ctxt *wc) in ocfs2_unlock_folios() argument
787 if (wc->w_target_locked) { in ocfs2_unlock_folios()
788 BUG_ON(!wc->w_target_folio); in ocfs2_unlock_folios()
789 for (i = 0; i < wc->w_num_folios; i++) { in ocfs2_unlock_folios()
790 if (wc->w_target_folio == wc->w_folios[i]) { in ocfs2_unlock_folios()
791 wc->w_folios[i] = NULL; in ocfs2_unlock_folios()
795 folio_mark_accessed(wc->w_target_folio); in ocfs2_unlock_folios()
796 folio_put(wc->w_target_folio); in ocfs2_unlock_folios()
798 ocfs2_unlock_and_free_folios(wc->w_folios, wc->w_num_folios); in ocfs2_unlock_folios()
817 struct ocfs2_write_ctxt *wc) in ocfs2_free_write_ctxt() argument
819 ocfs2_free_unwritten_list(inode, &wc->w_unwritten_list); in ocfs2_free_write_ctxt()
820 ocfs2_unlock_folios(wc); in ocfs2_free_write_ctxt()
821 brelse(wc->w_di_bh); in ocfs2_free_write_ctxt()
822 kfree(wc); in ocfs2_free_write_ctxt()
831 struct ocfs2_write_ctxt *wc; in ocfs2_alloc_write_ctxt() local
833 wc = kzalloc(sizeof(struct ocfs2_write_ctxt), GFP_NOFS); in ocfs2_alloc_write_ctxt()
834 if (!wc) in ocfs2_alloc_write_ctxt()
837 wc->w_cpos = pos >> osb->s_clustersize_bits; in ocfs2_alloc_write_ctxt()
838 wc->w_first_new_cpos = UINT_MAX; in ocfs2_alloc_write_ctxt()
840 wc->w_clen = cend - wc->w_cpos + 1; in ocfs2_alloc_write_ctxt()
842 wc->w_di_bh = di_bh; in ocfs2_alloc_write_ctxt()
843 wc->w_type = type; in ocfs2_alloc_write_ctxt()
846 wc->w_large_pages = 1; in ocfs2_alloc_write_ctxt()
848 wc->w_large_pages = 0; in ocfs2_alloc_write_ctxt()
850 ocfs2_init_dealloc_ctxt(&wc->w_dealloc); in ocfs2_alloc_write_ctxt()
851 INIT_LIST_HEAD(&wc->w_unwritten_list); in ocfs2_alloc_write_ctxt()
853 *wcp = wc; in ocfs2_alloc_write_ctxt()
905 struct ocfs2_write_ctxt *wc, in ocfs2_write_failure() argument
912 if (wc->w_target_folio) in ocfs2_write_failure()
913 ocfs2_zero_new_buffers(wc->w_target_folio, from, to); in ocfs2_write_failure()
915 for (i = 0; i < wc->w_num_folios; i++) { in ocfs2_write_failure()
916 struct folio *folio = wc->w_folios[i]; in ocfs2_write_failure()
920 ocfs2_jbd2_inode_add_write(wc->w_handle, inode, in ocfs2_write_failure()
929 struct ocfs2_write_ctxt *wc, struct folio *folio, u32 cpos, in ocfs2_prepare_folio_for_write() argument
946 if (folio == wc->w_target_folio) { in ocfs2_prepare_folio_for_write()
1010 struct ocfs2_write_ctxt *wc, u32 cpos, loff_t user_pos, in ocfs2_grab_folios_for_write() argument
1028 wc->w_num_folios = ocfs2_pages_per_cluster(inode->i_sb); in ocfs2_grab_folios_for_write()
1038 if ((start + wc->w_num_folios) > end_index) in ocfs2_grab_folios_for_write()
1039 wc->w_num_folios = end_index - start; in ocfs2_grab_folios_for_write()
1041 wc->w_num_folios = 1; in ocfs2_grab_folios_for_write()
1046 for(i = 0; i < wc->w_num_folios; i++) { in ocfs2_grab_folios_for_write()
1050 wc->w_type == OCFS2_WRITE_MMAP) { in ocfs2_grab_folios_for_write()
1067 wc->w_folios[i] = mmap_folio; in ocfs2_grab_folios_for_write()
1068 wc->w_target_locked = true; in ocfs2_grab_folios_for_write()
1070 wc->w_type == OCFS2_WRITE_DIRECT) { in ocfs2_grab_folios_for_write()
1072 wc->w_folios[i] = NULL; in ocfs2_grab_folios_for_write()
1075 wc->w_folios[i] = __filemap_get_folio(mapping, index, in ocfs2_grab_folios_for_write()
1078 if (IS_ERR(wc->w_folios[i])) { in ocfs2_grab_folios_for_write()
1079 ret = PTR_ERR(wc->w_folios[i]); in ocfs2_grab_folios_for_write()
1084 folio_wait_stable(wc->w_folios[i]); in ocfs2_grab_folios_for_write()
1087 wc->w_target_folio = wc->w_folios[i]; in ocfs2_grab_folios_for_write()
1091 wc->w_target_locked = false; in ocfs2_grab_folios_for_write()
1104 struct ocfs2_write_ctxt *wc, u32 cpos, in ocfs2_write_cluster() argument
1123 wc->w_di_bh, wc->w_handle, in ocfs2_write_cluster()
1143 wc->w_di_bh); in ocfs2_write_cluster()
1145 wc->w_handle, cpos, 1, *phys, in ocfs2_write_cluster()
1146 meta_ac, &wc->w_dealloc); in ocfs2_write_cluster()
1171 for (i = 0; i < wc->w_num_folios; i++) { in ocfs2_write_cluster()
1175 if (wc->w_folios[i] == NULL) { in ocfs2_write_cluster()
1180 tmpret = ocfs2_prepare_folio_for_write(inode, &p_blkno, wc, in ocfs2_write_cluster()
1181 wc->w_folios[i], cpos, user_pos, user_len, in ocfs2_write_cluster()
1194 ocfs2_write_failure(inode, wc, user_pos, user_len); in ocfs2_write_cluster()
1204 struct ocfs2_write_ctxt *wc, in ocfs2_write_cluster_by_desc() argument
1213 for (i = 0; i < wc->w_clen; i++) { in ocfs2_write_cluster_by_desc()
1214 desc = &wc->w_desc[i]; in ocfs2_write_cluster_by_desc()
1230 wc, desc->c_cpos, pos, local_len); in ocfs2_write_cluster_by_desc()
1251 struct ocfs2_write_ctxt *wc, in ocfs2_set_target_boundaries() argument
1256 wc->w_target_from = pos & (PAGE_SIZE - 1); in ocfs2_set_target_boundaries()
1257 wc->w_target_to = wc->w_target_from + len; in ocfs2_set_target_boundaries()
1271 if (wc->w_large_pages) { in ocfs2_set_target_boundaries()
1278 desc = &wc->w_desc[0]; in ocfs2_set_target_boundaries()
1282 &wc->w_target_from, in ocfs2_set_target_boundaries()
1285 desc = &wc->w_desc[wc->w_clen - 1]; in ocfs2_set_target_boundaries()
1290 &wc->w_target_to); in ocfs2_set_target_boundaries()
1292 wc->w_target_from = 0; in ocfs2_set_target_boundaries()
1293 wc->w_target_to = PAGE_SIZE; in ocfs2_set_target_boundaries()
1305 struct ocfs2_write_ctxt *wc, in ocfs2_unwritten_check() argument
1329 if (wc->w_type != OCFS2_WRITE_DIRECT) in ocfs2_unwritten_check()
1347 list_add_tail(&new->ue_node, &wc->w_unwritten_list); in ocfs2_unwritten_check()
1348 wc->w_unwritten_count++; in ocfs2_unwritten_check()
1366 struct ocfs2_write_ctxt *wc, in ocfs2_populate_write_desc() argument
1380 for (i = 0; i < wc->w_clen; i++) { in ocfs2_populate_write_desc()
1381 desc = &wc->w_desc[i]; in ocfs2_populate_write_desc()
1382 desc->c_cpos = wc->w_cpos + i; in ocfs2_populate_write_desc()
1423 if (desc->c_cpos >= wc->w_first_new_cpos) { in ocfs2_populate_write_desc()
1441 ret = ocfs2_unwritten_check(inode, wc, desc); in ocfs2_populate_write_desc()
1457 struct ocfs2_write_ctxt *wc) in ocfs2_write_begin_inline() argument
1463 struct ocfs2_dinode *di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; in ocfs2_write_begin_inline()
1484 wc->w_target_folio = folio; in ocfs2_write_begin_inline()
1485 wc->w_folios[0] = folio; in ocfs2_write_begin_inline()
1486 wc->w_num_folios = 1; in ocfs2_write_begin_inline()
1488 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), wc->w_di_bh, in ocfs2_write_begin_inline()
1501 ret = ocfs2_read_inline_data(inode, folio, wc->w_di_bh); in ocfs2_write_begin_inline()
1509 wc->w_handle = handle; in ocfs2_write_begin_inline()
1525 struct folio *mmap_folio, struct ocfs2_write_ctxt *wc) in ocfs2_try_to_write_inline_data() argument
1541 ocfs2_size_fits_inline_data(wc->w_di_bh, end)) in ocfs2_try_to_write_inline_data()
1548 ret = ocfs2_convert_inline_data_to_extents(inode, wc->w_di_bh); in ocfs2_try_to_write_inline_data()
1563 di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; in ocfs2_try_to_write_inline_data()
1569 ret = ocfs2_write_begin_inline(mapping, inode, wc); in ocfs2_try_to_write_inline_data()
1596 struct ocfs2_write_ctxt *wc) in ocfs2_expand_nonsparse_inode() argument
1610 /* There is no wc if this is call from direct. */ in ocfs2_expand_nonsparse_inode()
1611 if (wc) in ocfs2_expand_nonsparse_inode()
1612 wc->w_first_new_cpos = in ocfs2_expand_nonsparse_inode()
1637 struct ocfs2_write_ctxt *wc; in ocfs2_write_begin_nolock() local
1648 ret = ocfs2_alloc_write_ctxt(&wc, osb, pos, len, type, di_bh); in ocfs2_write_begin_nolock()
1656 mmap_folio, wc); in ocfs2_write_begin_nolock()
1673 len, wc); in ocfs2_write_begin_nolock()
1685 clusters_need = wc->w_clen; in ocfs2_write_begin_nolock()
1687 wc->w_cpos, wc->w_clen, UINT_MAX); in ocfs2_write_begin_nolock()
1694 ret = ocfs2_populate_write_desc(inode, wc, &clusters_to_alloc, in ocfs2_write_begin_nolock()
1702 di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; in ocfs2_write_begin_nolock()
1724 wc->w_di_bh); in ocfs2_write_begin_nolock()
1747 if (wc->w_clen && (wc->w_desc[0].c_needs_zero || in ocfs2_write_begin_nolock()
1748 wc->w_desc[wc->w_clen - 1].c_needs_zero)) in ocfs2_write_begin_nolock()
1753 ocfs2_set_target_boundaries(osb, wc, pos, len, cluster_of_pages); in ocfs2_write_begin_nolock()
1762 wc->w_handle = handle; in ocfs2_write_begin_nolock()
1771 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), wc->w_di_bh, in ocfs2_write_begin_nolock()
1783 ret = ocfs2_grab_folios_for_write(mapping, wc, wc->w_cpos, pos, len, in ocfs2_write_begin_nolock()
1793 BUG_ON(wc->w_target_folio); in ocfs2_write_begin_nolock()
1802 ret = ocfs2_write_cluster_by_desc(mapping, data_ac, meta_ac, wc, pos, in ocfs2_write_begin_nolock()
1816 *foliop = wc->w_target_folio; in ocfs2_write_begin_nolock()
1817 *fsdata = wc; in ocfs2_write_begin_nolock()
1834 if (wc->w_target_locked) in ocfs2_write_begin_nolock()
1837 ocfs2_free_write_ctxt(inode, wc); in ocfs2_write_begin_nolock()
1912 struct ocfs2_write_ctxt *wc) in ocfs2_write_end_inline() argument
1915 if (!folio_test_uptodate(wc->w_target_folio)) { in ocfs2_write_end_inline()
1921 memcpy_from_folio(di->id2.i_data.id_data + pos, wc->w_target_folio, in ocfs2_write_end_inline()
1938 struct ocfs2_write_ctxt *wc = fsdata; in ocfs2_write_end_nolock() local
1939 struct ocfs2_dinode *di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; in ocfs2_write_end_nolock()
1940 handle_t *handle = wc->w_handle; in ocfs2_write_end_nolock()
1942 BUG_ON(!list_empty(&wc->w_unwritten_list)); in ocfs2_write_end_nolock()
1946 wc->w_di_bh, OCFS2_JOURNAL_ACCESS_WRITE); in ocfs2_write_end_nolock()
1955 ocfs2_write_end_inline(inode, pos, len, &copied, di, wc); in ocfs2_write_end_nolock()
1959 if (unlikely(copied < len) && wc->w_target_folio) { in ocfs2_write_end_nolock()
1962 if (!folio_test_uptodate(wc->w_target_folio)) in ocfs2_write_end_nolock()
1966 if (new_isize > folio_pos(wc->w_target_folio)) in ocfs2_write_end_nolock()
1967 ocfs2_zero_new_buffers(wc->w_target_folio, start+copied, in ocfs2_write_end_nolock()
1977 block_invalidate_folio(wc->w_target_folio, 0, in ocfs2_write_end_nolock()
1978 folio_size(wc->w_target_folio)); in ocfs2_write_end_nolock()
1981 if (wc->w_target_folio) in ocfs2_write_end_nolock()
1982 flush_dcache_folio(wc->w_target_folio); in ocfs2_write_end_nolock()
1984 for (i = 0; i < wc->w_num_folios; i++) { in ocfs2_write_end_nolock()
1985 struct folio *folio = wc->w_folios[i]; in ocfs2_write_end_nolock()
1991 if (folio == wc->w_target_folio) { in ocfs2_write_end_nolock()
1992 from = wc->w_target_from; in ocfs2_write_end_nolock()
1993 to = wc->w_target_to; in ocfs2_write_end_nolock()
2021 if (wc->w_type != OCFS2_WRITE_DIRECT) { in ocfs2_write_end_nolock()
2036 ocfs2_journal_dirty(handle, wc->w_di_bh); in ocfs2_write_end_nolock()
2044 ocfs2_unlock_folios(wc); in ocfs2_write_end_nolock()
2049 ocfs2_run_deallocs(osb, &wc->w_dealloc); in ocfs2_write_end_nolock()
2051 brelse(wc->w_di_bh); in ocfs2_write_end_nolock()
2052 kfree(wc); in ocfs2_write_end_nolock()
2125 struct ocfs2_write_ctxt *wc; in ocfs2_dio_wr_get_block() local
2220 (void **)&wc, di_bh, NULL); in ocfs2_dio_wr_get_block()
2226 desc = &wc->w_desc[0]; in ocfs2_dio_wr_get_block()
2244 if (!list_empty(&wc->w_unwritten_list)) { in ocfs2_dio_wr_get_block()
2247 ue = list_first_entry(&wc->w_unwritten_list, in ocfs2_dio_wr_get_block()
2254 list_splice_tail_init(&wc->w_unwritten_list, &dwc->dw_zero_list); in ocfs2_dio_wr_get_block()
2255 dwc->dw_zero_count += wc->w_unwritten_count; in ocfs2_dio_wr_get_block()
2258 ret = ocfs2_write_end_nolock(inode->i_mapping, pos, len, len, wc); in ocfs2_dio_wr_get_block()