diff options
author | Richard Yao <[email protected]> | 2012-07-23 11:39:25 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-07-23 12:29:36 -0700 |
commit | 739a1a82e0f366923e8d9bc8f9ad4b1c680a780b (patch) | |
tree | 33d846b16ea8ddaf39bb77a8658e63d640794fee /module | |
parent | ea1fdf46e2d37e9eb048f9add0fb06e77e9ee6e2 (diff) |
Linux 3.5 compat, end_writeback() changed to clear_inode()
The end_writeback() function was changed by moving the call to
inode_sync_wait() earlier in to evict(). This effecitvely changes
the ordering of the sync but it does not impact the details of
the zfs implementation.
However, as part of this change end_writeback() was renamed to
clear_inode() to reflect the new semantics. This change does
impact us and clear_inode() now maps to end_writeback() for
kernels prior to 3.5.
Signed-off-by: Richard Yao <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #784
Diffstat (limited to 'module')
-rw-r--r-- | module/zfs/zpl_super.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/module/zfs/zpl_super.c b/module/zfs/zpl_super.c index 98d0a0312..29d7f7dfb 100644 --- a/module/zfs/zpl_super.c +++ b/module/zfs/zpl_super.c @@ -64,10 +64,15 @@ zpl_inode_destroy(struct inode *ip) * This elaborate mechanism was replaced by ->evict_inode() which * does the job of both ->delete_inode() and ->clear_inode(). It * will be called exactly once, and when it returns the inode must - * be in a state where it can simply be freed. The ->evict_inode() - * callback must minimally truncate the inode pages, and call - * end_writeback() to complete all outstanding writeback for the - * inode. After this is complete evict inode can cleanup any + * be in a state where it can simply be freed.i + * + * The ->evict_inode() callback must minimally truncate the inode pages, + * and call clear_inode(). For 2.6.35 and later kernels this will + * simply update the inode state, with the sync occurring before the + * truncate in evict(). For earlier kernels clear_inode() maps to + * end_writeback() which is responsible for completing all outstanding + * write back. In either case, once this is done it is safe to cleanup + * any remaining inode specific data via zfs_inactive(). * remaining filesystem specific data. */ #ifdef HAVE_EVICT_INODE @@ -75,7 +80,7 @@ static void zpl_evict_inode(struct inode *ip) { truncate_setsize(ip, 0); - end_writeback(ip); + clear_inode(ip); zfs_inactive(ip); } |