switch ufs to ->evict_inode()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2010-06-05 19:40:56 -04:00
parent deee3ce466
commit 58e8268c7b
4 changed files with 28 additions and 21 deletions

View file

@ -94,8 +94,6 @@ void ufs_free_inode (struct inode * inode)
is_directory = S_ISDIR(inode->i_mode); is_directory = S_ISDIR(inode->i_mode);
clear_inode (inode);
if (ubh_isclr (UCPI_UBH(ucpi), ucpi->c_iusedoff, bit)) if (ubh_isclr (UCPI_UBH(ucpi), ucpi->c_iusedoff, bit))
ufs_error(sb, "ufs_free_inode", "bit already cleared for inode %u", ino); ufs_error(sb, "ufs_free_inode", "bit already cleared for inode %u", ino);
else { else {

View file

@ -911,24 +911,33 @@ int ufs_sync_inode (struct inode *inode)
return ufs_update_inode (inode, 1); 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); truncate_inode_pages(&inode->i_data, 0);
if (is_bad_inode(inode)) if (want_delete) {
goto no_delete; loff_t old_i_size;
/*UFS_I(inode)->i_dtime = CURRENT_TIME;*/ /*UFS_I(inode)->i_dtime = CURRENT_TIME;*/
lock_kernel(); lock_kernel();
mark_inode_dirty(inode); mark_inode_dirty(inode);
ufs_update_inode(inode, IS_SYNC(inode)); ufs_update_inode(inode, IS_SYNC(inode));
old_i_size = inode->i_size; old_i_size = inode->i_size;
inode->i_size = 0; inode->i_size = 0;
if (inode->i_blocks && ufs_truncate(inode, old_i_size)) if (inode->i_blocks && ufs_truncate(inode, old_i_size))
ufs_warning(inode->i_sb, __func__, "ufs_truncate failed\n"); ufs_warning(inode->i_sb, __func__, "ufs_truncate failed\n");
ufs_free_inode (inode); unlock_kernel();
unlock_kernel(); }
return;
no_delete: invalidate_inode_buffers(inode);
clear_inode(inode); /* We must guarantee clearing of inode... */ end_writeback(inode);
if (want_delete) {
lock_kernel();
ufs_free_inode (inode);
unlock_kernel();
}
} }

View file

@ -1440,7 +1440,7 @@ static const struct super_operations ufs_super_ops = {
.alloc_inode = ufs_alloc_inode, .alloc_inode = ufs_alloc_inode,
.destroy_inode = ufs_destroy_inode, .destroy_inode = ufs_destroy_inode,
.write_inode = ufs_write_inode, .write_inode = ufs_write_inode,
.delete_inode = ufs_delete_inode, .evict_inode = ufs_evict_inode,
.put_super = ufs_put_super, .put_super = ufs_put_super,
.write_super = ufs_write_super, .write_super = ufs_write_super,
.sync_fs = ufs_sync_fs, .sync_fs = ufs_sync_fs,

View file

@ -108,7 +108,7 @@ extern struct inode * ufs_new_inode (struct inode *, int);
extern struct inode *ufs_iget(struct super_block *, unsigned long); extern struct inode *ufs_iget(struct super_block *, unsigned long);
extern int ufs_write_inode (struct inode *, struct writeback_control *); extern int ufs_write_inode (struct inode *, struct writeback_control *);
extern int ufs_sync_inode (struct inode *); 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 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); extern int ufs_getfrag_block (struct inode *inode, sector_t fragment, struct buffer_head *bh_result, int create);