Lines Matching full:wc
771 static void ocfs2_unlock_folios(struct ocfs2_write_ctxt *wc) in ocfs2_unlock_folios() argument
780 if (wc->w_target_locked) { in ocfs2_unlock_folios()
781 BUG_ON(!wc->w_target_folio); in ocfs2_unlock_folios()
782 for (i = 0; i < wc->w_num_folios; i++) { in ocfs2_unlock_folios()
783 if (wc->w_target_folio == wc->w_folios[i]) { in ocfs2_unlock_folios()
784 wc->w_folios[i] = NULL; in ocfs2_unlock_folios()
788 folio_mark_accessed(wc->w_target_folio); in ocfs2_unlock_folios()
789 folio_put(wc->w_target_folio); in ocfs2_unlock_folios()
791 ocfs2_unlock_and_free_folios(wc->w_folios, wc->w_num_folios); in ocfs2_unlock_folios()
810 struct ocfs2_write_ctxt *wc) in ocfs2_free_write_ctxt() argument
812 ocfs2_free_unwritten_list(inode, &wc->w_unwritten_list); in ocfs2_free_write_ctxt()
813 ocfs2_unlock_folios(wc); in ocfs2_free_write_ctxt()
814 brelse(wc->w_di_bh); in ocfs2_free_write_ctxt()
815 kfree(wc); in ocfs2_free_write_ctxt()
824 struct ocfs2_write_ctxt *wc; in ocfs2_alloc_write_ctxt() local
826 wc = kzalloc(sizeof(struct ocfs2_write_ctxt), GFP_NOFS); in ocfs2_alloc_write_ctxt()
827 if (!wc) in ocfs2_alloc_write_ctxt()
830 wc->w_cpos = pos >> osb->s_clustersize_bits; in ocfs2_alloc_write_ctxt()
831 wc->w_first_new_cpos = UINT_MAX; in ocfs2_alloc_write_ctxt()
833 wc->w_clen = cend - wc->w_cpos + 1; in ocfs2_alloc_write_ctxt()
835 wc->w_di_bh = di_bh; in ocfs2_alloc_write_ctxt()
836 wc->w_type = type; in ocfs2_alloc_write_ctxt()
839 wc->w_large_pages = 1; in ocfs2_alloc_write_ctxt()
841 wc->w_large_pages = 0; in ocfs2_alloc_write_ctxt()
843 ocfs2_init_dealloc_ctxt(&wc->w_dealloc); in ocfs2_alloc_write_ctxt()
844 INIT_LIST_HEAD(&wc->w_unwritten_list); in ocfs2_alloc_write_ctxt()
846 *wcp = wc; in ocfs2_alloc_write_ctxt()
898 struct ocfs2_write_ctxt *wc, in ocfs2_write_failure() argument
905 if (wc->w_target_folio) in ocfs2_write_failure()
906 ocfs2_zero_new_buffers(wc->w_target_folio, from, to); in ocfs2_write_failure()
908 for (i = 0; i < wc->w_num_folios; i++) { in ocfs2_write_failure()
909 struct folio *folio = wc->w_folios[i]; in ocfs2_write_failure()
913 ocfs2_jbd2_inode_add_write(wc->w_handle, inode, in ocfs2_write_failure()
922 struct ocfs2_write_ctxt *wc, struct folio *folio, u32 cpos, in ocfs2_prepare_folio_for_write() argument
939 if (folio == wc->w_target_folio) { in ocfs2_prepare_folio_for_write()
1003 struct ocfs2_write_ctxt *wc, u32 cpos, loff_t user_pos, in ocfs2_grab_folios_for_write() argument
1021 wc->w_num_folios = ocfs2_pages_per_cluster(inode->i_sb); in ocfs2_grab_folios_for_write()
1031 if ((start + wc->w_num_folios) > end_index) in ocfs2_grab_folios_for_write()
1032 wc->w_num_folios = end_index - start; in ocfs2_grab_folios_for_write()
1034 wc->w_num_folios = 1; in ocfs2_grab_folios_for_write()
1039 for(i = 0; i < wc->w_num_folios; i++) { in ocfs2_grab_folios_for_write()
1043 wc->w_type == OCFS2_WRITE_MMAP) { in ocfs2_grab_folios_for_write()
1060 wc->w_folios[i] = mmap_folio; in ocfs2_grab_folios_for_write()
1061 wc->w_target_locked = true; in ocfs2_grab_folios_for_write()
1063 wc->w_type == OCFS2_WRITE_DIRECT) { in ocfs2_grab_folios_for_write()
1065 wc->w_folios[i] = NULL; in ocfs2_grab_folios_for_write()
1068 wc->w_folios[i] = __filemap_get_folio(mapping, index, in ocfs2_grab_folios_for_write()
1071 if (IS_ERR(wc->w_folios[i])) { in ocfs2_grab_folios_for_write()
1072 ret = PTR_ERR(wc->w_folios[i]); in ocfs2_grab_folios_for_write()
1077 folio_wait_stable(wc->w_folios[i]); in ocfs2_grab_folios_for_write()
1080 wc->w_target_folio = wc->w_folios[i]; in ocfs2_grab_folios_for_write()
1084 wc->w_target_locked = false; in ocfs2_grab_folios_for_write()
1097 struct ocfs2_write_ctxt *wc, u32 cpos, in ocfs2_write_cluster() argument
1116 wc->w_di_bh, wc->w_handle, in ocfs2_write_cluster()
1136 wc->w_di_bh); in ocfs2_write_cluster()
1138 wc->w_handle, cpos, 1, *phys, in ocfs2_write_cluster()
1139 meta_ac, &wc->w_dealloc); in ocfs2_write_cluster()
1164 for (i = 0; i < wc->w_num_folios; i++) { in ocfs2_write_cluster()
1168 if (wc->w_folios[i] == NULL) { in ocfs2_write_cluster()
1173 tmpret = ocfs2_prepare_folio_for_write(inode, &p_blkno, wc, in ocfs2_write_cluster()
1174 wc->w_folios[i], cpos, user_pos, user_len, in ocfs2_write_cluster()
1187 ocfs2_write_failure(inode, wc, user_pos, user_len); in ocfs2_write_cluster()
1197 struct ocfs2_write_ctxt *wc, in ocfs2_write_cluster_by_desc() argument
1206 for (i = 0; i < wc->w_clen; i++) { in ocfs2_write_cluster_by_desc()
1207 desc = &wc->w_desc[i]; in ocfs2_write_cluster_by_desc()
1223 wc, desc->c_cpos, pos, local_len); in ocfs2_write_cluster_by_desc()
1244 struct ocfs2_write_ctxt *wc, in ocfs2_set_target_boundaries() argument
1249 wc->w_target_from = pos & (PAGE_SIZE - 1); in ocfs2_set_target_boundaries()
1250 wc->w_target_to = wc->w_target_from + len; in ocfs2_set_target_boundaries()
1264 if (wc->w_large_pages) { in ocfs2_set_target_boundaries()
1271 desc = &wc->w_desc[0]; in ocfs2_set_target_boundaries()
1275 &wc->w_target_from, in ocfs2_set_target_boundaries()
1278 desc = &wc->w_desc[wc->w_clen - 1]; in ocfs2_set_target_boundaries()
1283 &wc->w_target_to); in ocfs2_set_target_boundaries()
1285 wc->w_target_from = 0; in ocfs2_set_target_boundaries()
1286 wc->w_target_to = PAGE_SIZE; in ocfs2_set_target_boundaries()
1298 struct ocfs2_write_ctxt *wc, in ocfs2_unwritten_check() argument
1322 if (wc->w_type != OCFS2_WRITE_DIRECT) in ocfs2_unwritten_check()
1340 list_add_tail(&new->ue_node, &wc->w_unwritten_list); in ocfs2_unwritten_check()
1341 wc->w_unwritten_count++; in ocfs2_unwritten_check()
1359 struct ocfs2_write_ctxt *wc, in ocfs2_populate_write_desc() argument
1373 for (i = 0; i < wc->w_clen; i++) { in ocfs2_populate_write_desc()
1374 desc = &wc->w_desc[i]; in ocfs2_populate_write_desc()
1375 desc->c_cpos = wc->w_cpos + i; in ocfs2_populate_write_desc()
1416 if (desc->c_cpos >= wc->w_first_new_cpos) { in ocfs2_populate_write_desc()
1434 ret = ocfs2_unwritten_check(inode, wc, desc); in ocfs2_populate_write_desc()
1450 struct ocfs2_write_ctxt *wc) in ocfs2_write_begin_inline() argument
1456 struct ocfs2_dinode *di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; in ocfs2_write_begin_inline()
1477 wc->w_target_folio = folio; in ocfs2_write_begin_inline()
1478 wc->w_folios[0] = folio; in ocfs2_write_begin_inline()
1479 wc->w_num_folios = 1; in ocfs2_write_begin_inline()
1481 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), wc->w_di_bh, in ocfs2_write_begin_inline()
1494 ret = ocfs2_read_inline_data(inode, folio, wc->w_di_bh); in ocfs2_write_begin_inline()
1502 wc->w_handle = handle; in ocfs2_write_begin_inline()
1518 struct folio *mmap_folio, struct ocfs2_write_ctxt *wc) in ocfs2_try_to_write_inline_data() argument
1534 ocfs2_size_fits_inline_data(wc->w_di_bh, end)) in ocfs2_try_to_write_inline_data()
1541 ret = ocfs2_convert_inline_data_to_extents(inode, wc->w_di_bh); in ocfs2_try_to_write_inline_data()
1556 di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; in ocfs2_try_to_write_inline_data()
1562 ret = ocfs2_write_begin_inline(mapping, inode, wc); in ocfs2_try_to_write_inline_data()
1589 struct ocfs2_write_ctxt *wc) in ocfs2_expand_nonsparse_inode() argument
1603 /* There is no wc if this is call from direct. */ in ocfs2_expand_nonsparse_inode()
1604 if (wc) in ocfs2_expand_nonsparse_inode()
1605 wc->w_first_new_cpos = in ocfs2_expand_nonsparse_inode()
1630 struct ocfs2_write_ctxt *wc; in ocfs2_write_begin_nolock() local
1641 ret = ocfs2_alloc_write_ctxt(&wc, osb, pos, len, type, di_bh); in ocfs2_write_begin_nolock()
1649 mmap_folio, wc); in ocfs2_write_begin_nolock()
1666 len, wc); in ocfs2_write_begin_nolock()
1678 clusters_need = wc->w_clen; in ocfs2_write_begin_nolock()
1680 wc->w_cpos, wc->w_clen, UINT_MAX); in ocfs2_write_begin_nolock()
1687 ret = ocfs2_populate_write_desc(inode, wc, &clusters_to_alloc, in ocfs2_write_begin_nolock()
1695 di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; in ocfs2_write_begin_nolock()
1717 wc->w_di_bh); in ocfs2_write_begin_nolock()
1740 if (wc->w_clen && (wc->w_desc[0].c_needs_zero || in ocfs2_write_begin_nolock()
1741 wc->w_desc[wc->w_clen - 1].c_needs_zero)) in ocfs2_write_begin_nolock()
1746 ocfs2_set_target_boundaries(osb, wc, pos, len, cluster_of_pages); in ocfs2_write_begin_nolock()
1755 wc->w_handle = handle; in ocfs2_write_begin_nolock()
1764 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), wc->w_di_bh, in ocfs2_write_begin_nolock()
1776 ret = ocfs2_grab_folios_for_write(mapping, wc, wc->w_cpos, pos, len, in ocfs2_write_begin_nolock()
1786 BUG_ON(wc->w_target_folio); in ocfs2_write_begin_nolock()
1795 ret = ocfs2_write_cluster_by_desc(mapping, data_ac, meta_ac, wc, pos, in ocfs2_write_begin_nolock()
1809 *foliop = wc->w_target_folio; in ocfs2_write_begin_nolock()
1810 *fsdata = wc; in ocfs2_write_begin_nolock()
1827 if (wc->w_target_locked) in ocfs2_write_begin_nolock()
1830 ocfs2_free_write_ctxt(inode, wc); in ocfs2_write_begin_nolock()
1905 struct ocfs2_write_ctxt *wc) in ocfs2_write_end_inline() argument
1908 if (!folio_test_uptodate(wc->w_target_folio)) { in ocfs2_write_end_inline()
1914 memcpy_from_folio(di->id2.i_data.id_data + pos, wc->w_target_folio, in ocfs2_write_end_inline()
1931 struct ocfs2_write_ctxt *wc = fsdata; in ocfs2_write_end_nolock() local
1932 struct ocfs2_dinode *di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; in ocfs2_write_end_nolock()
1933 handle_t *handle = wc->w_handle; in ocfs2_write_end_nolock()
1935 BUG_ON(!list_empty(&wc->w_unwritten_list)); in ocfs2_write_end_nolock()
1939 wc->w_di_bh, OCFS2_JOURNAL_ACCESS_WRITE); in ocfs2_write_end_nolock()
1948 ocfs2_write_end_inline(inode, pos, len, &copied, di, wc); in ocfs2_write_end_nolock()
1952 if (unlikely(copied < len) && wc->w_target_folio) { in ocfs2_write_end_nolock()
1955 if (!folio_test_uptodate(wc->w_target_folio)) in ocfs2_write_end_nolock()
1959 if (new_isize > folio_pos(wc->w_target_folio)) in ocfs2_write_end_nolock()
1960 ocfs2_zero_new_buffers(wc->w_target_folio, start+copied, in ocfs2_write_end_nolock()
1970 block_invalidate_folio(wc->w_target_folio, 0, in ocfs2_write_end_nolock()
1971 folio_size(wc->w_target_folio)); in ocfs2_write_end_nolock()
1974 if (wc->w_target_folio) in ocfs2_write_end_nolock()
1975 flush_dcache_folio(wc->w_target_folio); in ocfs2_write_end_nolock()
1977 for (i = 0; i < wc->w_num_folios; i++) { in ocfs2_write_end_nolock()
1978 struct folio *folio = wc->w_folios[i]; in ocfs2_write_end_nolock()
1984 if (folio == wc->w_target_folio) { in ocfs2_write_end_nolock()
1985 from = wc->w_target_from; in ocfs2_write_end_nolock()
1986 to = wc->w_target_to; in ocfs2_write_end_nolock()
2014 if (wc->w_type != OCFS2_WRITE_DIRECT) { in ocfs2_write_end_nolock()
2029 ocfs2_journal_dirty(handle, wc->w_di_bh); in ocfs2_write_end_nolock()
2037 ocfs2_unlock_folios(wc); in ocfs2_write_end_nolock()
2042 ocfs2_run_deallocs(osb, &wc->w_dealloc); in ocfs2_write_end_nolock()
2044 brelse(wc->w_di_bh); in ocfs2_write_end_nolock()
2045 kfree(wc); in ocfs2_write_end_nolock()
2118 struct ocfs2_write_ctxt *wc; in ocfs2_dio_wr_get_block() local
2213 (void **)&wc, di_bh, NULL); in ocfs2_dio_wr_get_block()
2219 desc = &wc->w_desc[0]; in ocfs2_dio_wr_get_block()
2237 if (!list_empty(&wc->w_unwritten_list)) { in ocfs2_dio_wr_get_block()
2240 ue = list_first_entry(&wc->w_unwritten_list, in ocfs2_dio_wr_get_block()
2247 list_splice_tail_init(&wc->w_unwritten_list, &dwc->dw_zero_list); in ocfs2_dio_wr_get_block()
2248 dwc->dw_zero_count += wc->w_unwritten_count; in ocfs2_dio_wr_get_block()
2251 ret = ocfs2_write_end_nolock(inode->i_mapping, pos, len, len, wc); in ocfs2_dio_wr_get_block()