Lines Matching refs:inode

67 static int ocfs2_init_file_private(struct inode *inode, struct file *file)  in ocfs2_init_file_private()  argument
83 static void ocfs2_free_file_private(struct inode *inode, struct file *file) in ocfs2_free_file_private() argument
86 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_free_file_private()
96 static int ocfs2_file_open(struct inode *inode, struct file *file) in ocfs2_file_open() argument
100 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_file_open()
102 trace_ocfs2_file_open(inode, file, file->f_path.dentry, in ocfs2_file_open()
103 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_file_open()
108 dquot_initialize(inode); in ocfs2_file_open()
115 if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_DELETED) { in ocfs2_file_open()
128 status = ocfs2_init_file_private(inode, file); in ocfs2_file_open()
143 static int ocfs2_file_release(struct inode *inode, struct file *file) in ocfs2_file_release() argument
145 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_file_release()
151 trace_ocfs2_file_release(inode, file, file->f_path.dentry, in ocfs2_file_release()
158 ocfs2_free_file_private(inode, file); in ocfs2_file_release()
163 static int ocfs2_dir_open(struct inode *inode, struct file *file) in ocfs2_dir_open() argument
165 return ocfs2_init_file_private(inode, file); in ocfs2_dir_open()
168 static int ocfs2_dir_release(struct inode *inode, struct file *file) in ocfs2_dir_release() argument
170 ocfs2_free_file_private(inode, file); in ocfs2_dir_release()
178 struct inode *inode = file->f_mapping->host; in ocfs2_sync_file() local
179 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_sync_file()
180 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_sync_file()
186 trace_ocfs2_sync_file(inode, file, file->f_path.dentry, in ocfs2_sync_file()
187 OCFS2_I(inode)->ip_blkno, in ocfs2_sync_file()
195 err = filemap_write_and_wait_range(inode->i_mapping, start, end); in ocfs2_sync_file()
205 ret = blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); in ocfs2_sync_file()
216 int ocfs2_should_update_atime(struct inode *inode, in ocfs2_should_update_atime() argument
220 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_should_update_atime()
225 if ((inode->i_flags & S_NOATIME) || in ocfs2_should_update_atime()
226 ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode))) in ocfs2_should_update_atime()
241 ((vfsmnt->mnt_flags & MNT_NODIRATIME) && S_ISDIR(inode->i_mode))) in ocfs2_should_update_atime()
245 if ((timespec_compare(&inode->i_atime, &inode->i_mtime) <= 0) || in ocfs2_should_update_atime()
246 (timespec_compare(&inode->i_atime, &inode->i_ctime) <= 0)) in ocfs2_should_update_atime()
253 if ((now.tv_sec - inode->i_atime.tv_sec <= osb->s_atime_quantum)) in ocfs2_should_update_atime()
259 int ocfs2_update_inode_atime(struct inode *inode, in ocfs2_update_inode_atime() argument
263 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_update_inode_atime()
274 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh, in ocfs2_update_inode_atime()
286 inode->i_atime = CURRENT_TIME; in ocfs2_update_inode_atime()
287 di->i_atime = cpu_to_le64(inode->i_atime.tv_sec); in ocfs2_update_inode_atime()
288 di->i_atime_nsec = cpu_to_le32(inode->i_atime.tv_nsec); in ocfs2_update_inode_atime()
289 ocfs2_update_inode_fsync_trans(handle, inode, 0); in ocfs2_update_inode_atime()
293 ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle); in ocfs2_update_inode_atime()
299 struct inode *inode, in ocfs2_set_inode_size() argument
305 i_size_write(inode, new_i_size); in ocfs2_set_inode_size()
306 inode->i_blocks = ocfs2_inode_sector_count(inode); in ocfs2_set_inode_size()
307 inode->i_ctime = inode->i_mtime = CURRENT_TIME; in ocfs2_set_inode_size()
309 status = ocfs2_mark_inode_dirty(handle, inode, fe_bh); in ocfs2_set_inode_size()
319 int ocfs2_simple_size_update(struct inode *inode, in ocfs2_simple_size_update() argument
324 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_simple_size_update()
334 ret = ocfs2_set_inode_size(handle, inode, di_bh, in ocfs2_simple_size_update()
339 ocfs2_update_inode_fsync_trans(handle, inode, 0); in ocfs2_simple_size_update()
345 static int ocfs2_cow_file_pos(struct inode *inode, in ocfs2_cow_file_pos() argument
350 u32 phys, cpos = offset >> OCFS2_SB(inode->i_sb)->s_clustersize_bits; in ocfs2_cow_file_pos()
359 if ((offset & (OCFS2_SB(inode->i_sb)->s_clustersize - 1)) == 0) in ocfs2_cow_file_pos()
362 status = ocfs2_get_clusters(inode, cpos, &phys, in ocfs2_cow_file_pos()
372 return ocfs2_refcount_cow(inode, fe_bh, cpos, 1, cpos+1); in ocfs2_cow_file_pos()
379 struct inode *inode, in ocfs2_orphan_for_truncate() argument
393 status = ocfs2_cow_file_pos(inode, fe_bh, new_i_size); in ocfs2_orphan_for_truncate()
409 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh, in ocfs2_orphan_for_truncate()
419 cluster_bytes = ocfs2_align_bytes_to_clusters(inode->i_sb, new_i_size); in ocfs2_orphan_for_truncate()
420 status = ocfs2_zero_range_for_truncate(inode, handle, new_i_size, in ocfs2_orphan_for_truncate()
427 i_size_write(inode, new_i_size); in ocfs2_orphan_for_truncate()
428 inode->i_ctime = inode->i_mtime = CURRENT_TIME; in ocfs2_orphan_for_truncate()
432 di->i_ctime = di->i_mtime = cpu_to_le64(inode->i_ctime.tv_sec); in ocfs2_orphan_for_truncate()
433 di->i_ctime_nsec = di->i_mtime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec); in ocfs2_orphan_for_truncate()
434 ocfs2_update_inode_fsync_trans(handle, inode, 0); in ocfs2_orphan_for_truncate()
444 int ocfs2_truncate_file(struct inode *inode, in ocfs2_truncate_file() argument
450 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_truncate_file()
456 trace_ocfs2_truncate_file((unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_truncate_file()
460 mlog_bug_on_msg(le64_to_cpu(fe->i_size) != i_size_read(inode), in ocfs2_truncate_file()
463 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_truncate_file()
464 i_size_read(inode), in ocfs2_truncate_file()
477 down_write(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_truncate_file()
480 &OCFS2_I(inode)->ip_la_data_resv); in ocfs2_truncate_file()
489 unmap_mapping_range(inode->i_mapping, new_i_size + PAGE_SIZE - 1, 0, 1); in ocfs2_truncate_file()
490 truncate_inode_pages(inode->i_mapping, new_i_size); in ocfs2_truncate_file()
492 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) { in ocfs2_truncate_file()
493 status = ocfs2_truncate_inline(inode, di_bh, new_i_size, in ocfs2_truncate_file()
494 i_size_read(inode), 1); in ocfs2_truncate_file()
505 status = ocfs2_orphan_for_truncate(osb, inode, di_bh, new_i_size); in ocfs2_truncate_file()
511 status = ocfs2_commit_truncate(osb, inode, di_bh); in ocfs2_truncate_file()
519 up_write(&OCFS2_I(inode)->ip_alloc_sem); in ocfs2_truncate_file()
522 if (!status && OCFS2_I(inode)->ip_clusters == 0) in ocfs2_truncate_file()
523 status = ocfs2_try_remove_refcount_tree(inode, di_bh); in ocfs2_truncate_file()
539 struct inode *inode, in ocfs2_add_inode_data() argument
552 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), fe_bh); in ocfs2_add_inode_data()
560 static int __ocfs2_extend_allocation(struct inode *inode, u32 logical_start, in __ocfs2_extend_allocation() argument
573 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in __ocfs2_extend_allocation()
583 status = ocfs2_read_inode_block(inode, &bh); in __ocfs2_extend_allocation()
591 BUG_ON(le32_to_cpu(fe->i_clusters) != OCFS2_I(inode)->ip_clusters); in __ocfs2_extend_allocation()
593 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), bh); in __ocfs2_extend_allocation()
594 status = ocfs2_lock_allocators(inode, &et, clusters_to_add, 0, in __ocfs2_extend_allocation()
612 (unsigned long long)OCFS2_I(inode)->ip_blkno, in __ocfs2_extend_allocation()
613 (unsigned long long)i_size_read(inode), in __ocfs2_extend_allocation()
617 status = dquot_alloc_space_nodirty(inode, in __ocfs2_extend_allocation()
626 status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh, in __ocfs2_extend_allocation()
633 prev_clusters = OCFS2_I(inode)->ip_clusters; in __ocfs2_extend_allocation()
636 inode, in __ocfs2_extend_allocation()
650 ocfs2_update_inode_fsync_trans(handle, inode, 1); in __ocfs2_extend_allocation()
653 spin_lock(&OCFS2_I(inode)->ip_lock); in __ocfs2_extend_allocation()
654 clusters_to_add -= (OCFS2_I(inode)->ip_clusters - prev_clusters); in __ocfs2_extend_allocation()
655 spin_unlock(&OCFS2_I(inode)->ip_lock); in __ocfs2_extend_allocation()
657 dquot_free_space(inode, in __ocfs2_extend_allocation()
680 trace_ocfs2_extend_allocation_end(OCFS2_I(inode)->ip_blkno, in __ocfs2_extend_allocation()
683 OCFS2_I(inode)->ip_clusters, in __ocfs2_extend_allocation()
684 (unsigned long long)i_size_read(inode)); in __ocfs2_extend_allocation()
688 dquot_free_space(inode, in __ocfs2_extend_allocation()
712 int ocfs2_extend_allocation(struct inode *inode, u32 logical_start, in ocfs2_extend_allocation() argument
715 return __ocfs2_extend_allocation(inode, logical_start, in ocfs2_extend_allocation()
723 static handle_t *ocfs2_zero_start_ordered_transaction(struct inode *inode, in ocfs2_zero_start_ordered_transaction() argument
726 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_zero_start_ordered_transaction()
730 if (!ocfs2_should_order_data(inode)) in ocfs2_zero_start_ordered_transaction()
740 ret = ocfs2_jbd2_file_inode(handle, inode); in ocfs2_zero_start_ordered_transaction()
746 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), di_bh, in ocfs2_zero_start_ordered_transaction()
750 ocfs2_update_inode_fsync_trans(handle, inode, 1); in ocfs2_zero_start_ordered_transaction()
764 static int ocfs2_write_zero_page(struct inode *inode, u64 abs_from, in ocfs2_write_zero_page() argument
767 struct address_space *mapping = inode->i_mapping; in ocfs2_write_zero_page()
777 BUG_ON(abs_from & (inode->i_blkbits - 1)); in ocfs2_write_zero_page()
779 handle = ocfs2_zero_start_ordered_transaction(inode, di_bh); in ocfs2_write_zero_page()
799 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_write_zero_page()
807 block_end = block_start + (1 << inode->i_blkbits); in ocfs2_write_zero_page()
836 i_size_write(inode, abs_to); in ocfs2_write_zero_page()
837 inode->i_blocks = ocfs2_inode_sector_count(inode); in ocfs2_write_zero_page()
838 di->i_size = cpu_to_le64((u64)i_size_read(inode)); in ocfs2_write_zero_page()
839 inode->i_mtime = inode->i_ctime = CURRENT_TIME; in ocfs2_write_zero_page()
840 di->i_mtime = di->i_ctime = cpu_to_le64(inode->i_mtime.tv_sec); in ocfs2_write_zero_page()
841 di->i_ctime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec); in ocfs2_write_zero_page()
845 ocfs2_update_inode_fsync_trans(handle, inode, 1); in ocfs2_write_zero_page()
853 ocfs2_commit_trans(OCFS2_SB(inode->i_sb), handle); in ocfs2_write_zero_page()
870 static int ocfs2_zero_extend_get_range(struct inode *inode, in ocfs2_zero_extend_get_range() argument
878 zero_start >> OCFS2_SB(inode->i_sb)->s_clustersize_bits; in ocfs2_zero_extend_get_range()
879 u32 last_cpos = ocfs2_clusters_for_bytes(inode->i_sb, zero_end); in ocfs2_zero_extend_get_range()
884 rc = ocfs2_get_clusters(inode, zero_cpos, &p_cpos, in ocfs2_zero_extend_get_range()
906 rc = ocfs2_get_clusters(inode, zero_cpos + zero_clusters, in ocfs2_zero_extend_get_range()
924 rc = ocfs2_refcount_cow(inode, di_bh, zero_cpos, in ocfs2_zero_extend_get_range()
932 *range_start = ocfs2_clusters_to_bytes(inode->i_sb, zero_cpos); in ocfs2_zero_extend_get_range()
933 *range_end = ocfs2_clusters_to_bytes(inode->i_sb, in ocfs2_zero_extend_get_range()
944 static int ocfs2_zero_extend_range(struct inode *inode, u64 range_start, in ocfs2_zero_extend_range() argument
952 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_zero_extend_range()
961 rc = ocfs2_write_zero_page(inode, zero_pos, next_pos, di_bh); in ocfs2_zero_extend_range()
978 int ocfs2_zero_extend(struct inode *inode, struct buffer_head *di_bh, in ocfs2_zero_extend() argument
983 struct super_block *sb = inode->i_sb; in ocfs2_zero_extend()
985 zero_start = ocfs2_align_bytes_to_blocks(sb, i_size_read(inode)); in ocfs2_zero_extend()
986 trace_ocfs2_zero_extend((unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_zero_extend()
988 (unsigned long long)i_size_read(inode)); in ocfs2_zero_extend()
990 ret = ocfs2_zero_extend_get_range(inode, di_bh, zero_start, in ocfs2_zero_extend()
1006 ret = ocfs2_zero_extend_range(inode, range_start, in ocfs2_zero_extend()
1018 int ocfs2_extend_no_holes(struct inode *inode, struct buffer_head *di_bh, in ocfs2_extend_no_holes() argument
1023 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_extend_no_holes()
1032 clusters_to_add = ocfs2_clusters_for_bytes(inode->i_sb, new_i_size); in ocfs2_extend_no_holes()
1039 ret = __ocfs2_extend_allocation(inode, oi->ip_clusters, in ocfs2_extend_no_holes()
1052 ret = ocfs2_zero_extend(inode, di_bh, zero_to); in ocfs2_extend_no_holes()
1060 static int ocfs2_extend_file(struct inode *inode, in ocfs2_extend_file() argument
1065 struct ocfs2_inode_info *oi = OCFS2_I(inode); in ocfs2_extend_file()
1073 if (i_size_read(inode) == new_i_size) in ocfs2_extend_file()
1075 BUG_ON(new_i_size < i_size_read(inode)); in ocfs2_extend_file()
1096 ret = ocfs2_convert_inline_data_to_extents(inode, di_bh); in ocfs2_extend_file()
1104 if (ocfs2_sparse_alloc(OCFS2_SB(inode->i_sb))) in ocfs2_extend_file()
1105 ret = ocfs2_zero_extend(inode, di_bh, new_i_size); in ocfs2_extend_file()
1107 ret = ocfs2_extend_no_holes(inode, di_bh, new_i_size, in ocfs2_extend_file()
1118 ret = ocfs2_simple_size_update(inode, di_bh, new_i_size); in ocfs2_extend_file()
1129 struct inode *inode = d_inode(dentry); in ocfs2_setattr() local
1130 struct super_block *sb = inode->i_sb; in ocfs2_setattr()
1137 trace_ocfs2_setattr(inode, dentry, in ocfs2_setattr()
1138 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_setattr()
1145 if (S_ISLNK(inode->i_mode)) in ocfs2_setattr()
1153 status = inode_change_ok(inode, attr); in ocfs2_setattr()
1157 if (is_quota_modification(inode, attr)) in ocfs2_setattr()
1158 dquot_initialize(inode); in ocfs2_setattr()
1159 size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE; in ocfs2_setattr()
1161 status = ocfs2_rw_lock(inode, 1); in ocfs2_setattr()
1168 status = ocfs2_inode_lock(inode, &bh, 1); in ocfs2_setattr()
1176 status = inode_newsize_ok(inode, attr->ia_size); in ocfs2_setattr()
1180 inode_dio_wait(inode); in ocfs2_setattr()
1182 if (i_size_read(inode) >= attr->ia_size) { in ocfs2_setattr()
1183 if (ocfs2_should_order_data(inode)) { in ocfs2_setattr()
1184 status = ocfs2_begin_ordered_truncate(inode, in ocfs2_setattr()
1189 status = ocfs2_truncate_file(inode, bh, attr->ia_size); in ocfs2_setattr()
1191 status = ocfs2_extend_file(inode, bh, attr->ia_size); in ocfs2_setattr()
1200 if ((attr->ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid)) || in ocfs2_setattr()
1201 (attr->ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid))) { in ocfs2_setattr()
1207 if (attr->ia_valid & ATTR_UID && !uid_eq(attr->ia_uid, inode->i_uid) in ocfs2_setattr()
1216 if (attr->ia_valid & ATTR_GID && !gid_eq(attr->ia_gid, inode->i_gid) in ocfs2_setattr()
1232 status = __dquot_transfer(inode, transfer_to); in ocfs2_setattr()
1244 setattr_copy(inode, attr); in ocfs2_setattr()
1245 mark_inode_dirty(inode); in ocfs2_setattr()
1247 status = ocfs2_mark_inode_dirty(handle, inode, bh); in ocfs2_setattr()
1254 ocfs2_inode_unlock(inode, 1); in ocfs2_setattr()
1257 ocfs2_rw_unlock(inode, 1); in ocfs2_setattr()
1265 status = ocfs2_acl_chmod(inode, bh); in ocfs2_setattr()
1278 struct inode *inode = d_inode(dentry); in ocfs2_getattr() local
1290 generic_fillattr(inode, stat); in ocfs2_getattr()
1299 int ocfs2_permission(struct inode *inode, int mask) in ocfs2_permission() argument
1306 ret = ocfs2_inode_lock(inode, NULL, 0); in ocfs2_permission()
1313 ret = generic_permission(inode, mask); in ocfs2_permission()
1315 ocfs2_inode_unlock(inode, 0); in ocfs2_permission()
1320 static int __ocfs2_write_remove_suid(struct inode *inode, in __ocfs2_write_remove_suid() argument
1325 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in __ocfs2_write_remove_suid()
1329 (unsigned long long)OCFS2_I(inode)->ip_blkno, in __ocfs2_write_remove_suid()
1330 inode->i_mode); in __ocfs2_write_remove_suid()
1339 ret = ocfs2_journal_access_di(handle, INODE_CACHE(inode), bh, in __ocfs2_write_remove_suid()
1346 inode->i_mode &= ~S_ISUID; in __ocfs2_write_remove_suid()
1347 if ((inode->i_mode & S_ISGID) && (inode->i_mode & S_IXGRP)) in __ocfs2_write_remove_suid()
1348 inode->i_mode &= ~S_ISGID; in __ocfs2_write_remove_suid()
1351 di->i_mode = cpu_to_le16(inode->i_mode); in __ocfs2_write_remove_suid()
1352 ocfs2_update_inode_fsync_trans(handle, inode, 0); in __ocfs2_write_remove_suid()
1366 static int ocfs2_check_range_for_holes(struct inode *inode, loff_t pos, in ocfs2_check_range_for_holes() argument
1372 struct super_block *sb = inode->i_sb; in ocfs2_check_range_for_holes()
1378 ret = ocfs2_get_clusters(inode, cpos, &phys_cpos, &extent_len, in ocfs2_check_range_for_holes()
1400 static int ocfs2_write_remove_suid(struct inode *inode) in ocfs2_write_remove_suid() argument
1405 ret = ocfs2_read_inode_block(inode, &bh); in ocfs2_write_remove_suid()
1411 ret = __ocfs2_write_remove_suid(inode, bh); in ocfs2_write_remove_suid()
1422 static int ocfs2_allocate_unwritten_extents(struct inode *inode, in ocfs2_allocate_unwritten_extents() argument
1430 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) { in ocfs2_allocate_unwritten_extents()
1431 ret = ocfs2_read_inode_block(inode, &di_bh); in ocfs2_allocate_unwritten_extents()
1444 ret = ocfs2_convert_inline_data_to_extents(inode, di_bh); in ocfs2_allocate_unwritten_extents()
1454 cpos = start >> OCFS2_SB(inode->i_sb)->s_clustersize_bits; in ocfs2_allocate_unwritten_extents()
1455 clusters = ocfs2_clusters_for_bytes(inode->i_sb, start + len); in ocfs2_allocate_unwritten_extents()
1459 ret = ocfs2_get_clusters(inode, cpos, &phys_cpos, in ocfs2_allocate_unwritten_extents()
1481 ret = __ocfs2_extend_allocation(inode, cpos, alloc_size, 1); in ocfs2_allocate_unwritten_extents()
1504 static void ocfs2_truncate_cluster_pages(struct inode *inode, u64 byte_start, in ocfs2_truncate_cluster_pages() argument
1507 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_truncate_cluster_pages()
1509 struct address_space *mapping = inode->i_mapping; in ocfs2_truncate_cluster_pages()
1511 start = (loff_t)ocfs2_align_bytes_to_clusters(inode->i_sb, byte_start); in ocfs2_truncate_cluster_pages()
1521 static int ocfs2_zero_partial_clusters(struct inode *inode, in ocfs2_zero_partial_clusters() argument
1526 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_zero_partial_clusters()
1538 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_zero_partial_clusters()
1566 ret = ocfs2_zero_range_for_truncate(inode, handle, start, tmpend); in ocfs2_zero_partial_clusters()
1581 ret = ocfs2_zero_range_for_truncate(inode, handle, start, end); in ocfs2_zero_partial_clusters()
1585 ocfs2_update_inode_fsync_trans(handle, inode, 1); in ocfs2_zero_partial_clusters()
1616 static void ocfs2_calc_trunc_pos(struct inode *inode, in ocfs2_calc_trunc_pos() argument
1655 ocfs2_clusters_to_blocks(inode->i_sb, coff); in ocfs2_calc_trunc_pos()
1672 static int ocfs2_remove_inode_range(struct inode *inode, in ocfs2_remove_inode_range() argument
1679 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_remove_inode_range()
1681 struct address_space *mapping = inode->i_mapping; in ocfs2_remove_inode_range()
1689 ocfs2_init_dinode_extent_tree(&et, INODE_CACHE(inode), di_bh); in ocfs2_remove_inode_range()
1693 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_remove_inode_range()
1700 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) { in ocfs2_remove_inode_range()
1701 ret = ocfs2_truncate_inline(inode, di_bh, byte_start, in ocfs2_remove_inode_range()
1724 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL) { in ocfs2_remove_inode_range()
1726 ret = ocfs2_cow_file_pos(inode, di_bh, byte_start); in ocfs2_remove_inode_range()
1732 ret = ocfs2_cow_file_pos(inode, di_bh, byte_start + byte_len); in ocfs2_remove_inode_range()
1743 ret = ocfs2_zero_partial_clusters(inode, byte_start, byte_len); in ocfs2_remove_inode_range()
1758 ret = ocfs2_find_path(INODE_CACHE(inode), path, in ocfs2_remove_inode_range()
1775 ret = ocfs2_find_cpos_for_left_leaf(inode->i_sb, in ocfs2_remove_inode_range()
1803 ocfs2_calc_trunc_pos(inode, el, rec, trunc_start, &trunc_cpos, in ocfs2_remove_inode_range()
1809 phys_cpos = ocfs2_blocks_to_clusters(inode->i_sb, blkno); in ocfs2_remove_inode_range()
1811 ret = ocfs2_remove_btree_range(inode, &et, trunc_cpos, in ocfs2_remove_inode_range()
1824 ocfs2_truncate_cluster_pages(inode, byte_start, byte_len); in ocfs2_remove_inode_range()
1837 static int __ocfs2_change_file_space(struct file *file, struct inode *inode, in __ocfs2_change_file_space() argument
1845 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in __ocfs2_change_file_space()
1848 unsigned long long max_off = inode->i_sb->s_maxbytes; in __ocfs2_change_file_space()
1853 mutex_lock(&inode->i_mutex); in __ocfs2_change_file_space()
1858 ret = ocfs2_rw_lock(inode, 1); in __ocfs2_change_file_space()
1864 ret = ocfs2_inode_lock(inode, &di_bh, 1); in __ocfs2_change_file_space()
1870 if (inode->i_flags & (S_IMMUTABLE|S_APPEND)) { in __ocfs2_change_file_space()
1882 sr->l_start += i_size_read(inode); in __ocfs2_change_file_space()
1910 ret = __ocfs2_write_remove_suid(inode, di_bh); in __ocfs2_change_file_space()
1917 down_write(&OCFS2_I(inode)->ip_alloc_sem); in __ocfs2_change_file_space()
1925 ret = ocfs2_allocate_unwritten_extents(inode, sr->l_start, in __ocfs2_change_file_space()
1930 ret = ocfs2_remove_inode_range(inode, di_bh, sr->l_start, in __ocfs2_change_file_space()
1936 up_write(&OCFS2_I(inode)->ip_alloc_sem); in __ocfs2_change_file_space()
1952 if (change_size && i_size_read(inode) < size) in __ocfs2_change_file_space()
1953 i_size_write(inode, size); in __ocfs2_change_file_space()
1955 inode->i_ctime = inode->i_mtime = CURRENT_TIME; in __ocfs2_change_file_space()
1956 ret = ocfs2_mark_inode_dirty(handle, inode, di_bh); in __ocfs2_change_file_space()
1967 ocfs2_inode_unlock(inode, 1); in __ocfs2_change_file_space()
1969 ocfs2_rw_unlock(inode, 1); in __ocfs2_change_file_space()
1972 mutex_unlock(&inode->i_mutex); in __ocfs2_change_file_space()
1979 struct inode *inode = file_inode(file); in ocfs2_change_file_space() local
1980 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_change_file_space()
1990 if (!S_ISREG(inode->i_mode)) in ocfs2_change_file_space()
1999 ret = __ocfs2_change_file_space(file, inode, file->f_pos, cmd, sr, 0); in ocfs2_change_file_space()
2007 struct inode *inode = file_inode(file); in ocfs2_fallocate() local
2008 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_fallocate()
2028 return __ocfs2_change_file_space(NULL, inode, offset, cmd, &sr, in ocfs2_fallocate()
2032 int ocfs2_check_range_for_refcount(struct inode *inode, loff_t pos, in ocfs2_check_range_for_refcount() argument
2038 struct super_block *sb = inode->i_sb; in ocfs2_check_range_for_refcount()
2040 if (!ocfs2_refcount_tree(OCFS2_SB(inode->i_sb)) || in ocfs2_check_range_for_refcount()
2041 !(OCFS2_I(inode)->ip_dyn_features & OCFS2_HAS_REFCOUNT_FL) || in ocfs2_check_range_for_refcount()
2042 OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) in ocfs2_check_range_for_refcount()
2049 ret = ocfs2_get_clusters(inode, cpos, &phys_cpos, &extent_len, in ocfs2_check_range_for_refcount()
2071 static int ocfs2_is_io_unaligned(struct inode *inode, size_t count, loff_t pos) in ocfs2_is_io_unaligned() argument
2073 int blockmask = inode->i_sb->s_blocksize - 1; in ocfs2_is_io_unaligned()
2081 static int ocfs2_prepare_inode_for_refcount(struct inode *inode, in ocfs2_prepare_inode_for_refcount() argument
2088 u32 cpos = pos >> OCFS2_SB(inode->i_sb)->s_clustersize_bits; in ocfs2_prepare_inode_for_refcount()
2090 ocfs2_clusters_for_bytes(inode->i_sb, pos + count) - cpos; in ocfs2_prepare_inode_for_refcount()
2092 ret = ocfs2_inode_lock(inode, &di_bh, 1); in ocfs2_prepare_inode_for_refcount()
2100 ret = ocfs2_refcount_cow(inode, di_bh, cpos, clusters, UINT_MAX); in ocfs2_prepare_inode_for_refcount()
2117 struct inode *inode = d_inode(dentry); in ocfs2_prepare_inode_for_write() local
2119 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_prepare_inode_for_write()
2128 ret = ocfs2_inode_lock(inode, NULL, meta_level); in ocfs2_prepare_inode_for_write()
2146 ocfs2_inode_unlock(inode, meta_level); in ocfs2_prepare_inode_for_write()
2151 ret = ocfs2_write_remove_suid(inode); in ocfs2_prepare_inode_for_write()
2160 ret = ocfs2_check_range_for_refcount(inode, pos, count); in ocfs2_prepare_inode_for_write()
2162 ocfs2_inode_unlock(inode, meta_level); in ocfs2_prepare_inode_for_write()
2165 ret = ocfs2_prepare_inode_for_refcount(inode, in ocfs2_prepare_inode_for_write()
2192 if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) { in ocfs2_prepare_inode_for_write()
2203 if (end > i_size_read(inode) && !full_coherency) { in ocfs2_prepare_inode_for_write()
2211 if (end > i_size_read(inode) && in ocfs2_prepare_inode_for_write()
2223 ret = ocfs2_check_range_for_holes(inode, pos, count); in ocfs2_prepare_inode_for_write()
2239 trace_ocfs2_prepare_inode_for_write(OCFS2_I(inode)->ip_blkno, in ocfs2_prepare_inode_for_write()
2244 ocfs2_inode_unlock(inode, meta_level); in ocfs2_prepare_inode_for_write()
2261 struct inode *inode = file_inode(file); in ocfs2_file_write_iter() local
2262 struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); in ocfs2_file_write_iter()
2268 trace_ocfs2_file_aio_write(inode, file, file->f_path.dentry, in ocfs2_file_write_iter()
2269 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_file_write_iter()
2280 mutex_lock(&inode->i_mutex); in ocfs2_file_write_iter()
2298 ret = ocfs2_rw_lock(inode, rw_level); in ocfs2_file_write_iter()
2314 ret = ocfs2_inode_lock(inode, NULL, 1); in ocfs2_file_write_iter()
2320 ocfs2_inode_unlock(inode, 1); in ocfs2_file_write_iter()
2341 unaligned_dio = ocfs2_is_io_unaligned(inode, count, iocb->ki_pos); in ocfs2_file_write_iter()
2348 ocfs2_rw_unlock(inode, rw_level); in ocfs2_file_write_iter()
2365 mutex_lock(&OCFS2_I(inode)->ip_unaligned_aio); in ocfs2_file_write_iter()
2374 old_size = i_size_read(inode); in ocfs2_file_write_iter()
2375 old_clusters = OCFS2_I(inode)->ip_clusters; in ocfs2_file_write_iter()
2388 IS_SYNC(inode) || dropped_dio) { in ocfs2_file_write_iter()
2425 mutex_unlock(&OCFS2_I(inode)->ip_unaligned_aio); in ocfs2_file_write_iter()
2430 ocfs2_rw_unlock(inode, rw_level); in ocfs2_file_write_iter()
2436 mutex_unlock(&inode->i_mutex); in ocfs2_file_write_iter()
2450 struct inode *inode = file_inode(in); in ocfs2_file_splice_read() local
2452 trace_ocfs2_file_splice_read(inode, in, in->f_path.dentry, in ocfs2_file_splice_read()
2453 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_file_splice_read()
2460 ret = ocfs2_inode_lock_atime(inode, in->f_path.mnt, &lock_level); in ocfs2_file_splice_read()
2465 ocfs2_inode_unlock(inode, lock_level); in ocfs2_file_splice_read()
2478 struct inode *inode = file_inode(filp); in ocfs2_file_read_iter() local
2480 trace_ocfs2_file_aio_read(inode, filp, filp->f_path.dentry, in ocfs2_file_read_iter()
2481 (unsigned long long)OCFS2_I(inode)->ip_blkno, in ocfs2_file_read_iter()
2487 if (!inode) { in ocfs2_file_read_iter()
2503 ret = ocfs2_rw_lock(inode, 0); in ocfs2_file_read_iter()
2522 ret = ocfs2_inode_lock_atime(inode, filp->f_path.mnt, &lock_level); in ocfs2_file_read_iter()
2527 ocfs2_inode_unlock(inode, lock_level); in ocfs2_file_read_iter()
2546 ocfs2_rw_unlock(inode, rw_level); in ocfs2_file_read_iter()
2554 struct inode *inode = file->f_mapping->host; in ocfs2_file_llseek() local
2557 mutex_lock(&inode->i_mutex); in ocfs2_file_llseek()
2566 ret = ocfs2_inode_lock(inode, NULL, 0); in ocfs2_file_llseek()
2571 offset += i_size_read(inode); in ocfs2_file_llseek()
2572 ocfs2_inode_unlock(inode, 0); in ocfs2_file_llseek()
2592 offset = vfs_setpos(file, offset, inode->i_sb->s_maxbytes); in ocfs2_file_llseek()
2595 mutex_unlock(&inode->i_mutex); in ocfs2_file_llseek()