diff options
| author | Dave Chinner <dchinner@redhat.com> | 2011-03-22 07:23:39 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-03-24 21:16:32 -0400 |
| commit | f283c86afe6aa70b733d1ecebad5d9464943b774 (patch) | |
| tree | beaeca959996f2d8a00a997c56932dc5916bfec8 /Documentation/filesystems/porting | |
| parent | 02afc410f363f98ac4f186341e38dcec13fc0e60 (diff) | |
fs: remove inode_lock from iput_final and prune_icache
Now that inode state changes are protected by the inode->i_lock and
the inode LRU manipulations by the inode_lru_lock, we can remove the
inode_lock from prune_icache and the initial part of iput_final().
instead of using the inode_lock to protect the inode during
iput_final, use the inode->i_lock instead. This protects the inode
against new references being taken while we change the inode state
to I_FREEING, as well as preventing prune_icache from grabbing the
inode while we are manipulating it. Hence we no longer need the
inode_lock in iput_final prior to setting I_FREEING on the inode.
For prune_icache, we no longer need the inode_lock to protect the
LRU list, and the inodes themselves are protected against freeing
races by the inode->i_lock. Hence we can lift the inode_lock from
prune_icache as well.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'Documentation/filesystems/porting')
| -rw-r--r-- | Documentation/filesystems/porting | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index 0c986c9e851..6e29954851a 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting | |||
| @@ -298,11 +298,14 @@ be used instead. It gets called whenever the inode is evicted, whether it has | |||
| 298 | remaining links or not. Caller does *not* evict the pagecache or inode-associated | 298 | remaining links or not. Caller does *not* evict the pagecache or inode-associated |
| 299 | metadata buffers; getting rid of those is responsibility of method, as it had | 299 | metadata buffers; getting rid of those is responsibility of method, as it had |
| 300 | been for ->delete_inode(). | 300 | been for ->delete_inode(). |
| 301 | ->drop_inode() returns int now; it's called on final iput() with inode_lock | 301 | |
| 302 | held and it returns true if filesystems wants the inode to be dropped. As before, | 302 | ->drop_inode() returns int now; it's called on final iput() with |
| 303 | generic_drop_inode() is still the default and it's been updated appropriately. | 303 | inode->i_lock held and it returns true if filesystems wants the inode to be |
| 304 | generic_delete_inode() is also alive and it consists simply of return 1. Note that | 304 | dropped. As before, generic_drop_inode() is still the default and it's been |
| 305 | all actual eviction work is done by caller after ->drop_inode() returns. | 305 | updated appropriately. generic_delete_inode() is also alive and it consists |
| 306 | simply of return 1. Note that all actual eviction work is done by caller after | ||
| 307 | ->drop_inode() returns. | ||
| 308 | |||
| 306 | clear_inode() is gone; use end_writeback() instead. As before, it must | 309 | clear_inode() is gone; use end_writeback() instead. As before, it must |
| 307 | be called exactly once on each call of ->evict_inode() (as it used to be for | 310 | be called exactly once on each call of ->evict_inode() (as it used to be for |
| 308 | each call of ->delete_inode()). Unlike before, if you are using inode-associated | 311 | each call of ->delete_inode()). Unlike before, if you are using inode-associated |
| @@ -397,6 +400,9 @@ a file off. | |||
| 397 | 400 | ||
| 398 | -- | 401 | -- |
| 399 | [mandatory] | 402 | [mandatory] |
| 403 | |||
| 404 | -- | ||
| 405 | [mandatory] | ||
| 400 | ->get_sb() is gone. Switch to use of ->mount(). Typically it's just | 406 | ->get_sb() is gone. Switch to use of ->mount(). Typically it's just |
| 401 | a matter of switching from calling get_sb_... to mount_... and changing the | 407 | a matter of switching from calling get_sb_... to mount_... and changing the |
| 402 | function type. If you were doing it manually, just switch from setting ->mnt_root | 408 | function type. If you were doing it manually, just switch from setting ->mnt_root |
