Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
ac14a95b
Commit
ac14a95b
authored
Jun 06, 2010
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
convert ext3 to ->evict_inode()
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
0f3f63a4
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
29 additions
and
36 deletions
+29
-36
fs/ext3/ialloc.c
fs/ext3/ialloc.c
+0
-12
fs/ext3/inode.c
fs/ext3/inode.c
+27
-10
fs/ext3/super.c
fs/ext3/super.c
+1
-13
include/linux/ext3_fs.h
include/linux/ext3_fs.h
+1
-1
No files found.
fs/ext3/ialloc.c
View file @
ac14a95b
...
...
@@ -119,20 +119,8 @@ void ext3_free_inode (handle_t *handle, struct inode * inode)
ino
=
inode
->
i_ino
;
ext3_debug
(
"freeing inode %lu
\n
"
,
ino
);
/*
* Note: we must free any quota before locking the superblock,
* as writing the quota to disk may need the lock as well.
*/
dquot_initialize
(
inode
);
ext3_xattr_delete_inode
(
handle
,
inode
);
dquot_free_inode
(
inode
);
dquot_drop
(
inode
);
is_directory
=
S_ISDIR
(
inode
->
i_mode
);
/* Do this BEFORE marking the inode not in use or returning an error */
clear_inode
(
inode
);
es
=
EXT3_SB
(
sb
)
->
s_es
;
if
(
ino
<
EXT3_FIRST_INO
(
sb
)
||
ino
>
le32_to_cpu
(
es
->
s_inodes_count
))
{
ext3_error
(
sb
,
"ext3_free_inode"
,
...
...
fs/ext3/inode.c
View file @
ac14a95b
...
...
@@ -190,18 +190,28 @@ static int truncate_restart_transaction(handle_t *handle, struct inode *inode)
}
/*
* Called at
the last iput() if i_nlink is zero.
* Called at
inode eviction from icache
*/
void
ext3_
delete_inode
(
struct
inode
*
inode
)
void
ext3_
evict_inode
(
struct
inode
*
inode
)
{
struct
ext3_block_alloc_info
*
rsv
;
handle_t
*
handle
;
int
want_delete
=
0
;
if
(
!
i
s_bad_inode
(
inode
))
if
(
!
i
node
->
i_nlink
&&
!
is_bad_inode
(
inode
))
{
dquot_initialize
(
inode
);
want_delete
=
1
;
}
truncate_inode_pages
(
&
inode
->
i_data
,
0
);
if
(
is_bad_inode
(
inode
))
ext3_discard_reservation
(
inode
);
rsv
=
EXT3_I
(
inode
)
->
i_block_alloc_info
;
EXT3_I
(
inode
)
->
i_block_alloc_info
=
NULL
;
if
(
unlikely
(
rsv
))
kfree
(
rsv
);
if
(
!
want_delete
)
goto
no_delete
;
handle
=
start_transaction
(
inode
);
...
...
@@ -238,15 +248,22 @@ void ext3_delete_inode (struct inode * inode)
* having errors), but we can't free the inode if the mark_dirty
* fails.
*/
if
(
ext3_mark_inode_dirty
(
handle
,
inode
))
/* If that failed, just do the required in-core inode clear. */
clear_inode
(
inode
);
else
if
(
ext3_mark_inode_dirty
(
handle
,
inode
))
{
/* If that failed, just dquot_drop() and be done with that */
dquot_drop
(
inode
);
end_writeback
(
inode
);
}
else
{
ext3_xattr_delete_inode
(
handle
,
inode
);
dquot_free_inode
(
inode
);
dquot_drop
(
inode
);
end_writeback
(
inode
);
ext3_free_inode
(
handle
,
inode
);
}
ext3_journal_stop
(
handle
);
return
;
no_delete:
clear_inode
(
inode
);
/* We must guarantee clearing of inode... */
end_writeback
(
inode
);
dquot_drop
(
inode
);
}
typedef
struct
{
...
...
@@ -2564,7 +2581,7 @@ void ext3_truncate(struct inode *inode)
* If this was a simple ftruncate(), and the file will remain alive
* then we need to clear up the orphan record which we created above.
* However, if this was a real unlink then we were called by
* ext3_
delete
_inode(), and we allow that function to clean up the
* ext3_
evict
_inode(), and we allow that function to clean up the
* orphan info for us.
*/
if
(
inode
->
i_nlink
)
...
...
fs/ext3/super.c
View file @
ac14a95b
...
...
@@ -527,17 +527,6 @@ static void destroy_inodecache(void)
kmem_cache_destroy
(
ext3_inode_cachep
);
}
static
void
ext3_clear_inode
(
struct
inode
*
inode
)
{
struct
ext3_block_alloc_info
*
rsv
=
EXT3_I
(
inode
)
->
i_block_alloc_info
;
dquot_drop
(
inode
);
ext3_discard_reservation
(
inode
);
EXT3_I
(
inode
)
->
i_block_alloc_info
=
NULL
;
if
(
unlikely
(
rsv
))
kfree
(
rsv
);
}
static
inline
void
ext3_show_quota_options
(
struct
seq_file
*
seq
,
struct
super_block
*
sb
)
{
#if defined(CONFIG_QUOTA)
...
...
@@ -783,14 +772,13 @@ static const struct super_operations ext3_sops = {
.
destroy_inode
=
ext3_destroy_inode
,
.
write_inode
=
ext3_write_inode
,
.
dirty_inode
=
ext3_dirty_inode
,
.
delete_inode
=
ext3_delete
_inode
,
.
evict_inode
=
ext3_evict
_inode
,
.
put_super
=
ext3_put_super
,
.
sync_fs
=
ext3_sync_fs
,
.
freeze_fs
=
ext3_freeze
,
.
unfreeze_fs
=
ext3_unfreeze
,
.
statfs
=
ext3_statfs
,
.
remount_fs
=
ext3_remount
,
.
clear_inode
=
ext3_clear_inode
,
.
show_options
=
ext3_show_options
,
#ifdef CONFIG_QUOTA
.
quota_read
=
ext3_quota_read
,
...
...
include/linux/ext3_fs.h
View file @
ac14a95b
...
...
@@ -896,7 +896,7 @@ int ext3_get_blocks_handle(handle_t *handle, struct inode *inode,
extern
struct
inode
*
ext3_iget
(
struct
super_block
*
,
unsigned
long
);
extern
int
ext3_write_inode
(
struct
inode
*
,
struct
writeback_control
*
);
extern
int
ext3_setattr
(
struct
dentry
*
,
struct
iattr
*
);
extern
void
ext3_
delete
_inode
(
struct
inode
*
);
extern
void
ext3_
evict
_inode
(
struct
inode
*
);
extern
int
ext3_sync_inode
(
handle_t
*
,
struct
inode
*
);
extern
void
ext3_discard_reservation
(
struct
inode
*
);
extern
void
ext3_dirty_inode
(
struct
inode
*
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment