mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
switch ufs to ->evict_inode()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
deee3ce466
commit
58e8268c7b
@ -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 {
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user