Lines Matching refs:inode

29 #include "inode.h"
42 static int ocfs2_symlink_get_block(struct inode *inode, sector_t iblock,
50 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
54 (unsigned long long)OCFS2_I(inode)->ip_blkno,
57 BUG_ON(ocfs2_inode_is_fast_symlink(inode));
59 if ((iblock << inode->i_sb->s_blocksize_bits) > PATH_MAX + 1) {
65 status = ocfs2_read_inode_block(inode, &bh);
72 if ((u64)iblock >= ocfs2_clusters_to_blocks(inode->i_sb,
82 if (!buffer_uptodate(bh_result) && ocfs2_inode_is_new(inode)) {
97 && ocfs2_inode_is_new(inode)) {
112 map_bh(bh_result, inode->i_sb,
123 static int ocfs2_lock_get_block(struct inode *inode, sector_t iblock,
127 struct ocfs2_inode_info *oi = OCFS2_I(inode);
130 ret = ocfs2_get_block(inode, iblock, bh_result, create);
136 int ocfs2_get_block(struct inode *inode, sector_t iblock,
141 u64 max_blocks = bh_result->b_size >> inode->i_blkbits;
143 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
145 trace_ocfs2_get_block((unsigned long long)OCFS2_I(inode)->ip_blkno,
148 if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE)
149 mlog(ML_NOTICE, "get_block on system inode 0x%p (%lu)\n",
150 inode, inode->i_ino);
152 if (S_ISLNK(inode->i_mode)) {
154 err = ocfs2_symlink_get_block(inode, iblock, bh_result, create);
158 err = ocfs2_extent_map_get_blocks(inode, iblock, &p_blkno, &count,
162 "%llu, NULL)\n", err, inode, (unsigned long long)iblock,
189 map_bh(bh_result, inode->i_sb, p_blkno);
191 bh_result->b_size = count << inode->i_blkbits;
200 (unsigned long long)OCFS2_I(inode)->ip_blkno);
201 mlog(ML_ERROR, "Size %llu, clusters %u\n", (unsigned long long)i_size_read(inode), OCFS2_I(inode)->ip_clusters);
207 past_eof = ocfs2_blocks_for_bytes(inode->i_sb, i_size_read(inode));
209 trace_ocfs2_get_block_end((unsigned long long)OCFS2_I(inode)->ip_blkno,
221 int ocfs2_read_inline_data(struct inode *inode, struct page *page,
229 ocfs2_error(inode->i_sb, "Inode %llu lost inline data flag\n",
230 (unsigned long long)OCFS2_I(inode)->ip_blkno);
234 size = i_size_read(inode);
237 size > ocfs2_max_inline_data_with_xattr(inode->i_sb, di)) {
238 ocfs2_error(inode->i_sb,
240 (unsigned long long)OCFS2_I(inode)->ip_blkno,
258 static int ocfs2_readpage_inline(struct inode *inode, struct page *page)
264 BUG_ON(!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL));
266 ret = ocfs2_read_inode_block(inode, &di_bh);
272 ret = ocfs2_read_inline_data(inode, page, di_bh);
282 struct inode *inode = page->mapping->host;
283 struct ocfs2_inode_info *oi = OCFS2_I(inode);
290 ret = ocfs2_inode_lock_with_page(inode, NULL, 0, page);
321 if (start >= i_size_read(inode)) {
329 ret = ocfs2_readpage_inline(inode, page);
337 ocfs2_inode_unlock(inode, 0);
348 * Right now, we don't bother with BH_Boundary - in-inode extent lists
356 struct inode *inode = rac->mapping->host;
357 struct ocfs2_inode_info *oi = OCFS2_I(inode);
363 ret = ocfs2_inode_lock_full(inode, NULL, 0, OCFS2_LOCK_NONBLOCK);
381 if (readahead_pos(rac) >= i_size_read(inode))
389 ocfs2_inode_unlock(inode, 0);
453 struct inode *inode = mapping->host;
455 trace_ocfs2_bmap((unsigned long long)OCFS2_I(inode)->ip_blkno,
464 if (ocfs2_is_refcount_inode(inode))
470 if (!INODE_JOURNAL(inode)) {
471 err = ocfs2_inode_lock(inode, NULL, 0);
477 down_read(&OCFS2_I(inode)->ip_alloc_sem);
480 if (!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL))
481 err = ocfs2_extent_map_get_blocks(inode, block, &p_blkno, NULL,
484 if (!INODE_JOURNAL(inode)) {
485 up_read(&OCFS2_I(inode)->ip_alloc_sem);
486 ocfs2_inode_unlock(inode, 0);
574 static int ocfs2_should_read_blk(struct inode *inode, struct page *page,
579 if (ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)))
582 if (i_size_read(inode) > offset)
596 struct inode *inode, unsigned int from,
602 unsigned int bsize = i_blocksize(inode);
632 map_bh(bh, inode->i_sb, *p_blkno);
641 ocfs2_should_read_blk(inode, page, block_start) &&
817 static void ocfs2_free_unwritten_list(struct inode *inode,
820 struct ocfs2_inode_info *oi = OCFS2_I(inode);
832 static void ocfs2_free_write_ctxt(struct inode *inode,
835 ocfs2_free_unwritten_list(inode, &wc->w_unwritten_list);
919 static void ocfs2_write_failure(struct inode *inode,
935 if (ocfs2_should_order_data(inode))
936 ocfs2_jbd2_inode_add_write(wc->w_handle, inode,
944 static int ocfs2_prepare_page_for_write(struct inode *inode, u64 *p_blkno,
955 ocfs2_figure_cluster_boundaries(OCFS2_SB(inode->i_sb), cpos,
961 new = new | ((i_size_read(inode) <= page_offset(page)) &&
969 ret = ocfs2_map_page_blocks(page, p_blkno, inode,
973 ret = ocfs2_map_page_blocks(page, p_blkno, inode,
997 ret = ocfs2_map_page_blocks(page, p_blkno, inode,
1016 ocfs2_clear_page_regions(page, OCFS2_SB(inode->i_sb),
1036 struct inode *inode = mapping->host;
1049 wc->w_num_pages = ocfs2_pages_per_cluster(inode->i_sb);
1050 start = ocfs2_align_clusters_to_page_index(inode->i_sb, cpos);
1056 last_byte = max(user_pos + user_len, i_size_read(inode));
1129 struct inode *inode = mapping->host;
1131 int bpc = ocfs2_clusters_to_blocks(inode->i_sb, 1);
1141 ret = ocfs2_add_inode_data(OCFS2_SB(inode->i_sb), inode,
1156 (unsigned long long)OCFS2_I(inode)->ip_blkno);
1162 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode),
1164 ret = ocfs2_mark_extent_written(inode, &et,
1177 ret = ocfs2_get_clusters(inode, cpos, phys, NULL, NULL);
1179 mlog(ML_ERROR, "Get physical blkno failed for inode %llu, "
1181 (unsigned long long)OCFS2_I(inode)->ip_blkno, cpos);
1187 p_blkno = ocfs2_clusters_to_blocks(inode->i_sb, *phys);
1189 p_blkno += (user_pos >> inode->i_sb->s_blocksize_bits) & (u64)(bpc - 1);
1200 tmpret = ocfs2_prepare_page_for_write(inode, &p_blkno, wc,
1215 ocfs2_write_failure(inode, wc, user_pos, user_len);
1325 static int ocfs2_unwritten_check(struct inode *inode,
1329 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1386 static int ocfs2_populate_write_desc(struct inode *inode,
1409 ret = ocfs2_get_clusters(inode, desc->c_cpos, &phys,
1462 ret = ocfs2_unwritten_check(inode, wc, desc);
1477 struct inode *inode,
1481 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1507 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), wc->w_di_bh,
1516 if (!(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL))
1517 ocfs2_set_inode_data_inline(inode, di);
1520 ret = ocfs2_read_inline_data(inode, page, wc->w_di_bh);
1543 struct inode *inode, loff_t pos,
1549 struct ocfs2_inode_info *oi = OCFS2_I(inode);
1565 * The write won't fit - we have to give this inode an
1568 ret = ocfs2_convert_inline_data_to_extents(inode, wc->w_di_bh);
1575 * Check whether the inode can accept inline data.
1577 if (oi->ip_clusters != 0 || i_size_read(inode) != 0)
1585 end > ocfs2_max_inline_data_with_xattr(inode->i_sb, di))
1589 ret = ocfs2_write_begin_inline(mapping, inode, wc);
1613 static int ocfs2_expand_nonsparse_inode(struct inode *inode,
1621 BUG_ON(ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)));
1623 if (newsize <= i_size_read(inode))
1626 ret = ocfs2_extend_no_holes(inode, di_bh, newsize, pos);
1633 ocfs2_clusters_for_bytes(inode->i_sb, i_size_read(inode));
1638 static int ocfs2_zero_tail(struct inode *inode, struct buffer_head *di_bh,
1643 BUG_ON(!ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb)));
1644 if (pos > i_size_read(inode))
1645 ret = ocfs2_zero_extend(inode, di_bh, pos);
1658 struct inode *inode = mapping->host;
1659 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1675 ret = ocfs2_try_to_write_inline_data(mapping, inode, pos, len,
1690 ret = ocfs2_zero_tail(inode, di_bh, pos);
1692 ret = ocfs2_expand_nonsparse_inode(inode, di_bh, pos,
1700 ret = ocfs2_check_range_for_refcount(inode, pos, len);
1706 ret = ocfs2_refcount_cow(inode, di_bh,
1714 ret = ocfs2_populate_write_desc(inode, wc, &clusters_to_alloc,
1725 (unsigned long long)OCFS2_I(inode)->ip_blkno,
1726 (long long)i_size_read(inode),
1743 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode),
1745 ret = ocfs2_lock_allocators(inode, &et,
1754 data_ac->ac_resv = &OCFS2_I(inode)->ip_la_data_resv;
1756 credits = ocfs2_calc_extend_credits(inode->i_sb,
1785 ret = dquot_alloc_space_nodirty(inode,
1791 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), wc->w_di_bh,
1841 dquot_free_space(inode,
1857 ocfs2_free_write_ctxt(inode, wc);
1892 struct inode *inode = mapping->host;
1894 ret = ocfs2_inode_lock(inode, &di_bh, 1);
1907 down_write(&OCFS2_I(inode)->ip_alloc_sem);
1921 up_write(&OCFS2_I(inode)->ip_alloc_sem);
1924 ocfs2_inode_unlock(inode, 1);
1929 static void ocfs2_write_end_inline(struct inode *inode, loff_t pos,
1948 (unsigned long long)OCFS2_I(inode)->ip_blkno,
1959 struct inode *inode = mapping->host;
1960 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
1969 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
1978 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
1979 ocfs2_write_end_inline(inode, pos, len, &copied, di, wc);
1989 new_isize = max_t(loff_t, i_size_read(inode), pos + copied);
2032 if (handle && ocfs2_should_order_data(inode)) {
2037 ocfs2_jbd2_inode_add_write(handle, inode,
2048 if (pos > i_size_read(inode)) {
2049 i_size_write(inode, pos);
2050 mark_inode_dirty(inode);
2052 inode->i_blocks = ocfs2_inode_sector_count(inode);
2053 di->i_size = cpu_to_le64((u64)i_size_read(inode));
2054 inode->i_mtime = inode->i_ctime = current_time(inode);
2055 di->i_mtime = di->i_ctime = cpu_to_le64(inode->i_mtime.tv_sec);
2056 di->i_mtime_nsec = di->i_ctime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
2058 ocfs2_update_inode_fsync_trans(handle, inode, 1);
2087 struct inode *inode = mapping->host;
2091 up_write(&OCFS2_I(inode)->ip_alloc_sem);
2092 ocfs2_inode_unlock(inode, 1);
2125 static void ocfs2_dio_free_write_ctx(struct inode *inode,
2128 ocfs2_free_unwritten_list(inode, &dwc->dw_zero_list);
2142 * called like this: dio->get_blocks(dio->inode, fs_startblk,
2145 static int ocfs2_dio_wr_get_block(struct inode *inode, sector_t iblock,
2148 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2149 struct ocfs2_inode_info *oi = OCFS2_I(inode);
2155 unsigned int i_blkbits = inode->i_sb->s_blocksize_bits;
2157 sector_t endblk = (i_size_read(inode) - 1) >> i_blkbits;
2180 inode->i_ino, pos, len, total_len);
2187 if (pos + total_len <= i_size_read(inode)) {
2190 ret = ocfs2_lock_get_block(inode, iblock, bh_result, create);
2207 if (ocfs2_clusters_for_bytes(inode->i_sb, pos + total_len) >
2208 ocfs2_clusters_for_bytes(inode->i_sb, i_size_read(inode)) &&
2212 * inode to orphan dir, so we can recall those spaces when
2215 ret = ocfs2_add_inode_to_orphan(osb, inode);
2223 ret = ocfs2_inode_lock(inode, &di_bh, 1);
2233 ret = ocfs2_zero_tail(inode, di_bh, pos);
2235 ret = ocfs2_expand_nonsparse_inode(inode, di_bh, pos,
2243 ret = ocfs2_write_begin_nolock(inode->i_mapping, pos, len,
2253 p_blkno = ocfs2_clusters_to_blocks(inode->i_sb, desc->c_phys);
2255 p_blkno += iblock & (u64)(ocfs2_clusters_to_blocks(inode->i_sb, 1) - 1);
2257 map_bh(bh_result, inode->i_sb, p_blkno);
2283 ret = ocfs2_write_end_nolock(inode->i_mapping, pos, len, len, wc);
2288 ocfs2_inode_unlock(inode, 1);
2296 static int ocfs2_dio_end_io_write(struct inode *inode,
2303 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2304 struct ocfs2_inode_info *oi = OCFS2_I(inode);
2319 end <= i_size_read(inode) &&
2323 ret = ocfs2_inode_lock(inode, &di_bh, 1);
2335 end = end > i_size_read(inode) ? end : 0;
2337 ret = ocfs2_del_inode_from_orphan(osb, inode, di_bh,
2345 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), di_bh);
2353 ret = ocfs2_lock_allocators(inode, &et, 0, dwc->dw_zero_count*2,
2360 credits = ocfs2_calc_extend_credits(inode->i_sb, &di->id2.i_list);
2368 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh,
2376 ret = ocfs2_mark_extent_written(inode, &et, handle,
2386 if (end > i_size_read(inode)) {
2387 ret = ocfs2_set_inode_size(handle, inode, di_bh, end);
2395 ocfs2_inode_unlock(inode, 1);
2403 ocfs2_dio_free_write_ctx(inode, dwc);
2418 struct inode *inode = file_inode(iocb->ki_filp);
2430 ret = ocfs2_dio_end_io_write(inode, private, offset,
2433 ocfs2_dio_free_write_ctx(inode, private);
2439 ocfs2_rw_unlock(inode, level);
2446 struct inode *inode = file->f_mapping->host;
2447 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2451 * Fallback to buffered I/O if we see an inode without
2454 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL)
2458 if (iocb->ki_pos + iter->count > i_size_read(inode) &&
2467 return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,