vfs: Rename end_writeback() to clear_inode()

After we moved inode_sync_wait() from end_writeback() it doesn't make sense
to call the function end_writeback() anymore. Rename it to clear_inode()
which well says what the function really does - set I_CLEAR flag.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
This commit is contained in:
Jan Kara 2012-05-03 14:48:02 +02:00 коммит произвёл Fengguang Wu
Родитель 7994e6f725
Коммит dbd5768f87
52 изменённых файлов: 68 добавлений и 70 удалений

Просмотреть файл

@ -297,7 +297,8 @@ in the beginning of ->setattr unconditionally.
be used instead. It gets called whenever the inode is evicted, whether it has be used instead. It gets called whenever the inode is evicted, whether it has
remaining links or not. Caller does *not* evict the pagecache or inode-associated remaining links or not. Caller does *not* evict the pagecache or inode-associated
metadata buffers; getting rid of those is responsibility of method, as it had metadata buffers; getting rid of those is responsibility of method, as it had
been for ->delete_inode(). been for ->delete_inode(). Caller makes sure async writeback cannot be running
for the inode while (or after) ->evict_inode() is called.
->drop_inode() returns int now; it's called on final iput() with ->drop_inode() returns int now; it's called on final iput() with
inode->i_lock held and it returns true if filesystems wants the inode to be inode->i_lock held and it returns true if filesystems wants the inode to be
@ -306,14 +307,11 @@ updated appropriately. generic_delete_inode() is also alive and it consists
simply of return 1. Note that all actual eviction work is done by caller after simply of return 1. Note that all actual eviction work is done by caller after
->drop_inode() returns. ->drop_inode() returns.
clear_inode() is gone; use end_writeback() instead. As before, it must As before, clear_inode() must be called exactly once on each call of
be called exactly once on each call of ->evict_inode() (as it used to be for ->evict_inode() (as it used to be for each call of ->delete_inode()). Unlike
each call of ->delete_inode()). Unlike before, if you are using inode-associated before, if you are using inode-associated metadata buffers (i.e.
metadata buffers (i.e. mark_buffer_dirty_inode()), it's your responsibility to mark_buffer_dirty_inode()), it's your responsibility to call
call invalidate_inode_buffers() before end_writeback(). invalidate_inode_buffers() before clear_inode().
No async writeback (and thus no calls of ->write_inode()) will happen
after end_writeback() returns, so actions that should not overlap with ->write_inode()
(e.g. freeing on-disk inode if i_nlink is 0) ought to be done after that call.
NOTE: checking i_nlink in the beginning of ->write_inode() and bailing out NOTE: checking i_nlink in the beginning of ->write_inode() and bailing out
if it's zero is not *and* *never* *had* *been* enough. Final unlink() and iput() if it's zero is not *and* *never* *had* *been* enough. Final unlink() and iput()

Просмотреть файл

@ -151,7 +151,7 @@ static void
spufs_evict_inode(struct inode *inode) spufs_evict_inode(struct inode *inode)
{ {
struct spufs_inode_info *ei = SPUFS_I(inode); struct spufs_inode_info *ei = SPUFS_I(inode);
end_writeback(inode); clear_inode(inode);
if (ei->i_ctx) if (ei->i_ctx)
put_spu_context(ei->i_ctx); put_spu_context(ei->i_ctx);
if (ei->i_gang) if (ei->i_gang)

Просмотреть файл

@ -115,7 +115,7 @@ static struct inode *hypfs_make_inode(struct super_block *sb, umode_t mode)
static void hypfs_evict_inode(struct inode *inode) static void hypfs_evict_inode(struct inode *inode)
{ {
end_writeback(inode); clear_inode(inode);
kfree(inode->i_private); kfree(inode->i_private);
} }

Просмотреть файл

@ -448,7 +448,7 @@ void v9fs_evict_inode(struct inode *inode)
struct v9fs_inode *v9inode = V9FS_I(inode); struct v9fs_inode *v9inode = V9FS_I(inode);
truncate_inode_pages(inode->i_mapping, 0); truncate_inode_pages(inode->i_mapping, 0);
end_writeback(inode); clear_inode(inode);
filemap_fdatawrite(inode->i_mapping); filemap_fdatawrite(inode->i_mapping);
#ifdef CONFIG_9P_FSCACHE #ifdef CONFIG_9P_FSCACHE

Просмотреть файл

@ -264,7 +264,7 @@ affs_evict_inode(struct inode *inode)
} }
invalidate_inode_buffers(inode); invalidate_inode_buffers(inode);
end_writeback(inode); clear_inode(inode);
affs_free_prealloc(inode); affs_free_prealloc(inode);
cache_page = (unsigned long)AFFS_I(inode)->i_lc; cache_page = (unsigned long)AFFS_I(inode)->i_lc;
if (cache_page) { if (cache_page) {

Просмотреть файл

@ -423,7 +423,7 @@ void afs_evict_inode(struct inode *inode)
ASSERTCMP(inode->i_ino, ==, vnode->fid.vnode); ASSERTCMP(inode->i_ino, ==, vnode->fid.vnode);
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
afs_give_up_callback(vnode); afs_give_up_callback(vnode);

Просмотреть файл

@ -101,7 +101,7 @@ static int autofs4_show_options(struct seq_file *m, struct dentry *root)
static void autofs4_evict_inode(struct inode *inode) static void autofs4_evict_inode(struct inode *inode)
{ {
end_writeback(inode); clear_inode(inode);
kfree(inode->i_private); kfree(inode->i_private);
} }

Просмотреть файл

@ -174,7 +174,7 @@ static void bfs_evict_inode(struct inode *inode)
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
invalidate_inode_buffers(inode); invalidate_inode_buffers(inode);
end_writeback(inode); clear_inode(inode);
if (inode->i_nlink) if (inode->i_nlink)
return; return;

Просмотреть файл

@ -505,7 +505,7 @@ static struct inode *bm_get_inode(struct super_block *sb, int mode)
static void bm_evict_inode(struct inode *inode) static void bm_evict_inode(struct inode *inode)
{ {
end_writeback(inode); clear_inode(inode);
kfree(inode->i_private); kfree(inode->i_private);
} }

Просмотреть файл

@ -487,7 +487,7 @@ static void bdev_evict_inode(struct inode *inode)
struct list_head *p; struct list_head *p;
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
invalidate_inode_buffers(inode); /* is it needed here? */ invalidate_inode_buffers(inode); /* is it needed here? */
end_writeback(inode); clear_inode(inode);
spin_lock(&bdev_lock); spin_lock(&bdev_lock);
while ( (p = bdev->bd_inodes.next) != &bdev->bd_inodes ) { while ( (p = bdev->bd_inodes.next) != &bdev->bd_inodes ) {
__bd_forget(list_entry(p, struct inode, i_devices)); __bd_forget(list_entry(p, struct inode, i_devices));

Просмотреть файл

@ -3756,7 +3756,7 @@ void btrfs_evict_inode(struct inode *inode)
btrfs_end_transaction(trans, root); btrfs_end_transaction(trans, root);
btrfs_btree_balance_dirty(root, nr); btrfs_btree_balance_dirty(root, nr);
no_delete: no_delete:
end_writeback(inode); clear_inode(inode);
return; return;
} }

Просмотреть файл

@ -272,7 +272,7 @@ static void
cifs_evict_inode(struct inode *inode) cifs_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
cifs_fscache_release_inode_cookie(inode); cifs_fscache_release_inode_cookie(inode);
} }

Просмотреть файл

@ -244,7 +244,7 @@ static void coda_put_super(struct super_block *sb)
static void coda_evict_inode(struct inode *inode) static void coda_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
coda_cache_clear_inode(inode); coda_cache_clear_inode(inode);
} }

Просмотреть файл

@ -133,7 +133,7 @@ static int ecryptfs_statfs(struct dentry *dentry, struct kstatfs *buf)
static void ecryptfs_evict_inode(struct inode *inode) static void ecryptfs_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
iput(ecryptfs_inode_to_lower(inode)); iput(ecryptfs_inode_to_lower(inode));
} }

Просмотреть файл

@ -1473,7 +1473,7 @@ void exofs_evict_inode(struct inode *inode)
goto no_delete; goto no_delete;
inode->i_size = 0; inode->i_size = 0;
end_writeback(inode); clear_inode(inode);
/* if we are deleting an obj that hasn't been created yet, wait. /* if we are deleting an obj that hasn't been created yet, wait.
* This also makes sure that create_done cannot be called with an * This also makes sure that create_done cannot be called with an
@ -1503,5 +1503,5 @@ void exofs_evict_inode(struct inode *inode)
return; return;
no_delete: no_delete:
end_writeback(inode); clear_inode(inode);
} }

Просмотреть файл

@ -90,7 +90,7 @@ void ext2_evict_inode(struct inode * inode)
} }
invalidate_inode_buffers(inode); invalidate_inode_buffers(inode);
end_writeback(inode); clear_inode(inode);
ext2_discard_reservation(inode); ext2_discard_reservation(inode);
rsv = EXT2_I(inode)->i_block_alloc_info; rsv = EXT2_I(inode)->i_block_alloc_info;

Просмотреть файл

@ -272,18 +272,18 @@ void ext3_evict_inode (struct inode *inode)
if (ext3_mark_inode_dirty(handle, inode)) { if (ext3_mark_inode_dirty(handle, inode)) {
/* If that failed, just dquot_drop() and be done with that */ /* If that failed, just dquot_drop() and be done with that */
dquot_drop(inode); dquot_drop(inode);
end_writeback(inode); clear_inode(inode);
} else { } else {
ext3_xattr_delete_inode(handle, inode); ext3_xattr_delete_inode(handle, inode);
dquot_free_inode(inode); dquot_free_inode(inode);
dquot_drop(inode); dquot_drop(inode);
end_writeback(inode); clear_inode(inode);
ext3_free_inode(handle, inode); ext3_free_inode(handle, inode);
} }
ext3_journal_stop(handle); ext3_journal_stop(handle);
return; return;
no_delete: no_delete:
end_writeback(inode); clear_inode(inode);
dquot_drop(inode); dquot_drop(inode);
} }

Просмотреть файл

@ -1007,7 +1007,7 @@ static void destroy_inodecache(void)
void ext4_clear_inode(struct inode *inode) void ext4_clear_inode(struct inode *inode)
{ {
invalidate_inode_buffers(inode); invalidate_inode_buffers(inode);
end_writeback(inode); clear_inode(inode);
dquot_drop(inode); dquot_drop(inode);
ext4_discard_preallocations(inode); ext4_discard_preallocations(inode);
if (EXT4_I(inode)->jinode) { if (EXT4_I(inode)->jinode) {

Просмотреть файл

@ -454,7 +454,7 @@ static void fat_evict_inode(struct inode *inode)
fat_truncate_blocks(inode, 0); fat_truncate_blocks(inode, 0);
} }
invalidate_inode_buffers(inode); invalidate_inode_buffers(inode);
end_writeback(inode); clear_inode(inode);
fat_cache_inval_inode(inode); fat_cache_inval_inode(inode);
fat_detach(inode); fat_detach(inode);
} }

Просмотреть файл

@ -355,6 +355,6 @@ void
vxfs_evict_inode(struct inode *ip) vxfs_evict_inode(struct inode *ip)
{ {
truncate_inode_pages(&ip->i_data, 0); truncate_inode_pages(&ip->i_data, 0);
end_writeback(ip); clear_inode(ip);
call_rcu(&ip->i_rcu, vxfs_i_callback); call_rcu(&ip->i_rcu, vxfs_i_callback);
} }

Просмотреть файл

@ -122,7 +122,7 @@ static void fuse_destroy_inode(struct inode *inode)
static void fuse_evict_inode(struct inode *inode) static void fuse_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
if (inode->i_sb->s_flags & MS_ACTIVE) { if (inode->i_sb->s_flags & MS_ACTIVE) {
struct fuse_conn *fc = get_fuse_conn(inode); struct fuse_conn *fc = get_fuse_conn(inode);
struct fuse_inode *fi = get_fuse_inode(inode); struct fuse_inode *fi = get_fuse_inode(inode);

Просмотреть файл

@ -1554,7 +1554,7 @@ out_unlock:
out: out:
/* Case 3 starts here */ /* Case 3 starts here */
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
gfs2_dir_hash_inval(ip); gfs2_dir_hash_inval(ip);
ip->i_gl->gl_object = NULL; ip->i_gl->gl_object = NULL;
flush_delayed_work_sync(&ip->i_gl->gl_work); flush_delayed_work_sync(&ip->i_gl->gl_work);

Просмотреть файл

@ -532,7 +532,7 @@ out:
void hfs_evict_inode(struct inode *inode) void hfs_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
if (HFS_IS_RSRC(inode) && HFS_I(inode)->rsrc_inode) { if (HFS_IS_RSRC(inode) && HFS_I(inode)->rsrc_inode) {
HFS_I(HFS_I(inode)->rsrc_inode)->rsrc_inode = NULL; HFS_I(HFS_I(inode)->rsrc_inode)->rsrc_inode = NULL;
iput(HFS_I(inode)->rsrc_inode); iput(HFS_I(inode)->rsrc_inode);

Просмотреть файл

@ -154,7 +154,7 @@ static void hfsplus_evict_inode(struct inode *inode)
{ {
dprint(DBG_INODE, "hfsplus_evict_inode: %lu\n", inode->i_ino); dprint(DBG_INODE, "hfsplus_evict_inode: %lu\n", inode->i_ino);
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
if (HFSPLUS_IS_RSRC(inode)) { if (HFSPLUS_IS_RSRC(inode)) {
HFSPLUS_I(HFSPLUS_I(inode)->rsrc_inode)->rsrc_inode = NULL; HFSPLUS_I(HFSPLUS_I(inode)->rsrc_inode)->rsrc_inode = NULL;
iput(HFSPLUS_I(inode)->rsrc_inode); iput(HFSPLUS_I(inode)->rsrc_inode);

Просмотреть файл

@ -240,7 +240,7 @@ static struct inode *hostfs_alloc_inode(struct super_block *sb)
static void hostfs_evict_inode(struct inode *inode) static void hostfs_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
if (HOSTFS_I(inode)->fd != -1) { if (HOSTFS_I(inode)->fd != -1) {
close_file(&HOSTFS_I(inode)->fd); close_file(&HOSTFS_I(inode)->fd);
HOSTFS_I(inode)->fd = -1; HOSTFS_I(inode)->fd = -1;

Просмотреть файл

@ -299,7 +299,7 @@ void hpfs_write_if_changed(struct inode *inode)
void hpfs_evict_inode(struct inode *inode) void hpfs_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
if (!inode->i_nlink) { if (!inode->i_nlink) {
hpfs_lock(inode->i_sb); hpfs_lock(inode->i_sb);
hpfs_remove_fnode(inode->i_sb, inode->i_ino); hpfs_remove_fnode(inode->i_sb, inode->i_ino);

Просмотреть файл

@ -614,7 +614,7 @@ static struct inode *hppfs_alloc_inode(struct super_block *sb)
void hppfs_evict_inode(struct inode *ino) void hppfs_evict_inode(struct inode *ino)
{ {
end_writeback(ino); clear_inode(ino);
dput(HPPFS_I(ino)->proc_dentry); dput(HPPFS_I(ino)->proc_dentry);
mntput(ino->i_sb->s_fs_info); mntput(ino->i_sb->s_fs_info);
} }

Просмотреть файл

@ -393,7 +393,7 @@ static void truncate_hugepages(struct inode *inode, loff_t lstart)
static void hugetlbfs_evict_inode(struct inode *inode) static void hugetlbfs_evict_inode(struct inode *inode)
{ {
truncate_hugepages(inode, 0); truncate_hugepages(inode, 0);
end_writeback(inode); clear_inode(inode);
} }
static inline void static inline void

Просмотреть файл

@ -486,7 +486,7 @@ void __remove_inode_hash(struct inode *inode)
} }
EXPORT_SYMBOL(__remove_inode_hash); EXPORT_SYMBOL(__remove_inode_hash);
void end_writeback(struct inode *inode) void clear_inode(struct inode *inode)
{ {
might_sleep(); might_sleep();
/* /*
@ -503,7 +503,7 @@ void end_writeback(struct inode *inode)
/* don't need i_lock here, no concurrent mods to i_state */ /* don't need i_lock here, no concurrent mods to i_state */
inode->i_state = I_FREEING | I_CLEAR; inode->i_state = I_FREEING | I_CLEAR;
} }
EXPORT_SYMBOL(end_writeback); EXPORT_SYMBOL(clear_inode);
/* /*
* Free the inode passed in, removing it from the lists it is still connected * Free the inode passed in, removing it from the lists it is still connected
@ -537,7 +537,7 @@ static void evict(struct inode *inode)
} else { } else {
if (inode->i_data.nrpages) if (inode->i_data.nrpages)
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
} }
if (S_ISBLK(inode->i_mode) && inode->i_bdev) if (S_ISBLK(inode->i_mode) && inode->i_bdev)
bd_forget(inode); bd_forget(inode);

Просмотреть файл

@ -240,7 +240,7 @@ void jffs2_evict_inode (struct inode *inode)
jffs2_dbg(1, "%s(): ino #%lu mode %o\n", jffs2_dbg(1, "%s(): ino #%lu mode %o\n",
__func__, inode->i_ino, inode->i_mode); __func__, inode->i_ino, inode->i_mode);
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
jffs2_do_clear_inode(c, f); jffs2_do_clear_inode(c, f);
} }

Просмотреть файл

@ -169,7 +169,7 @@ void jfs_evict_inode(struct inode *inode)
} else { } else {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
} }
end_writeback(inode); clear_inode(inode);
dquot_drop(inode); dquot_drop(inode);
} }

Просмотреть файл

@ -2175,7 +2175,7 @@ void logfs_evict_inode(struct inode *inode)
} }
} }
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
/* Cheaper version of write_inode. All changes are concealed in /* Cheaper version of write_inode. All changes are concealed in
* aliases, which are moved back. No write to the medium happens. * aliases, which are moved back. No write to the medium happens.

Просмотреть файл

@ -32,7 +32,7 @@ static void minix_evict_inode(struct inode *inode)
minix_truncate(inode); minix_truncate(inode);
} }
invalidate_inode_buffers(inode); invalidate_inode_buffers(inode);
end_writeback(inode); clear_inode(inode);
if (!inode->i_nlink) if (!inode->i_nlink)
minix_free_inode(inode); minix_free_inode(inode);
} }

Просмотреть файл

@ -292,7 +292,7 @@ static void
ncp_evict_inode(struct inode *inode) ncp_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
if (S_ISDIR(inode->i_mode)) { if (S_ISDIR(inode->i_mode)) {
DDPRINTK("ncp_evict_inode: put directory %ld\n", inode->i_ino); DDPRINTK("ncp_evict_inode: put directory %ld\n", inode->i_ino);

Просмотреть файл

@ -121,7 +121,7 @@ static void nfs_clear_inode(struct inode *inode)
void nfs_evict_inode(struct inode *inode) void nfs_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
nfs_clear_inode(inode); nfs_clear_inode(inode);
} }
@ -1500,7 +1500,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
void nfs4_evict_inode(struct inode *inode) void nfs4_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
pnfs_return_layout(inode); pnfs_return_layout(inode);
pnfs_destroy_layout(NFS_I(inode)); pnfs_destroy_layout(NFS_I(inode));
/* If we are holding a delegation, return it! */ /* If we are holding a delegation, return it! */

Просмотреть файл

@ -734,7 +734,7 @@ void nilfs_evict_inode(struct inode *inode)
if (inode->i_nlink || !ii->i_root || unlikely(is_bad_inode(inode))) { if (inode->i_nlink || !ii->i_root || unlikely(is_bad_inode(inode))) {
if (inode->i_data.nrpages) if (inode->i_data.nrpages)
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
nilfs_clear_inode(inode); nilfs_clear_inode(inode);
return; return;
} }
@ -746,7 +746,7 @@ void nilfs_evict_inode(struct inode *inode)
/* TODO: some of the following operations may fail. */ /* TODO: some of the following operations may fail. */
nilfs_truncate_bmap(ii, 0); nilfs_truncate_bmap(ii, 0);
nilfs_mark_inode_dirty(inode); nilfs_mark_inode_dirty(inode);
end_writeback(inode); clear_inode(inode);
ret = nilfs_ifile_delete_inode(ii->i_root->ifile, inode->i_ino); ret = nilfs_ifile_delete_inode(ii->i_root->ifile, inode->i_ino);
if (!ret) if (!ret)

Просмотреть файл

@ -2258,7 +2258,7 @@ void ntfs_evict_big_inode(struct inode *vi)
ntfs_inode *ni = NTFS_I(vi); ntfs_inode *ni = NTFS_I(vi);
truncate_inode_pages(&vi->i_data, 0); truncate_inode_pages(&vi->i_data, 0);
end_writeback(vi); clear_inode(vi);
#ifdef NTFS_RW #ifdef NTFS_RW
if (NInoDirty(ni)) { if (NInoDirty(ni)) {

Просмотреть файл

@ -367,7 +367,7 @@ static void dlmfs_evict_inode(struct inode *inode)
int status; int status;
struct dlmfs_inode_private *ip; struct dlmfs_inode_private *ip;
end_writeback(inode); clear_inode(inode);
mlog(0, "inode %lu\n", inode->i_ino); mlog(0, "inode %lu\n", inode->i_ino);

Просмотреть файл

@ -1069,7 +1069,7 @@ static void ocfs2_clear_inode(struct inode *inode)
int status; int status;
struct ocfs2_inode_info *oi = OCFS2_I(inode); struct ocfs2_inode_info *oi = OCFS2_I(inode);
end_writeback(inode); clear_inode(inode);
trace_ocfs2_clear_inode((unsigned long long)oi->ip_blkno, trace_ocfs2_clear_inode((unsigned long long)oi->ip_blkno,
inode->i_nlink); inode->i_nlink);

Просмотреть файл

@ -184,7 +184,7 @@ int omfs_sync_inode(struct inode *inode)
static void omfs_evict_inode(struct inode *inode) static void omfs_evict_inode(struct inode *inode)
{ {
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
if (inode->i_nlink) if (inode->i_nlink)
return; return;

Просмотреть файл

@ -33,7 +33,7 @@ static void proc_evict_inode(struct inode *inode)
const struct proc_ns_operations *ns_ops; const struct proc_ns_operations *ns_ops;
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
/* Stop tracking associated processes */ /* Stop tracking associated processes */
put_pid(PROC_I(inode)->pid); put_pid(PROC_I(inode)->pid);

Просмотреть файл

@ -85,7 +85,7 @@ static void pstore_evict_inode(struct inode *inode)
struct pstore_private *p = inode->i_private; struct pstore_private *p = inode->i_private;
unsigned long flags; unsigned long flags;
end_writeback(inode); clear_inode(inode);
if (p) { if (p) {
spin_lock_irqsave(&allpstore_lock, flags); spin_lock_irqsave(&allpstore_lock, flags);
list_del(&p->list); list_del(&p->list);

Просмотреть файл

@ -76,14 +76,14 @@ void reiserfs_evict_inode(struct inode *inode)
; ;
} }
out: out:
end_writeback(inode); /* note this must go after the journal_end to prevent deadlock */ clear_inode(inode); /* note this must go after the journal_end to prevent deadlock */
dquot_drop(inode); dquot_drop(inode);
inode->i_blocks = 0; inode->i_blocks = 0;
reiserfs_write_unlock_once(inode->i_sb, depth); reiserfs_write_unlock_once(inode->i_sb, depth);
return; return;
no_delete: no_delete:
end_writeback(inode); clear_inode(inode);
dquot_drop(inode); dquot_drop(inode);
} }

Просмотреть файл

@ -310,7 +310,7 @@ void sysfs_evict_inode(struct inode *inode)
struct sysfs_dirent *sd = inode->i_private; struct sysfs_dirent *sd = inode->i_private;
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
sysfs_put(sd); sysfs_put(sd);
} }

Просмотреть файл

@ -316,7 +316,7 @@ static void sysv_evict_inode(struct inode *inode)
sysv_truncate(inode); sysv_truncate(inode);
} }
invalidate_inode_buffers(inode); invalidate_inode_buffers(inode);
end_writeback(inode); clear_inode(inode);
if (!inode->i_nlink) if (!inode->i_nlink)
sysv_free_inode(inode); sysv_free_inode(inode);
} }

Просмотреть файл

@ -378,7 +378,7 @@ out:
smp_wmb(); smp_wmb();
} }
done: done:
end_writeback(inode); clear_inode(inode);
} }
static void ubifs_dirty_inode(struct inode *inode, int flags) static void ubifs_dirty_inode(struct inode *inode, int flags)

Просмотреть файл

@ -80,7 +80,7 @@ void udf_evict_inode(struct inode *inode)
} else } else
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
invalidate_inode_buffers(inode); invalidate_inode_buffers(inode);
end_writeback(inode); clear_inode(inode);
if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB && if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB &&
inode->i_size != iinfo->i_lenExtents) { inode->i_size != iinfo->i_lenExtents) {
udf_warn(inode->i_sb, "Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n", udf_warn(inode->i_sb, "Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n",

Просмотреть файл

@ -895,7 +895,7 @@ void ufs_evict_inode(struct inode * inode)
} }
invalidate_inode_buffers(inode); invalidate_inode_buffers(inode);
end_writeback(inode); clear_inode(inode);
if (want_delete) { if (want_delete) {
lock_ufs(inode->i_sb); lock_ufs(inode->i_sb);

Просмотреть файл

@ -926,7 +926,7 @@ xfs_fs_evict_inode(
trace_xfs_evict_inode(ip); trace_xfs_evict_inode(ip);
truncate_inode_pages(&inode->i_data, 0); truncate_inode_pages(&inode->i_data, 0);
end_writeback(inode); clear_inode(inode);
XFS_STATS_INC(vn_rele); XFS_STATS_INC(vn_rele);
XFS_STATS_INC(vn_remove); XFS_STATS_INC(vn_remove);
XFS_STATS_DEC(vn_active); XFS_STATS_DEC(vn_active);

Просмотреть файл

@ -1744,8 +1744,8 @@ struct super_operations {
* I_FREEING Set when inode is about to be freed but still has dirty * I_FREEING Set when inode is about to be freed but still has dirty
* pages or buffers attached or the inode itself is still * pages or buffers attached or the inode itself is still
* dirty. * dirty.
* I_CLEAR Added by end_writeback(). In this state the inode is clean * I_CLEAR Added by clear_inode(). In this state the inode is
* and can be destroyed. Inode keeps I_FREEING. * clean and can be destroyed. Inode keeps I_FREEING.
* *
* Inodes that are I_WILL_FREE, I_FREEING or I_CLEAR are * Inodes that are I_WILL_FREE, I_FREEING or I_CLEAR are
* prohibited for many purposes. iget() must wait for * prohibited for many purposes. iget() must wait for
@ -2328,7 +2328,7 @@ extern unsigned int get_next_ino(void);
extern void __iget(struct inode * inode); extern void __iget(struct inode * inode);
extern void iget_failed(struct inode *); extern void iget_failed(struct inode *);
extern void end_writeback(struct inode *); extern void clear_inode(struct inode *);
extern void __destroy_inode(struct inode *); extern void __destroy_inode(struct inode *);
extern struct inode *new_inode_pseudo(struct super_block *sb); extern struct inode *new_inode_pseudo(struct super_block *sb);
extern struct inode *new_inode(struct super_block *sb); extern struct inode *new_inode(struct super_block *sb);

Просмотреть файл

@ -249,7 +249,7 @@ static void mqueue_evict_inode(struct inode *inode)
int i; int i;
struct ipc_namespace *ipc_ns; struct ipc_namespace *ipc_ns;
end_writeback(inode); clear_inode(inode);
if (S_ISDIR(inode->i_mode)) if (S_ISDIR(inode->i_mode))
return; return;

Просмотреть файл

@ -597,7 +597,7 @@ static void shmem_evict_inode(struct inode *inode)
} }
BUG_ON(inode->i_blocks); BUG_ON(inode->i_blocks);
shmem_free_inode(inode->i_sb); shmem_free_inode(inode->i_sb);
end_writeback(inode); clear_inode(inode);
} }
/* /*