Lines Matching refs:inode

62 #define DIRECT_BLOCK ((inode->i_size + uspi->s_bsize - 1) >> uspi->s_bshift)
63 #define DIRECT_FRAGMENT ((inode->i_size + uspi->s_fsize - 1) >> uspi->s_fshift)
66 static int ufs_trunc_direct(struct inode *inode) in ufs_trunc_direct() argument
68 struct ufs_inode_info *ufsi = UFS_I(inode); in ufs_trunc_direct()
77 UFSD("ENTER: ino %lu\n", inode->i_ino); in ufs_trunc_direct()
79 sb = inode->i_sb; in ufs_trunc_direct()
100 " frag3 %llu, frag4 %llu\n", inode->i_ino, in ufs_trunc_direct()
118 ufs_free_fragments(inode, tmp + frag1, frag2); in ufs_trunc_direct()
119 mark_inode_dirty(inode); in ufs_trunc_direct()
139 ufs_free_blocks (inode, frag_to_free, free_count); in ufs_trunc_direct()
143 mark_inode_dirty(inode); in ufs_trunc_direct()
147 ufs_free_blocks (inode, frag_to_free, free_count); in ufs_trunc_direct()
162 ufs_free_fragments (inode, tmp, frag4); in ufs_trunc_direct()
163 mark_inode_dirty(inode); in ufs_trunc_direct()
166 UFSD("EXIT: ino %lu\n", inode->i_ino); in ufs_trunc_direct()
171 static int ufs_trunc_indirect(struct inode *inode, u64 offset, void *p) in ufs_trunc_indirect() argument
182 inode->i_ino, (unsigned long long)offset, p); in ufs_trunc_indirect()
186 sb = inode->i_sb; in ufs_trunc_indirect()
221 ufs_free_blocks (inode, frag_to_free, free_count); in ufs_trunc_indirect()
226 mark_inode_dirty(inode); in ufs_trunc_indirect()
230 ufs_free_blocks (inode, frag_to_free, free_count); in ufs_trunc_indirect()
240 ufs_free_blocks (inode, tmp, uspi->s_fpb); in ufs_trunc_indirect()
241 mark_inode_dirty(inode); in ufs_trunc_indirect()
245 if (IS_SYNC(inode) && ind_ubh && ubh_buffer_dirty(ind_ubh)) in ufs_trunc_indirect()
249 UFSD("EXIT: ino %lu\n", inode->i_ino); in ufs_trunc_indirect()
254 static int ufs_trunc_dindirect(struct inode *inode, u64 offset, void *p) in ufs_trunc_dindirect() argument
263 UFSD("ENTER: ino %lu\n", inode->i_ino); in ufs_trunc_dindirect()
265 sb = inode->i_sb; in ufs_trunc_dindirect()
290 retry |= ufs_trunc_indirect (inode, offset + (i << uspi->s_apbshift), dind); in ufs_trunc_dindirect()
302 ufs_free_blocks(inode, tmp, uspi->s_fpb); in ufs_trunc_dindirect()
303 mark_inode_dirty(inode); in ufs_trunc_dindirect()
307 if (IS_SYNC(inode) && dind_bh && ubh_buffer_dirty(dind_bh)) in ufs_trunc_dindirect()
311 UFSD("EXIT: ino %lu\n", inode->i_ino); in ufs_trunc_dindirect()
316 static int ufs_trunc_tindirect(struct inode *inode) in ufs_trunc_tindirect() argument
318 struct super_block *sb = inode->i_sb; in ufs_trunc_tindirect()
320 struct ufs_inode_info *ufsi = UFS_I(inode); in ufs_trunc_tindirect()
326 UFSD("ENTER: ino %lu\n", inode->i_ino); in ufs_trunc_tindirect()
348 retry |= ufs_trunc_dindirect(inode, UFS_NDADDR + in ufs_trunc_tindirect()
360 ufs_free_blocks(inode, tmp, uspi->s_fpb); in ufs_trunc_tindirect()
361 mark_inode_dirty(inode); in ufs_trunc_tindirect()
365 if (IS_SYNC(inode) && tind_bh && ubh_buffer_dirty(tind_bh)) in ufs_trunc_tindirect()
369 UFSD("EXIT: ino %lu\n", inode->i_ino); in ufs_trunc_tindirect()
373 static int ufs_alloc_lastblock(struct inode *inode) in ufs_alloc_lastblock() argument
376 struct super_block *sb = inode->i_sb; in ufs_alloc_lastblock()
377 struct address_space *mapping = inode->i_mapping; in ufs_alloc_lastblock()
385 lastfrag = (i_size_read(inode) + uspi->s_fsize - 1) >> uspi->s_fshift; in ufs_alloc_lastblock()
393 (PAGE_CACHE_SHIFT - inode->i_blkbits)); in ufs_alloc_lastblock()
399 end = lastfrag & ((1 << (PAGE_CACHE_SHIFT - inode->i_blkbits)) - 1); in ufs_alloc_lastblock()
405 err = ufs_getfrag_block(inode, lastfrag, bh, 1); in ufs_alloc_lastblock()
443 int ufs_truncate(struct inode *inode, loff_t old_i_size) in ufs_truncate() argument
445 struct ufs_inode_info *ufsi = UFS_I(inode); in ufs_truncate()
446 struct super_block *sb = inode->i_sb; in ufs_truncate()
451 inode->i_ino, (unsigned long long)i_size_read(inode), in ufs_truncate()
454 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in ufs_truncate()
455 S_ISLNK(inode->i_mode))) in ufs_truncate()
457 if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) in ufs_truncate()
460 err = ufs_alloc_lastblock(inode); in ufs_truncate()
463 i_size_write(inode, old_i_size); in ufs_truncate()
467 block_truncate_page(inode->i_mapping, inode->i_size, ufs_getfrag_block); in ufs_truncate()
470 retry = ufs_trunc_direct(inode); in ufs_truncate()
471 retry |= ufs_trunc_indirect(inode, UFS_IND_BLOCK, in ufs_truncate()
474 retry |= ufs_trunc_dindirect(inode, UFS_IND_BLOCK + uspi->s_apb, in ufs_truncate()
477 retry |= ufs_trunc_tindirect (inode); in ufs_truncate()
480 if (IS_SYNC(inode) && (inode->i_state & I_DIRTY)) in ufs_truncate()
481 ufs_sync_inode (inode); in ufs_truncate()
485 inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC; in ufs_truncate()
487 mark_inode_dirty(inode); in ufs_truncate()
495 struct inode *inode = d_inode(dentry); in ufs_setattr() local
499 error = inode_change_ok(inode, attr); in ufs_setattr()
503 if (ia_valid & ATTR_SIZE && attr->ia_size != inode->i_size) { in ufs_setattr()
504 loff_t old_i_size = inode->i_size; in ufs_setattr()
507 truncate_setsize(inode, attr->ia_size); in ufs_setattr()
509 lock_ufs(inode->i_sb); in ufs_setattr()
510 error = ufs_truncate(inode, old_i_size); in ufs_setattr()
511 unlock_ufs(inode->i_sb); in ufs_setattr()
516 setattr_copy(inode, attr); in ufs_setattr()
517 mark_inode_dirty(inode); in ufs_setattr()