Skip to content

Commit

Permalink
switch ufs to ->evict_inode()
Browse files Browse the repository at this point in the history
Signed-off-by: Al Viro <[email protected]>
  • Loading branch information
Al Viro committed Aug 9, 2010
1 parent deee3ce commit 58e8268
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 21 deletions.
2 changes: 0 additions & 2 deletions fs/ufs/ialloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,6 @@ void ufs_free_inode (struct inode * inode)

is_directory = S_ISDIR(inode->i_mode);

clear_inode (inode);

if (ubh_isclr (UCPI_UBH(ucpi), ucpi->c_iusedoff, bit))
ufs_error(sb, "ufs_free_inode", "bit already cleared for inode %u", ino);
else {
Expand Down
43 changes: 26 additions & 17 deletions fs/ufs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -911,24 +911,33 @@ int ufs_sync_inode (struct inode *inode)
return ufs_update_inode (inode, 1);
}

void ufs_delete_inode (struct inode * inode)
void ufs_evict_inode(struct inode * inode)
{
loff_t old_i_size;
int want_delete = 0;

if (!inode->i_nlink && !is_bad_inode(inode))
want_delete = 1;

truncate_inode_pages(&inode->i_data, 0);
if (is_bad_inode(inode))
goto no_delete;
/*UFS_I(inode)->i_dtime = CURRENT_TIME;*/
lock_kernel();
mark_inode_dirty(inode);
ufs_update_inode(inode, IS_SYNC(inode));
old_i_size = inode->i_size;
inode->i_size = 0;
if (inode->i_blocks && ufs_truncate(inode, old_i_size))
ufs_warning(inode->i_sb, __func__, "ufs_truncate failed\n");
ufs_free_inode (inode);
unlock_kernel();
return;
no_delete:
clear_inode(inode); /* We must guarantee clearing of inode... */
if (want_delete) {
loff_t old_i_size;
/*UFS_I(inode)->i_dtime = CURRENT_TIME;*/
lock_kernel();
mark_inode_dirty(inode);
ufs_update_inode(inode, IS_SYNC(inode));
old_i_size = inode->i_size;
inode->i_size = 0;
if (inode->i_blocks && ufs_truncate(inode, old_i_size))
ufs_warning(inode->i_sb, __func__, "ufs_truncate failed\n");
unlock_kernel();
}

invalidate_inode_buffers(inode);
end_writeback(inode);

if (want_delete) {
lock_kernel();
ufs_free_inode (inode);
unlock_kernel();
}
}
2 changes: 1 addition & 1 deletion fs/ufs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1440,7 +1440,7 @@ static const struct super_operations ufs_super_ops = {
.alloc_inode = ufs_alloc_inode,
.destroy_inode = ufs_destroy_inode,
.write_inode = ufs_write_inode,
.delete_inode = ufs_delete_inode,
.evict_inode = ufs_evict_inode,
.put_super = ufs_put_super,
.write_super = ufs_write_super,
.sync_fs = ufs_sync_fs,
Expand Down
2 changes: 1 addition & 1 deletion fs/ufs/ufs.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ extern struct inode * ufs_new_inode (struct inode *, int);
extern struct inode *ufs_iget(struct super_block *, unsigned long);
extern int ufs_write_inode (struct inode *, struct writeback_control *);
extern int ufs_sync_inode (struct inode *);
extern void ufs_delete_inode (struct inode *);
extern void ufs_evict_inode (struct inode *);
extern struct buffer_head * ufs_bread (struct inode *, unsigned, int, int *);
extern int ufs_getfrag_block (struct inode *inode, sector_t fragment, struct buffer_head *bh_result, int create);

Expand Down

0 comments on commit 58e8268

Please sign in to comment.