diff options
author | Jan Kara <jack@suse.cz> | 2012-06-12 10:20:46 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-07-31 01:45:53 -0400 |
commit | 1e8b212fe5dcee9d3dbb152d235f3c33458fb26e (patch) | |
tree | c21036f86f455c6289704b35c58c8d01d7821f12 /fs/ext2/inode.c | |
parent | b2b5ef5c8e89f19b68c174bf246f3ca212dbf0bc (diff) |
ext2: Implement freezing
The only missing piece to make freezing work reliably with ext2 is to
stop iput() of unlinked inode from deleting the inode on frozen filesystem.
So add a necessary protection to ext2_evict_inode().
We also provide appropriate ->freeze_fs and ->unfreeze_fs functions.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ext2/inode.c')
-rw-r--r-- | fs/ext2/inode.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 264d315f6c4..6363ac66faf 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c | |||
@@ -79,6 +79,7 @@ void ext2_evict_inode(struct inode * inode) | |||
79 | truncate_inode_pages(&inode->i_data, 0); | 79 | truncate_inode_pages(&inode->i_data, 0); |
80 | 80 | ||
81 | if (want_delete) { | 81 | if (want_delete) { |
82 | sb_start_intwrite(inode->i_sb); | ||
82 | /* set dtime */ | 83 | /* set dtime */ |
83 | EXT2_I(inode)->i_dtime = get_seconds(); | 84 | EXT2_I(inode)->i_dtime = get_seconds(); |
84 | mark_inode_dirty(inode); | 85 | mark_inode_dirty(inode); |
@@ -98,8 +99,10 @@ void ext2_evict_inode(struct inode * inode) | |||
98 | if (unlikely(rsv)) | 99 | if (unlikely(rsv)) |
99 | kfree(rsv); | 100 | kfree(rsv); |
100 | 101 | ||
101 | if (want_delete) | 102 | if (want_delete) { |
102 | ext2_free_inode(inode); | 103 | ext2_free_inode(inode); |
104 | sb_end_intwrite(inode->i_sb); | ||
105 | } | ||
103 | } | 106 | } |
104 | 107 | ||
105 | typedef struct { | 108 | typedef struct { |