Lines Matching refs:inode

15 static inline void dirty_indirect(struct buffer_head *bh, struct inode *inode)  in dirty_indirect()  argument
17 mark_buffer_dirty_inode(bh, inode); in dirty_indirect()
18 if (IS_SYNC(inode)) in dirty_indirect()
22 static int block_to_path(struct inode *inode, long block, int offsets[DEPTH]) in block_to_path() argument
24 struct super_block *sb = inode->i_sb; in block_to_path()
87 static Indirect *get_branch(struct inode *inode, in get_branch() argument
93 struct super_block *sb = inode->i_sb; in get_branch()
98 add_chain(chain, NULL, SYSV_I(inode)->i_data + *offsets); in get_branch()
124 static int alloc_branch(struct inode *inode, in alloc_branch() argument
129 int blocksize = inode->i_sb->s_blocksize; in alloc_branch()
133 branch[0].key = sysv_new_block(inode->i_sb); in alloc_branch()
138 branch[n].key = sysv_new_block(inode->i_sb); in alloc_branch()
145 parent = block_to_cpu(SYSV_SB(inode->i_sb), branch[n-1].key); in alloc_branch()
146 bh = sb_getblk(inode->i_sb, parent); in alloc_branch()
154 dirty_indirect(bh, inode); in alloc_branch()
163 sysv_free_block(inode->i_sb, branch[i].key); in alloc_branch()
167 static inline int splice_branch(struct inode *inode, in splice_branch() argument
181 inode->i_ctime = CURRENT_TIME_SEC; in splice_branch()
185 dirty_indirect(where->bh, inode); in splice_branch()
187 if (IS_SYNC(inode)) in splice_branch()
188 sysv_sync_inode(inode); in splice_branch()
190 mark_inode_dirty(inode); in splice_branch()
198 sysv_free_block(inode->i_sb, where[i].key); in splice_branch()
202 static int get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int creat… in get_block() argument
207 struct super_block *sb = inode->i_sb; in get_block()
210 int depth = block_to_path(inode, iblock, offsets); in get_block()
217 partial = get_branch(inode, depth, offsets, chain, &err); in get_block()
250 err = alloc_branch(inode, left, offsets+(partial-chain), partial); in get_block()
254 if (splice_branch(inode, chain, partial, left) < 0) in get_block()
276 static Indirect *find_shared(struct inode *inode, in find_shared() argument
290 partial = get_branch(inode, k, offsets, chain, &err); in find_shared()
325 static inline void free_data(struct inode *inode, sysv_zone_t *p, sysv_zone_t *q) in free_data() argument
331 sysv_free_block(inode->i_sb, nr); in free_data()
332 mark_inode_dirty(inode); in free_data()
337 static void free_branches(struct inode *inode, sysv_zone_t *p, sysv_zone_t *q, int depth) in free_branches() argument
340 struct super_block *sb = inode->i_sb; in free_branches()
353 free_branches(inode, (sysv_zone_t*)bh->b_data, in free_branches()
357 mark_inode_dirty(inode); in free_branches()
360 free_data(inode, p, q); in free_branches()
363 void sysv_truncate (struct inode * inode) in sysv_truncate() argument
365 sysv_zone_t *i_data = SYSV_I(inode)->i_data; in sysv_truncate()
374 if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || in sysv_truncate()
375 S_ISLNK(inode->i_mode))) in sysv_truncate()
378 blocksize = inode->i_sb->s_blocksize; in sysv_truncate()
379 iblock = (inode->i_size + blocksize-1) in sysv_truncate()
380 >> inode->i_sb->s_blocksize_bits; in sysv_truncate()
382 block_truncate_page(inode->i_mapping, inode->i_size, get_block); in sysv_truncate()
384 n = block_to_path(inode, iblock, offsets); in sysv_truncate()
389 free_data(inode, i_data+offsets[0], i_data + DIRECT); in sysv_truncate()
393 partial = find_shared(inode, n, offsets, chain, &nr); in sysv_truncate()
397 mark_inode_dirty(inode); in sysv_truncate()
399 dirty_indirect(partial->bh, inode); in sysv_truncate()
400 free_branches(inode, &nr, &nr+1, (chain+n-1) - partial); in sysv_truncate()
404 free_branches(inode, partial->p + 1, block_end(partial->bh), in sysv_truncate()
406 dirty_indirect(partial->bh, inode); in sysv_truncate()
416 mark_inode_dirty(inode); in sysv_truncate()
417 free_branches(inode, &nr, &nr+1, n); in sysv_truncate()
421 inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC; in sysv_truncate()
422 if (IS_SYNC(inode)) in sysv_truncate()
423 sysv_sync_inode (inode); in sysv_truncate()
425 mark_inode_dirty(inode); in sysv_truncate()
469 struct inode *inode = mapping->host; in sysv_write_failed() local
471 if (to > inode->i_size) { in sysv_write_failed()
472 truncate_pagecache(inode, inode->i_size); in sysv_write_failed()
473 sysv_truncate(inode); in sysv_write_failed()