Lines Matching refs:inode
53 static int ocfs2_init_file_private(struct inode *inode, struct file *file) in ocfs2_init_file_private() argument
69 static void ocfs2_free_file_private(struct inode *inode, struct file *file) in ocfs2_free_file_private() argument
72 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_free_file_private()
82 static int ocfs2_file_open(struct inode *inode, struct file *file) in ocfs2_file_open() argument
86 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_file_open()
88 trace_ocfs2_file_open(inode, file, file->f_path.dentry, in ocfs2_file_open()
94 status = dquot_initialize(inode); in ocfs2_file_open()
117 status = ocfs2_init_file_private(inode, file); in ocfs2_file_open()
134 static int ocfs2_file_release(struct inode *inode, struct file *file) in ocfs2_file_release() argument
136 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_file_release()
142 trace_ocfs2_file_release(inode, file, file->f_path.dentry, in ocfs2_file_release()
149 ocfs2_free_file_private(inode, file); in ocfs2_file_release()
154 static int ocfs2_dir_open(struct inode *inode, struct file *file) in ocfs2_dir_open() argument
156 return ocfs2_init_file_private(inode, file); in ocfs2_dir_open()
159 static int ocfs2_dir_release(struct inode *inode, struct file *file) in ocfs2_dir_release() argument
161 ocfs2_free_file_private(inode, file); in ocfs2_dir_release()
169 struct inode *inode = file->f_mapping->host; in ocfs2_sync_file() local
170 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_sync_file()
171 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_sync_file()
177 trace_ocfs2_sync_file(inode, file, file->f_path.dentry, in ocfs2_sync_file()
196 ret = blkdev_issue_flush(inode->i_sb->s_bdev); in ocfs2_sync_file()
207 int ocfs2_should_update_atime(struct inode *inode, in ocfs2_should_update_atime() argument
211 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_should_update_atime()
216 if ((inode->i_flags & S_NOATIME) || in ocfs2_should_update_atime()
217 ((inode->i_sb->s_flags & SB_NODIRATIME) && S_ISDIR(inode->i_mode))) in ocfs2_should_update_atime()
232 ((vfsmnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))) in ocfs2_should_update_atime()
236 struct timespec64 ctime = inode_get_ctime(inode); in ocfs2_should_update_atime()
237 struct timespec64 atime = inode_get_atime(inode); in ocfs2_should_update_atime()
238 struct timespec64 mtime = inode_get_mtime(inode); in ocfs2_should_update_atime()
247 now = current_time(inode); in ocfs2_should_update_atime()
248 if ((now.tv_sec - inode_get_atime_sec(inode) <= osb->s_atime_quantum)) in ocfs2_should_update_atime()
254 int ocfs2_update_inode_atime(struct inode *inode, in ocfs2_update_inode_atime() argument
258 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_update_inode_atime()
269 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh, in ocfs2_update_inode_atime()
281 inode_set_atime_to_ts(inode, current_time(inode)); in ocfs2_update_inode_atime()
282 di->i_atime = cpu_to_le64(inode_get_atime_sec(inode)); in ocfs2_update_inode_atime()
283 di->i_atime_nsec = cpu_to_le32(inode_get_atime_nsec(inode)); in ocfs2_update_inode_atime()
284 ocfs2_update_inode_fsync_trans(handle, inode, 0); in ocfs2_update_inode_atime()
294 struct inode *inode, in ocfs2_set_inode_size() argument
300 i_size_write(inode, new_i_size); in ocfs2_set_inode_size()
301 inode->i_blocks = ocfs2_inode_sector_count(inode); in ocfs2_set_inode_size()
302 inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode)); in ocfs2_set_inode_size()
304 status = ocfs2_mark_inode_dirty(handle, inode, fe_bh); in ocfs2_set_inode_size()
314 int ocfs2_simple_size_update(struct inode *inode, in ocfs2_simple_size_update() argument
319 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_simple_size_update()
329 ret = ocfs2_set_inode_size(handle, inode, di_bh, in ocfs2_simple_size_update()
334 ocfs2_update_inode_fsync_trans(handle, inode, 0); in ocfs2_simple_size_update()
340 static int ocfs2_cow_file_pos(struct inode *inode, in ocfs2_cow_file_pos() argument
345 u32 phys, cpos = offset >> OCFS2_SB(inode->i_sb)->s_clustersize_bits; in ocfs2_cow_file_pos()
354 if ((offset & (OCFS2_SB(inode->i_sb)->s_clustersize - 1)) == 0) in ocfs2_cow_file_pos()
357 status = ocfs2_get_clusters(inode, cpos, &phys, in ocfs2_cow_file_pos()
367 return ocfs2_refcount_cow(inode, fe_bh, cpos, 1, cpos+1); in ocfs2_cow_file_pos()
374 struct inode *inode, in ocfs2_orphan_for_truncate() argument
388 status = ocfs2_cow_file_pos(inode, fe_bh, new_i_size); in ocfs2_orphan_for_truncate()
404 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh, in ocfs2_orphan_for_truncate()
414 cluster_bytes = ocfs2_align_bytes_to_clusters(inode->i_sb, new_i_size); in ocfs2_orphan_for_truncate()
415 status = ocfs2_zero_range_for_truncate(inode, handle, new_i_size, in ocfs2_orphan_for_truncate()
422 i_size_write(inode, new_i_size); in ocfs2_orphan_for_truncate()
423 inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode)); in ocfs2_orphan_for_truncate()
427 di->i_ctime = di->i_mtime = cpu_to_le64(inode_get_ctime_sec(inode)); in ocfs2_orphan_for_truncate()
428 di->i_ctime_nsec = di->i_mtime_nsec = cpu_to_le32(inode_get_ctime_nsec(inode)); in ocfs2_orphan_for_truncate()
429 ocfs2_update_inode_fsync_trans(handle, inode, 0); in ocfs2_orphan_for_truncate()
439 int ocfs2_truncate_file(struct inode *inode, in ocfs2_truncate_file() argument
445 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_truncate_file()
451 trace_ocfs2_truncate_file((unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_truncate_file()
455 mlog_bug_on_msg(le64_to_cpu(fe->i_size) != i_size_read(inode), in ocfs2_truncate_file()
458 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_truncate_file()
459 i_size_read(inode), in ocfs2_truncate_file()
472 down_write(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_truncate_file()
475 &OCFS2_I(inode)->ip_la_data_resv); in ocfs2_truncate_file()
485 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) { in ocfs2_truncate_file()
486 unmap_mapping_range(inode->i_mapping, in ocfs2_truncate_file()
488 truncate_inode_pages(inode->i_mapping, new_i_size); in ocfs2_truncate_file()
489 status = ocfs2_truncate_inline(inode, di_bh, new_i_size, in ocfs2_truncate_file()
490 i_size_read(inode), 1); in ocfs2_truncate_file()
501 status = ocfs2_orphan_for_truncate(osb, inode, di_bh, new_i_size); in ocfs2_truncate_file()
507 unmap_mapping_range(inode->i_mapping, new_i_size + PAGE_SIZE - 1, 0, 1); in ocfs2_truncate_file()
508 truncate_inode_pages(inode->i_mapping, new_i_size); in ocfs2_truncate_file()
510 status = ocfs2_commit_truncate(osb, inode, di_bh); in ocfs2_truncate_file()
518 up_write(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_truncate_file()
521 if (!status && OCFS2_I(inode)->ip_clusters == 0) in ocfs2_truncate_file()
522 status = ocfs2_try_remove_refcount_tree(inode, di_bh); in ocfs2_truncate_file()
538 struct inode *inode, in ocfs2_add_inode_data() argument
550 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), fe_bh); in ocfs2_add_inode_data()
556 static int ocfs2_extend_allocation(struct inode *inode, u32 logical_start, in ocfs2_extend_allocation() argument
569 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_extend_allocation()
579 status = ocfs2_read_inode_block(inode, &bh); in ocfs2_extend_allocation()
587 BUG_ON(le32_to_cpu(fe->i_clusters) != OCFS2_I(inode)->ip_clusters); in ocfs2_extend_allocation()
589 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), bh); in ocfs2_extend_allocation()
590 status = ocfs2_lock_allocators(inode, &et, clusters_to_add, 0, in ocfs2_extend_allocation()
608 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_extend_allocation()
609 (unsigned long long)i_size_read(inode), in ocfs2_extend_allocation()
613 status = dquot_alloc_space_nodirty(inode, in ocfs2_extend_allocation()
622 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh, in ocfs2_extend_allocation()
629 prev_clusters = OCFS2_I(inode)->ip_clusters; in ocfs2_extend_allocation()
632 inode, in ocfs2_extend_allocation()
646 ocfs2_update_inode_fsync_trans(handle, inode, 1); in ocfs2_extend_allocation()
649 spin_lock(&OCFS2_I(inode)->ip_lock); in ocfs2_extend_allocation()
650 clusters_to_add -= (OCFS2_I(inode)->ip_clusters - prev_clusters); in ocfs2_extend_allocation()
651 spin_unlock(&OCFS2_I(inode)->ip_lock); in ocfs2_extend_allocation()
653 dquot_free_space(inode, in ocfs2_extend_allocation()
676 trace_ocfs2_extend_allocation_end(OCFS2_I(inode)->ip_blkno, in ocfs2_extend_allocation()
679 OCFS2_I(inode)->ip_clusters, in ocfs2_extend_allocation()
680 (unsigned long long)i_size_read(inode)); in ocfs2_extend_allocation()
684 dquot_free_space(inode, in ocfs2_extend_allocation()
712 static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode, in ocfs2_zero_start_ordered_transaction() argument
717 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_zero_start_ordered_transaction()
721 if (!ocfs2_should_order_data(inode)) in ocfs2_zero_start_ordered_transaction()
731 ret = ocfs2_jbd2_inode_add_write(handle, inode, start_byte, length); in ocfs2_zero_start_ordered_transaction()
737 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh, in ocfs2_zero_start_ordered_transaction()
741 ocfs2_update_inode_fsync_trans(handle, inode, 1); in ocfs2_zero_start_ordered_transaction()
755 static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, in ocfs2_write_zero_page() argument
758 struct address_space *mapping = inode->i_mapping; in ocfs2_write_zero_page()
768 BUG_ON(abs_from & (inode->i_blkbits - 1)); in ocfs2_write_zero_page()
770 handle = ocfs2_zero_start_ordered_transaction(inode, di_bh, in ocfs2_write_zero_page()
793 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_write_zero_page()
801 block_end = block_start + i_blocksize(inode); in ocfs2_write_zero_page()
825 i_size_write(inode, abs_to); in ocfs2_write_zero_page()
826 inode->i_blocks = ocfs2_inode_sector_count(inode); in ocfs2_write_zero_page()
827 di->i_size = cpu_to_le64((u64)i_size_read(inode)); in ocfs2_write_zero_page()
828 inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode)); in ocfs2_write_zero_page()
829 di->i_mtime = di->i_ctime = cpu_to_le64(inode_get_mtime_sec(inode)); in ocfs2_write_zero_page()
830 di->i_ctime_nsec = cpu_to_le32(inode_get_mtime_nsec(inode)); in ocfs2_write_zero_page()
834 ocfs2_update_inode_fsync_trans(handle, inode, 1); in ocfs2_write_zero_page()
842 ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle); in ocfs2_write_zero_page()
859 static int ocfs2_zero_extend_get_range(struct inode *inode, in ocfs2_zero_extend_get_range() argument
867 zero_start >> OCFS2_SB(inode->i_sb)->s_clustersize_bits; in ocfs2_zero_extend_get_range()
868 u32 last_cpos = ocfs2_clusters_for_bytes(inode->i_sb, zero_end); in ocfs2_zero_extend_get_range()
873 rc = ocfs2_get_clusters(inode, zero_cpos, &p_cpos, in ocfs2_zero_extend_get_range()
895 rc = ocfs2_get_clusters(inode, zero_cpos + zero_clusters, in ocfs2_zero_extend_get_range()
913 rc = ocfs2_refcount_cow(inode, di_bh, zero_cpos, in ocfs2_zero_extend_get_range()
921 *range_start = ocfs2_clusters_to_bytes(inode->i_sb, zero_cpos); in ocfs2_zero_extend_get_range()
922 *range_end = ocfs2_clusters_to_bytes(inode->i_sb, in ocfs2_zero_extend_get_range()
933 static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start, in ocfs2_zero_extend_range() argument
941 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_zero_extend_range()
950 rc = ocfs2_write_zero_page(inode, zero_pos, next_pos, di_bh); in ocfs2_zero_extend_range()
967 int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh, in ocfs2_zero_extend() argument
972 struct super_block *sb = inode->i_sb; in ocfs2_zero_extend()
974 zero_start = ocfs2_align_bytes_to_blocks(sb, i_size_read(inode)); in ocfs2_zero_extend()
975 trace_ocfs2_zero_extend((unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_zero_extend()
977 (unsigned long long)i_size_read(inode)); in ocfs2_zero_extend()
979 ret = ocfs2_zero_extend_get_range(inode, di_bh, zero_start, in ocfs2_zero_extend()
995 ret = ocfs2_zero_extend_range(inode, range_start, in ocfs2_zero_extend()
1007 int ocfs2_extend_no_holes(struct inode *inode, struct buffer_head *di_bh, in ocfs2_extend_no_holes() argument
1012 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_extend_no_holes()
1018 BUG_ON(!di_bh && ocfs2_is_refcount_inode(inode)); in ocfs2_extend_no_holes()
1021 clusters_to_add = ocfs2_clusters_for_bytes(inode->i_sb, new_i_size); in ocfs2_extend_no_holes()
1028 ret = ocfs2_extend_allocation(inode, oi->ip_clusters, in ocfs2_extend_no_holes()
1041 ret = ocfs2_zero_extend(inode, di_bh, zero_to); in ocfs2_extend_no_holes()
1049 static int ocfs2_extend_file(struct inode *inode, in ocfs2_extend_file() argument
1054 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_extend_file()
1062 if (i_size_read(inode) == new_i_size) in ocfs2_extend_file()
1064 BUG_ON(new_i_size < i_size_read(inode)); in ocfs2_extend_file()
1085 ret = ocfs2_convert_inline_data_to_extents(inode, di_bh); in ocfs2_extend_file()
1093 if (ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb))) in ocfs2_extend_file()
1094 ret = ocfs2_zero_extend(inode, di_bh, new_i_size); in ocfs2_extend_file()
1096 ret = ocfs2_extend_no_holes(inode, di_bh, new_i_size, in ocfs2_extend_file()
1107 ret = ocfs2_simple_size_update(inode, di_bh, new_i_size); in ocfs2_extend_file()
1120 struct inode *inode = d_inode(dentry); in ocfs2_setattr() local
1121 struct super_block *sb = inode->i_sb; in ocfs2_setattr()
1130 trace_ocfs2_setattr(inode, dentry, in ocfs2_setattr()
1131 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_setattr()
1147 if (S_ISLNK(inode->i_mode)) in ocfs2_setattr()
1159 if (is_quota_modification(&nop_mnt_idmap, inode, attr)) { in ocfs2_setattr()
1160 status = dquot_initialize(inode); in ocfs2_setattr()
1164 size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE; in ocfs2_setattr()
1171 inode_dio_wait(inode); in ocfs2_setattr()
1173 status = ocfs2_rw_lock(inode, 1); in ocfs2_setattr()
1180 had_lock = ocfs2_inode_lock_tracker(inode, &bh, 1, &oh); in ocfs2_setattr()
1208 status = inode_newsize_ok(inode, attr->ia_size); in ocfs2_setattr()
1212 if (i_size_read(inode) >= attr->ia_size) { in ocfs2_setattr()
1213 if (ocfs2_should_order_data(inode)) { in ocfs2_setattr()
1214 status = ocfs2_begin_ordered_truncate(inode, in ocfs2_setattr()
1219 status = ocfs2_truncate_file(inode, bh, attr->ia_size); in ocfs2_setattr()
1221 status = ocfs2_extend_file(inode, bh, attr->ia_size); in ocfs2_setattr()
1230 if ((attr->ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) || in ocfs2_setattr()
1231 (attr->ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) { in ocfs2_setattr()
1237 if (attr->ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid) in ocfs2_setattr()
1247 if (attr->ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid) in ocfs2_setattr()
1257 down_write(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_setattr()
1265 status = __dquot_transfer(inode, transfer_to); in ocfs2_setattr()
1269 down_write(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_setattr()
1278 setattr_copy(&nop_mnt_idmap, inode, attr); in ocfs2_setattr()
1279 mark_inode_dirty(inode); in ocfs2_setattr()
1281 status = ocfs2_mark_inode_dirty(handle, inode, bh); in ocfs2_setattr()
1288 up_write(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_setattr()
1291 ocfs2_inode_unlock_tracker(inode, 1, &oh, had_lock); in ocfs2_setattr()
1296 ocfs2_rw_unlock(inode, 1); in ocfs2_setattr()
1304 status = ocfs2_acl_chmod(inode, bh); in ocfs2_setattr()
1309 ocfs2_inode_unlock_tracker(inode, 1, &oh, had_lock); in ocfs2_setattr()
1318 struct inode *inode = d_inode(path->dentry); in ocfs2_getattr() local
1330 generic_fillattr(&nop_mnt_idmap, request_mask, inode, stat); in ocfs2_getattr()
1337 if (unlikely(OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL)) in ocfs2_getattr()
1347 int ocfs2_permission(struct mnt_idmap *idmap, struct inode *inode, in ocfs2_permission() argument
1356 had_lock = ocfs2_inode_lock_tracker(inode, NULL, 0, &oh); in ocfs2_permission()
1373 ret = generic_permission(&nop_mnt_idmap, inode, mask); in ocfs2_permission()
1375 ocfs2_inode_unlock_tracker(inode, 0, &oh, had_lock); in ocfs2_permission()
1380 static int __ocfs2_write_remove_suid(struct inode *inode, in __ocfs2_write_remove_suid() argument
1385 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in __ocfs2_write_remove_suid()
1389 (unsigned long long)OCFS2_I(inode)->ip_blkno, in __ocfs2_write_remove_suid()
1390 inode->i_mode); in __ocfs2_write_remove_suid()
1399 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh, in __ocfs2_write_remove_suid()
1406 inode->i_mode &= ~S_ISUID; in __ocfs2_write_remove_suid()
1407 if ((inode->i_mode & S_ISGID) && (inode->i_mode & S_IXGRP)) in __ocfs2_write_remove_suid()
1408 inode->i_mode &= ~S_ISGID; in __ocfs2_write_remove_suid()
1411 di->i_mode = cpu_to_le16(inode->i_mode); in __ocfs2_write_remove_suid()
1412 ocfs2_update_inode_fsync_trans(handle, inode, 0); in __ocfs2_write_remove_suid()
1422 static int ocfs2_write_remove_suid(struct inode *inode) in ocfs2_write_remove_suid() argument
1427 ret = ocfs2_read_inode_block(inode, &bh); in ocfs2_write_remove_suid()
1433 ret = __ocfs2_write_remove_suid(inode, bh); in ocfs2_write_remove_suid()
1444 static int ocfs2_allocate_unwritten_extents(struct inode *inode, in ocfs2_allocate_unwritten_extents() argument
1452 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) { in ocfs2_allocate_unwritten_extents()
1453 ret = ocfs2_read_inode_block(inode, &di_bh); in ocfs2_allocate_unwritten_extents()
1466 ret = ocfs2_convert_inline_data_to_extents(inode, di_bh); in ocfs2_allocate_unwritten_extents()
1476 cpos = start >> OCFS2_SB(inode->i_sb)->s_clustersize_bits; in ocfs2_allocate_unwritten_extents()
1477 clusters = ocfs2_clusters_for_bytes(inode->i_sb, start + len); in ocfs2_allocate_unwritten_extents()
1481 ret = ocfs2_get_clusters(inode, cpos, &phys_cpos, in ocfs2_allocate_unwritten_extents()
1503 ret = ocfs2_extend_allocation(inode, cpos, alloc_size, 1); in ocfs2_allocate_unwritten_extents()
1526 static void ocfs2_truncate_cluster_pages(struct inode *inode, u64 byte_start, in ocfs2_truncate_cluster_pages() argument
1529 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_truncate_cluster_pages()
1531 struct address_space *mapping = inode->i_mapping; in ocfs2_truncate_cluster_pages()
1533 start = (loff_t)ocfs2_align_bytes_to_clusters(inode->i_sb, byte_start); in ocfs2_truncate_cluster_pages()
1550 static int ocfs2_zeroout_partial_cluster(struct inode *inode, in ocfs2_zeroout_partial_cluster() argument
1557 struct super_block *sb = inode->i_sb; in ocfs2_zeroout_partial_cluster()
1570 ret = ocfs2_get_clusters(inode, cluster, &p_cluster, in ocfs2_zeroout_partial_cluster()
1582 static int ocfs2_zero_partial_clusters(struct inode *inode, in ocfs2_zero_partial_clusters() argument
1588 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_zero_partial_clusters()
1591 loff_t isize = i_size_read(inode); in ocfs2_zero_partial_clusters()
1601 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_zero_partial_clusters()
1622 ret = ocfs2_zeroout_partial_cluster(inode, isize, in ocfs2_zero_partial_clusters()
1660 ret = ocfs2_zero_range_for_truncate(inode, handle, start, in ocfs2_zero_partial_clusters()
1677 ret = ocfs2_zero_range_for_truncate(inode, handle, start, end); in ocfs2_zero_partial_clusters()
1681 ocfs2_update_inode_fsync_trans(handle, inode, 1); in ocfs2_zero_partial_clusters()
1712 static void ocfs2_calc_trunc_pos(struct inode *inode, in ocfs2_calc_trunc_pos() argument
1751 ocfs2_clusters_to_blocks(inode->i_sb, coff); in ocfs2_calc_trunc_pos()
1768 int ocfs2_remove_inode_range(struct inode *inode, in ocfs2_remove_inode_range() argument
1775 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_remove_inode_range()
1777 struct address_space *mapping = inode->i_mapping; in ocfs2_remove_inode_range()
1785 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), di_bh); in ocfs2_remove_inode_range()
1789 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_remove_inode_range()
1796 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) { in ocfs2_remove_inode_range()
1797 int id_count = ocfs2_max_inline_data_with_xattr(inode->i_sb, di); in ocfs2_remove_inode_range()
1805 ret = ocfs2_truncate_inline(inode, di_bh, byte_start, in ocfs2_remove_inode_range()
1828 if (ocfs2_is_refcount_inode(inode)) { in ocfs2_remove_inode_range()
1829 ret = ocfs2_cow_file_pos(inode, di_bh, byte_start); in ocfs2_remove_inode_range()
1835 ret = ocfs2_cow_file_pos(inode, di_bh, byte_start + byte_len); in ocfs2_remove_inode_range()
1846 ret = ocfs2_zero_partial_clusters(inode, byte_start, byte_len); in ocfs2_remove_inode_range()
1861 ret = ocfs2_find_path(INODE_CACHE(inode), path, in ocfs2_remove_inode_range()
1878 ret = ocfs2_find_cpos_for_left_leaf(inode->i_sb, in ocfs2_remove_inode_range()
1906 ocfs2_calc_trunc_pos(inode, el, rec, trunc_start, &trunc_cpos, in ocfs2_remove_inode_range()
1912 phys_cpos = ocfs2_blocks_to_clusters(inode->i_sb, blkno); in ocfs2_remove_inode_range()
1914 ret = ocfs2_remove_btree_range(inode, &et, trunc_cpos, in ocfs2_remove_inode_range()
1927 ocfs2_truncate_cluster_pages(inode, byte_start, byte_len); in ocfs2_remove_inode_range()
1940 static int __ocfs2_change_file_space(struct file *file, struct inode *inode, in __ocfs2_change_file_space() argument
1948 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in __ocfs2_change_file_space()
1951 unsigned long long max_off = inode->i_sb->s_maxbytes; in __ocfs2_change_file_space()
1956 inode_lock(inode); in __ocfs2_change_file_space()
1959 inode_dio_wait(inode); in __ocfs2_change_file_space()
1963 ret = ocfs2_rw_lock(inode, 1); in __ocfs2_change_file_space()
1969 ret = ocfs2_inode_lock(inode, &di_bh, 1); in __ocfs2_change_file_space()
1975 if (inode->i_flags & (S_IMMUTABLE|S_APPEND)) { in __ocfs2_change_file_space()
1987 sr->l_start += i_size_read(inode); in __ocfs2_change_file_space()
2015 ret = __ocfs2_write_remove_suid(inode, di_bh); in __ocfs2_change_file_space()
2022 down_write(&OCFS2_I(inode)->ip_alloc_sem); in __ocfs2_change_file_space()
2030 ret = ocfs2_allocate_unwritten_extents(inode, sr->l_start, in __ocfs2_change_file_space()
2035 ret = ocfs2_remove_inode_range(inode, di_bh, sr->l_start, in __ocfs2_change_file_space()
2042 orig_isize = i_size_read(inode); in __ocfs2_change_file_space()
2045 ret = ocfs2_zeroout_partial_cluster(inode, orig_isize, in __ocfs2_change_file_space()
2048 i_size_write(inode, size); in __ocfs2_change_file_space()
2050 up_write(&OCFS2_I(inode)->ip_alloc_sem); in __ocfs2_change_file_space()
2066 inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode)); in __ocfs2_change_file_space()
2067 ret = ocfs2_mark_inode_dirty(handle, inode, di_bh); in __ocfs2_change_file_space()
2078 ocfs2_inode_unlock(inode, 1); in __ocfs2_change_file_space()
2080 ocfs2_rw_unlock(inode, 1); in __ocfs2_change_file_space()
2083 inode_unlock(inode); in __ocfs2_change_file_space()
2090 struct inode *inode = file_inode(file); in ocfs2_change_file_space() local
2091 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_change_file_space()
2101 if (!S_ISREG(inode->i_mode)) in ocfs2_change_file_space()
2110 ret = __ocfs2_change_file_space(file, inode, file->f_pos, cmd, sr, 0); in ocfs2_change_file_space()
2118 struct inode *inode = file_inode(file); in ocfs2_fallocate() local
2119 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_fallocate()
2133 ret = inode_newsize_ok(inode, offset + len); in ocfs2_fallocate()
2145 return __ocfs2_change_file_space(NULL, inode, offset, cmd, &sr, in ocfs2_fallocate()
2149 int ocfs2_check_range_for_refcount(struct inode *inode, loff_t pos, in ocfs2_check_range_for_refcount() argument
2155 struct super_block *sb = inode->i_sb; in ocfs2_check_range_for_refcount()
2157 if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb)) || in ocfs2_check_range_for_refcount()
2158 !ocfs2_is_refcount_inode(inode) || in ocfs2_check_range_for_refcount()
2159 OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) in ocfs2_check_range_for_refcount()
2166 ret = ocfs2_get_clusters(inode, cpos, &phys_cpos, &extent_len, in ocfs2_check_range_for_refcount()
2188 static int ocfs2_is_io_unaligned(struct inode *inode, size_t count, loff_t pos) in ocfs2_is_io_unaligned() argument
2190 int blockmask = inode->i_sb->s_blocksize - 1; in ocfs2_is_io_unaligned()
2198 static int ocfs2_inode_lock_for_extent_tree(struct inode *inode, in ocfs2_inode_lock_for_extent_tree() argument
2207 ret = ocfs2_inode_lock(inode, di_bh, meta_level); in ocfs2_inode_lock_for_extent_tree()
2209 ret = ocfs2_try_inode_lock(inode, di_bh, meta_level); in ocfs2_inode_lock_for_extent_tree()
2215 down_write(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_inode_lock_for_extent_tree()
2217 down_read(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_inode_lock_for_extent_tree()
2220 ret = down_write_trylock(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_inode_lock_for_extent_tree()
2222 ret = down_read_trylock(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_inode_lock_for_extent_tree()
2235 ocfs2_inode_unlock(inode, meta_level); in ocfs2_inode_lock_for_extent_tree()
2240 static void ocfs2_inode_unlock_for_extent_tree(struct inode *inode, in ocfs2_inode_unlock_for_extent_tree() argument
2246 up_write(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_inode_unlock_for_extent_tree()
2248 up_read(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_inode_unlock_for_extent_tree()
2254 ocfs2_inode_unlock(inode, meta_level); in ocfs2_inode_unlock_for_extent_tree()
2263 struct inode *inode = d_inode(dentry); in ocfs2_prepare_inode_for_write() local
2273 ret = ocfs2_inode_lock_for_extent_tree(inode, in ocfs2_prepare_inode_for_write()
2291 ret = ocfs2_overwrite_io(inode, di_bh, pos, count); in ocfs2_prepare_inode_for_write()
2308 if (setattr_should_drop_suidgid(&nop_mnt_idmap, inode)) { in ocfs2_prepare_inode_for_write()
2310 ocfs2_inode_unlock_for_extent_tree(inode, in ocfs2_prepare_inode_for_write()
2318 ret = ocfs2_write_remove_suid(inode); in ocfs2_prepare_inode_for_write()
2325 ret = ocfs2_check_range_for_refcount(inode, pos, count); in ocfs2_prepare_inode_for_write()
2327 ocfs2_inode_unlock_for_extent_tree(inode, in ocfs2_prepare_inode_for_write()
2333 ret = ocfs2_inode_lock_for_extent_tree(inode, in ocfs2_prepare_inode_for_write()
2344 cpos = pos >> OCFS2_SB(inode->i_sb)->s_clustersize_bits; in ocfs2_prepare_inode_for_write()
2346 ocfs2_clusters_for_bytes(inode->i_sb, pos + count) - cpos; in ocfs2_prepare_inode_for_write()
2347 ret = ocfs2_refcount_cow(inode, di_bh, cpos, clusters, UINT_MAX); in ocfs2_prepare_inode_for_write()
2360 trace_ocfs2_prepare_inode_for_write(OCFS2_I(inode)->ip_blkno, in ocfs2_prepare_inode_for_write()
2363 ocfs2_inode_unlock_for_extent_tree(inode, in ocfs2_prepare_inode_for_write()
2380 struct inode *inode = file_inode(file); in ocfs2_file_write_iter() local
2381 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_file_write_iter()
2386 i_size_read(inode) ? 1 : 0); in ocfs2_file_write_iter()
2390 trace_ocfs2_file_write_iter(inode, file, file->f_path.dentry, in ocfs2_file_write_iter()
2391 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_file_write_iter()
2403 if (!inode_trylock(inode)) in ocfs2_file_write_iter()
2406 inode_lock(inode); in ocfs2_file_write_iter()
2418 ret = ocfs2_try_rw_lock(inode, rw_level); in ocfs2_file_write_iter()
2420 ret = ocfs2_rw_lock(inode, rw_level); in ocfs2_file_write_iter()
2438 ret = ocfs2_try_inode_lock(inode, NULL, 1); in ocfs2_file_write_iter()
2440 ret = ocfs2_inode_lock(inode, NULL, 1); in ocfs2_file_write_iter()
2447 ocfs2_inode_unlock(inode, 1); in ocfs2_file_write_iter()
2466 ocfs2_is_io_unaligned(inode, count, iocb->ki_pos)) { in ocfs2_file_write_iter()
2497 IS_SYNC(inode)) { in ocfs2_file_write_iter()
2521 ocfs2_rw_unlock(inode, rw_level); in ocfs2_file_write_iter()
2524 inode_unlock(inode); in ocfs2_file_write_iter()
2536 struct inode *inode = file_inode(filp); in ocfs2_file_read_iter() local
2540 trace_ocfs2_file_read_iter(inode, filp, filp->f_path.dentry, in ocfs2_file_read_iter()
2541 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_file_read_iter()
2547 if (!inode) { in ocfs2_file_read_iter()
2564 ret = ocfs2_try_rw_lock(inode, 0); in ocfs2_file_read_iter()
2566 ret = ocfs2_rw_lock(inode, 0); in ocfs2_file_read_iter()
2587 ret = ocfs2_inode_lock_atime(inode, filp->f_path.mnt, &lock_level, in ocfs2_file_read_iter()
2594 ocfs2_inode_unlock(inode, lock_level); in ocfs2_file_read_iter()
2609 ocfs2_rw_unlock(inode, rw_level); in ocfs2_file_read_iter()
2618 struct inode *inode = file_inode(in); in ocfs2_file_splice_read() local
2622 trace_ocfs2_file_splice_read(inode, in, in->f_path.dentry, in ocfs2_file_splice_read()
2623 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_file_splice_read()
2637 ret = ocfs2_inode_lock_atime(inode, in->f_path.mnt, &lock_level, 1); in ocfs2_file_splice_read()
2643 ocfs2_inode_unlock(inode, lock_level); in ocfs2_file_splice_read()
2654 struct inode *inode = file->f_mapping->host; in ocfs2_file_llseek() local
2657 inode_lock(inode); in ocfs2_file_llseek()
2666 ret = ocfs2_inode_lock(inode, NULL, 0); in ocfs2_file_llseek()
2671 offset += i_size_read(inode); in ocfs2_file_llseek()
2672 ocfs2_inode_unlock(inode, 0); in ocfs2_file_llseek()
2692 offset = vfs_setpos(file, offset, inode->i_sb->s_maxbytes); in ocfs2_file_llseek()
2695 inode_unlock(inode); in ocfs2_file_llseek()
2705 struct inode *inode_in = file_inode(file_in); in ocfs2_remap_file_range()
2706 struct inode *inode_out = file_inode(file_out); in ocfs2_remap_file_range()