Lines Matching refs:inode
29 static inline Indirect *get_branch(struct inode *inode, in get_branch() argument
35 struct super_block *sb = inode->i_sb; in get_branch()
41 add_chain (chain, NULL, i_data(inode) + *offsets); in get_branch()
69 static int alloc_branch(struct inode *inode, in alloc_branch() argument
76 int parent = minix_new_block(inode); in alloc_branch()
82 int nr = minix_new_block(inode); in alloc_branch()
86 bh = sb_getblk(inode->i_sb, parent); in alloc_branch()
94 mark_buffer_dirty_inode(bh, inode); in alloc_branch()
104 minix_free_block(inode, block_to_cpu(branch[i].key)); in alloc_branch()
108 static inline int splice_branch(struct inode *inode, in splice_branch() argument
127 inode->i_ctime = CURRENT_TIME_SEC; in splice_branch()
131 mark_buffer_dirty_inode(where->bh, inode); in splice_branch()
133 mark_inode_dirty(inode); in splice_branch()
141 minix_free_block(inode, block_to_cpu(where[i].key)); in splice_branch()
145 static inline int get_block(struct inode * inode, sector_t block, in get_block() argument
153 int depth = block_to_path(inode, block, offsets); in get_block()
159 partial = get_branch(inode, depth, offsets, chain, &err); in get_block()
164 map_bh(bh, inode->i_sb, block_to_cpu(chain[depth-1].key)); in get_block()
190 err = alloc_branch(inode, left, offsets+(partial-chain), partial); in get_block()
194 if (splice_branch(inode, chain, partial, left) < 0) in get_block()
216 static Indirect *find_shared(struct inode *inode, in find_shared() argument
228 partial = get_branch(inode, k, offsets, chain, &err); in find_shared()
256 static inline void free_data(struct inode *inode, block_t *p, block_t *q) in free_data() argument
264 minix_free_block(inode, nr); in free_data()
269 static void free_branches(struct inode *inode, block_t *p, block_t *q, int depth) in free_branches() argument
280 bh = sb_bread(inode->i_sb, nr); in free_branches()
283 free_branches(inode, (block_t*)bh->b_data, in free_branches()
286 minix_free_block(inode, nr); in free_branches()
287 mark_inode_dirty(inode); in free_branches()
290 free_data(inode, p, q); in free_branches()
293 static inline void truncate (struct inode * inode) in truncate() argument
295 struct super_block *sb = inode->i_sb; in truncate()
296 block_t *idata = i_data(inode); in truncate()
305 iblock = (inode->i_size + sb->s_blocksize -1) >> sb->s_blocksize_bits; in truncate()
306 block_truncate_page(inode->i_mapping, inode->i_size, get_block); in truncate()
308 n = block_to_path(inode, iblock, offsets); in truncate()
313 free_data(inode, idata+offsets[0], idata + DIRECT); in truncate()
319 partial = find_shared(inode, n, offsets, chain, &nr); in truncate()
322 mark_inode_dirty(inode); in truncate()
324 mark_buffer_dirty_inode(partial->bh, inode); in truncate()
325 free_branches(inode, &nr, &nr+1, (chain+n-1) - partial); in truncate()
329 free_branches(inode, partial->p + 1, block_end(partial->bh), in truncate()
331 mark_buffer_dirty_inode(partial->bh, inode); in truncate()
341 mark_inode_dirty(inode); in truncate()
342 free_branches(inode, &nr, &nr+1, first_whole+1); in truncate()
346 inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC; in truncate()
347 mark_inode_dirty(inode); in truncate()