Lines Matching refs:inode
27 #include "inode.h"
40 static int ocfs2_symlink_get_block(struct inode *inode, sector_t iblock,
48 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
52 (unsigned long long)OCFS2_I(inode)->ip_blkno,
55 BUG_ON(ocfs2_inode_is_fast_symlink(inode));
57 if ((iblock << inode->i_sb->s_blocksize_bits) > PATH_MAX + 1) {
63 status = ocfs2_read_inode_block(inode, &bh);
70 if ((u64)iblock >= ocfs2_clusters_to_blocks(inode->i_sb,
80 if (!buffer_uptodate(bh_result) && ocfs2_inode_is_new(inode)) {
95 && ocfs2_inode_is_new(inode)) {
110 map_bh(bh_result, inode->i_sb,
121 static int ocfs2_lock_get_block(struct inode *inode, sector_t iblock,
125 struct ocfs2_inode_info *oi = OCFS2_I(inode);
128 ret = ocfs2_get_block(inode, iblock, bh_result, create);
134 int ocfs2_get_block(struct inode *inode, sector_t iblock,
139 u64 max_blocks = bh_result->b_size >> inode->i_blkbits;
141 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
143 trace_ocfs2_get_block((unsigned long long)OCFS2_I(inode)->ip_blkno,
146 if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE)
147 mlog(ML_NOTICE, "get_block on system inode 0x%p (%lu)\n",
148 inode, inode->i_ino);
150 if (S_ISLNK(inode->i_mode)) {
152 err = ocfs2_symlink_get_block(inode, iblock, bh_result, create);
156 err = ocfs2_extent_map_get_blocks(inode, iblock, &p_blkno, &count,
160 "%llu, NULL)\n", err, inode, (unsigned long long)iblock,
187 map_bh(bh_result, inode->i_sb, p_blkno);
189 bh_result->b_size = count << inode->i_blkbits;
198 (unsigned long long)OCFS2_I(inode)->ip_blkno);
199 mlog(ML_ERROR, "Size %llu, clusters %u\n", (unsigned long long)i_size_read(inode), OCFS2_I(inode)->ip_clusters);
205 past_eof = ocfs2_blocks_for_bytes(inode->i_sb, i_size_read(inode));
207 trace_ocfs2_get_block_end((unsigned long long)OCFS2_I(inode)->ip_blkno,
219 int ocfs2_read_inline_data(struct inode *inode, struct page *page,
227 ocfs2_error(inode->i_sb, "Inode %llu lost inline data flag\n",
228 (unsigned long long)OCFS2_I(inode)->ip_blkno);
232 size = i_size_read(inode);
235 size > ocfs2_max_inline_data_with_xattr(inode->i_sb, di)) {
236 ocfs2_error(inode->i_sb,
238 (unsigned long long)OCFS2_I(inode)->ip_blkno,
256 static int ocfs2_readpage_inline(struct inode *inode, struct page *page)
262 BUG_ON(!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL));
264 ret = ocfs2_read_inode_block(inode, &di_bh);
270 ret = ocfs2_read_inline_data(inode, page, di_bh);
280 struct inode *inode = folio->mapping->host;
281 struct ocfs2_inode_info *oi = OCFS2_I(inode);
287 ret = ocfs2_inode_lock_with_page(inode, NULL, 0, &folio->page);
318 if (start >= i_size_read(inode)) {
326 ret = ocfs2_readpage_inline(inode, &folio->page);
334 ocfs2_inode_unlock(inode, 0);
345 * Right now, we don't bother with BH_Boundary - in-inode extent lists
353 struct inode *inode = rac->mapping->host;
354 struct ocfs2_inode_info *oi = OCFS2_I(inode);
360 ret = ocfs2_inode_lock_full(inode, NULL, 0, OCFS2_LOCK_NONBLOCK);
378 if (readahead_pos(rac) >= i_size_read(inode))
386 ocfs2_inode_unlock(inode, 0);
450 struct inode *inode = mapping->host;
452 trace_ocfs2_bmap((unsigned long long)OCFS2_I(inode)->ip_blkno,
461 if (ocfs2_is_refcount_inode(inode))
467 if (!INODE_JOURNAL(inode)) {
468 err = ocfs2_inode_lock(inode, NULL, 0);
474 down_read(&OCFS2_I(inode)->ip_alloc_sem);
477 if (!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL))
478 err = ocfs2_extent_map_get_blocks(inode, block, &p_blkno, NULL,
481 if (!INODE_JOURNAL(inode)) {
482 up_read(&OCFS2_I(inode)->ip_alloc_sem);
483 ocfs2_inode_unlock(inode, 0);
571 static int ocfs2_should_read_blk(struct inode *inode, struct page *page,
576 if (ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)))
579 if (i_size_read(inode) > offset)
593 struct inode *inode, unsigned int from,
599 unsigned int bsize = i_blocksize(inode);
629 map_bh(bh, inode->i_sb, *p_blkno);
637 ocfs2_should_read_blk(inode, page, block_start) &&
813 static void ocfs2_free_unwritten_list(struct inode *inode,
816 struct ocfs2_inode_info *oi = OCFS2_I(inode);
828 static void ocfs2_free_write_ctxt(struct inode *inode,
831 ocfs2_free_unwritten_list(inode, &wc->w_unwritten_list);
915 static void ocfs2_write_failure(struct inode *inode,
931 if (ocfs2_should_order_data(inode))
932 ocfs2_jbd2_inode_add_write(wc->w_handle, inode,
940 static int ocfs2_prepare_page_for_write(struct inode *inode, u64 *p_blkno,
951 ocfs2_figure_cluster_boundaries(OCFS2_SB(inode->i_sb), cpos,
957 new = new | ((i_size_read(inode) <= page_offset(page)) &&
965 ret = ocfs2_map_page_blocks(page, p_blkno, inode,
969 ret = ocfs2_map_page_blocks(page, p_blkno, inode,
993 ret = ocfs2_map_page_blocks(page, p_blkno, inode,
1012 ocfs2_clear_page_regions(page, OCFS2_SB(inode->i_sb),
1032 struct inode *inode = mapping->host;
1045 wc->w_num_pages = ocfs2_pages_per_cluster(inode->i_sb);
1046 start = ocfs2_align_clusters_to_page_index(inode->i_sb, cpos);
1052 last_byte = max(user_pos + user_len, i_size_read(inode));
1125 struct inode *inode = mapping->host;
1127 int bpc = ocfs2_clusters_to_blocks(inode->i_sb, 1);
1137 ret = ocfs2_add_inode_data(OCFS2_SB(inode->i_sb), inode,
1152 (unsigned long long)OCFS2_I(inode)->ip_blkno);
1158 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode),
1160 ret = ocfs2_mark_extent_written(inode, &et,
1173 ret = ocfs2_get_clusters(inode, cpos, phys, NULL, NULL);
1175 mlog(ML_ERROR, "Get physical blkno failed for inode %llu, "
1177 (unsigned long long)OCFS2_I(inode)->ip_blkno, cpos);
1183 p_blkno = ocfs2_clusters_to_blocks(inode->i_sb, *phys);
1185 p_blkno += (user_pos >> inode->i_sb->s_blocksize_bits) & (u64)(bpc - 1);
1196 tmpret = ocfs2_prepare_page_for_write(inode, &p_blkno, wc,
1211 ocfs2_write_failure(inode, wc, user_pos, user_len);
1321 static int ocfs2_unwritten_check(struct inode *inode,
1325 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1382 static int ocfs2_populate_write_desc(struct inode *inode,
1405 ret = ocfs2_get_clusters(inode, desc->c_cpos, &phys,
1458 ret = ocfs2_unwritten_check(inode, wc, desc);
1473 struct inode *inode,
1477 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1503 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), wc->w_di_bh,
1512 if (!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL))
1513 ocfs2_set_inode_data_inline(inode, di);
1516 ret = ocfs2_read_inline_data(inode, page, wc->w_di_bh);
1539 struct inode *inode, loff_t pos,
1545 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1561 * The write won't fit - we have to give this inode an
1564 ret = ocfs2_convert_inline_data_to_extents(inode, wc->w_di_bh);
1571 * Check whether the inode can accept inline data.
1573 if (oi->ip_clusters != 0 || i_size_read(inode) != 0)
1581 end > ocfs2_max_inline_data_with_xattr(inode->i_sb, di))
1585 ret = ocfs2_write_begin_inline(mapping, inode, wc);
1609 static int ocfs2_expand_nonsparse_inode(struct inode *inode,
1617 BUG_ON(ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)));
1619 if (newsize <= i_size_read(inode))
1622 ret = ocfs2_extend_no_holes(inode, di_bh, newsize, pos);
1629 ocfs2_clusters_for_bytes(inode->i_sb, i_size_read(inode));
1634 static int ocfs2_zero_tail(struct inode *inode, struct buffer_head *di_bh,
1639 BUG_ON(!ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)));
1640 if (pos > i_size_read(inode))
1641 ret = ocfs2_zero_extend(inode, di_bh, pos);
1654 struct inode *inode = mapping->host;
1655 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1671 ret = ocfs2_try_to_write_inline_data(mapping, inode, pos, len,
1686 ret = ocfs2_zero_tail(inode, di_bh, pos);
1688 ret = ocfs2_expand_nonsparse_inode(inode, di_bh, pos,
1696 ret = ocfs2_check_range_for_refcount(inode, pos, len);
1702 ret = ocfs2_refcount_cow(inode, di_bh,
1710 ret = ocfs2_populate_write_desc(inode, wc, &clusters_to_alloc,
1721 (unsigned long long)OCFS2_I(inode)->ip_blkno,
1722 (long long)i_size_read(inode),
1739 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode),
1741 ret = ocfs2_lock_allocators(inode, &et,
1750 data_ac->ac_resv = &OCFS2_I(inode)->ip_la_data_resv;
1752 credits = ocfs2_calc_extend_credits(inode->i_sb,
1781 ret = dquot_alloc_space_nodirty(inode,
1787 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), wc->w_di_bh,
1837 dquot_free_space(inode,
1853 ocfs2_free_write_ctxt(inode, wc);
1888 struct inode *inode = mapping->host;
1890 ret = ocfs2_inode_lock(inode, &di_bh, 1);
1903 down_write(&OCFS2_I(inode)->ip_alloc_sem);
1917 up_write(&OCFS2_I(inode)->ip_alloc_sem);
1920 ocfs2_inode_unlock(inode, 1);
1925 static void ocfs2_write_end_inline(struct inode *inode, loff_t pos,
1944 (unsigned long long)OCFS2_I(inode)->ip_blkno,
1955 struct inode *inode = mapping->host;
1956 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1965 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
1974 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
1975 ocfs2_write_end_inline(inode, pos, len, &copied, di, wc);
1985 new_isize = max_t(loff_t, i_size_read(inode), pos + copied);
2029 if (handle && ocfs2_should_order_data(inode)) {
2034 ocfs2_jbd2_inode_add_write(handle, inode,
2045 if (pos > i_size_read(inode)) {
2046 i_size_write(inode, pos);
2047 mark_inode_dirty(inode);
2049 inode->i_blocks = ocfs2_inode_sector_count(inode);
2050 di->i_size = cpu_to_le64((u64)i_size_read(inode));
2051 inode->i_mtime = inode_set_ctime_current(inode);
2052 di->i_mtime = di->i_ctime = cpu_to_le64(inode->i_mtime.tv_sec);
2053 di->i_mtime_nsec = di->i_ctime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
2055 ocfs2_update_inode_fsync_trans(handle, inode, 1);
2084 struct inode *inode = mapping->host;
2088 up_write(&OCFS2_I(inode)->ip_alloc_sem);
2089 ocfs2_inode_unlock(inode, 1);
2122 static void ocfs2_dio_free_write_ctx(struct inode *inode,
2125 ocfs2_free_unwritten_list(inode, &dwc->dw_zero_list);
2139 * called like this: dio->get_blocks(dio->inode, fs_startblk,
2142 static int ocfs2_dio_wr_get_block(struct inode *inode, sector_t iblock,
2145 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2146 struct ocfs2_inode_info *oi = OCFS2_I(inode);
2152 unsigned int i_blkbits = inode->i_sb->s_blocksize_bits;
2154 sector_t endblk = (i_size_read(inode) - 1) >> i_blkbits;
2177 inode->i_ino, pos, len, total_len);
2184 if (pos + total_len <= i_size_read(inode)) {
2187 ret = ocfs2_lock_get_block(inode, iblock, bh_result, create);
2204 if (ocfs2_clusters_for_bytes(inode->i_sb, pos + total_len) >
2205 ocfs2_clusters_for_bytes(inode->i_sb, i_size_read(inode)) &&
2209 * inode to orphan dir, so we can recall those spaces when
2212 ret = ocfs2_add_inode_to_orphan(osb, inode);
2220 ret = ocfs2_inode_lock(inode, &di_bh, 1);
2230 ret = ocfs2_zero_tail(inode, di_bh, pos);
2232 ret = ocfs2_expand_nonsparse_inode(inode, di_bh, pos,
2240 ret = ocfs2_write_begin_nolock(inode->i_mapping, pos, len,
2250 p_blkno = ocfs2_clusters_to_blocks(inode->i_sb, desc->c_phys);
2252 p_blkno += iblock & (u64)(ocfs2_clusters_to_blocks(inode->i_sb, 1) - 1);
2254 map_bh(bh_result, inode->i_sb, p_blkno);
2280 ret = ocfs2_write_end_nolock(inode->i_mapping, pos, len, len, wc);
2285 ocfs2_inode_unlock(inode, 1);
2293 static int ocfs2_dio_end_io_write(struct inode *inode,
2300 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2301 struct ocfs2_inode_info *oi = OCFS2_I(inode);
2316 end <= i_size_read(inode) &&
2320 ret = ocfs2_inode_lock(inode, &di_bh, 1);
2332 end = end > i_size_read(inode) ? end : 0;
2334 ret = ocfs2_del_inode_from_orphan(osb, inode, di_bh,
2342 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), di_bh);
2350 ret = ocfs2_lock_allocators(inode, &et, 0, dwc->dw_zero_count*2,
2357 credits = ocfs2_calc_extend_credits(inode->i_sb, &di->id2.i_list);
2365 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
2373 ret = ocfs2_mark_extent_written(inode, &et, handle,
2383 if (end > i_size_read(inode)) {
2384 ret = ocfs2_set_inode_size(handle, inode, di_bh, end);
2392 ocfs2_inode_unlock(inode, 1);
2400 ocfs2_dio_free_write_ctx(inode, dwc);
2415 struct inode *inode = file_inode(iocb->ki_filp);
2427 ret = ocfs2_dio_end_io_write(inode, private, offset,
2430 ocfs2_dio_free_write_ctx(inode, private);
2436 ocfs2_rw_unlock(inode, level);
2443 struct inode *inode = file->f_mapping->host;
2444 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2448 * Fallback to buffered I/O if we see an inode without
2451 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL)
2455 if (iocb->ki_pos + iter->count > i_size_read(inode) &&
2464 return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,