diff options
| author | Christoph Hellwig <hch@infradead.org> | 2010-03-03 09:05:04 -0500 |
|---|---|---|
| committer | Jan Kara <jack@suse.cz> | 2010-03-04 18:20:29 -0500 |
| commit | 257ba15cedf1288f0c96118d7e63947231d27278 (patch) | |
| tree | 7a977a0ea08a324ce74aedce19406cb0688f15e2 /fs | |
| parent | b43fa8284d7790d9cca32c9c55e24f29be2fa33b (diff) | |
dquot: move dquot drop responsibility into the filesystem
Currently clear_inode calls vfs_dq_drop directly. This means
we tie the quota code into the VFS. Get rid of that and make the
filesystem responsible for the drop inside the ->clear_inode
superblock operation.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/ext2/super.c | 2 | ||||
| -rw-r--r-- | fs/ext3/super.c | 2 | ||||
| -rw-r--r-- | fs/ext4/super.c | 1 | ||||
| -rw-r--r-- | fs/inode.c | 1 | ||||
| -rw-r--r-- | fs/jfs/super.c | 6 | ||||
| -rw-r--r-- | fs/ocfs2/inode.c | 2 | ||||
| -rw-r--r-- | fs/reiserfs/super.c | 6 | ||||
| -rw-r--r-- | fs/udf/inode.c | 2 | ||||
| -rw-r--r-- | fs/ufs/super.c | 6 |
9 files changed, 27 insertions, 1 deletions
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index f9cb54a585ce..98815d2a5664 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c | |||
| @@ -194,6 +194,8 @@ static void destroy_inodecache(void) | |||
| 194 | static void ext2_clear_inode(struct inode *inode) | 194 | static void ext2_clear_inode(struct inode *inode) |
| 195 | { | 195 | { |
| 196 | struct ext2_block_alloc_info *rsv = EXT2_I(inode)->i_block_alloc_info; | 196 | struct ext2_block_alloc_info *rsv = EXT2_I(inode)->i_block_alloc_info; |
| 197 | |||
| 198 | vfs_dq_drop(inode); | ||
| 197 | ext2_discard_reservation(inode); | 199 | ext2_discard_reservation(inode); |
| 198 | EXT2_I(inode)->i_block_alloc_info = NULL; | 200 | EXT2_I(inode)->i_block_alloc_info = NULL; |
| 199 | if (unlikely(rsv)) | 201 | if (unlikely(rsv)) |
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index f7d4a2c19dee..2277b1a98e62 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
| @@ -528,6 +528,8 @@ static void destroy_inodecache(void) | |||
| 528 | static void ext3_clear_inode(struct inode *inode) | 528 | static void ext3_clear_inode(struct inode *inode) |
| 529 | { | 529 | { |
| 530 | struct ext3_block_alloc_info *rsv = EXT3_I(inode)->i_block_alloc_info; | 530 | struct ext3_block_alloc_info *rsv = EXT3_I(inode)->i_block_alloc_info; |
| 531 | |||
| 532 | vfs_dq_drop(inode); | ||
| 531 | ext3_discard_reservation(inode); | 533 | ext3_discard_reservation(inode); |
| 532 | EXT3_I(inode)->i_block_alloc_info = NULL; | 534 | EXT3_I(inode)->i_block_alloc_info = NULL; |
| 533 | if (unlikely(rsv)) | 535 | if (unlikely(rsv)) |
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index b4253fb7bab6..56554c8850ec 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
| @@ -761,6 +761,7 @@ static void destroy_inodecache(void) | |||
| 761 | 761 | ||
| 762 | static void ext4_clear_inode(struct inode *inode) | 762 | static void ext4_clear_inode(struct inode *inode) |
| 763 | { | 763 | { |
| 764 | vfs_dq_drop(inode); | ||
| 764 | ext4_discard_preallocations(inode); | 765 | ext4_discard_preallocations(inode); |
| 765 | if (EXT4_JOURNAL(inode)) | 766 | if (EXT4_JOURNAL(inode)) |
| 766 | jbd2_journal_release_jbd_inode(EXT4_SB(inode->i_sb)->s_journal, | 767 | jbd2_journal_release_jbd_inode(EXT4_SB(inode->i_sb)->s_journal, |
diff --git a/fs/inode.c b/fs/inode.c index 03dfeb2e3928..f1aef3482b0e 100644 --- a/fs/inode.c +++ b/fs/inode.c | |||
| @@ -314,7 +314,6 @@ void clear_inode(struct inode *inode) | |||
| 314 | BUG_ON(!(inode->i_state & I_FREEING)); | 314 | BUG_ON(!(inode->i_state & I_FREEING)); |
| 315 | BUG_ON(inode->i_state & I_CLEAR); | 315 | BUG_ON(inode->i_state & I_CLEAR); |
| 316 | inode_sync_wait(inode); | 316 | inode_sync_wait(inode); |
| 317 | vfs_dq_drop(inode); | ||
| 318 | if (inode->i_sb->s_op->clear_inode) | 317 | if (inode->i_sb->s_op->clear_inode) |
| 319 | inode->i_sb->s_op->clear_inode(inode); | 318 | inode->i_sb->s_op->clear_inode(inode); |
| 320 | if (S_ISBLK(inode->i_mode) && inode->i_bdev) | 319 | if (S_ISBLK(inode->i_mode) && inode->i_bdev) |
diff --git a/fs/jfs/super.c b/fs/jfs/super.c index d929a822a74e..4086fa593419 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c | |||
| @@ -131,6 +131,11 @@ static void jfs_destroy_inode(struct inode *inode) | |||
| 131 | kmem_cache_free(jfs_inode_cachep, ji); | 131 | kmem_cache_free(jfs_inode_cachep, ji); |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | static void jfs_clear_inode(struct inode *inode) | ||
| 135 | { | ||
| 136 | vfs_dq_drop(inode); | ||
| 137 | } | ||
| 138 | |||
| 134 | static int jfs_statfs(struct dentry *dentry, struct kstatfs *buf) | 139 | static int jfs_statfs(struct dentry *dentry, struct kstatfs *buf) |
| 135 | { | 140 | { |
| 136 | struct jfs_sb_info *sbi = JFS_SBI(dentry->d_sb); | 141 | struct jfs_sb_info *sbi = JFS_SBI(dentry->d_sb); |
| @@ -745,6 +750,7 @@ static const struct super_operations jfs_super_operations = { | |||
| 745 | .dirty_inode = jfs_dirty_inode, | 750 | .dirty_inode = jfs_dirty_inode, |
| 746 | .write_inode = jfs_write_inode, | 751 | .write_inode = jfs_write_inode, |
| 747 | .delete_inode = jfs_delete_inode, | 752 | .delete_inode = jfs_delete_inode, |
| 753 | .clear_inode = jfs_clear_inode, | ||
| 748 | .put_super = jfs_put_super, | 754 | .put_super = jfs_put_super, |
| 749 | .sync_fs = jfs_sync_fs, | 755 | .sync_fs = jfs_sync_fs, |
| 750 | .freeze_fs = jfs_freeze, | 756 | .freeze_fs = jfs_freeze, |
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c index cb7f67d8441a..13eb5d467c40 100644 --- a/fs/ocfs2/inode.c +++ b/fs/ocfs2/inode.c | |||
| @@ -1087,6 +1087,8 @@ void ocfs2_clear_inode(struct inode *inode) | |||
| 1087 | mlog_bug_on_msg(OCFS2_SB(inode->i_sb) == NULL, | 1087 | mlog_bug_on_msg(OCFS2_SB(inode->i_sb) == NULL, |
| 1088 | "Inode=%lu\n", inode->i_ino); | 1088 | "Inode=%lu\n", inode->i_ino); |
| 1089 | 1089 | ||
| 1090 | vfs_dq_drop(inode); | ||
| 1091 | |||
| 1090 | /* To preven remote deletes we hold open lock before, now it | 1092 | /* To preven remote deletes we hold open lock before, now it |
| 1091 | * is time to unlock PR and EX open locks. */ | 1093 | * is time to unlock PR and EX open locks. */ |
| 1092 | ocfs2_open_unlock(inode); | 1094 | ocfs2_open_unlock(inode); |
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index 97c3e8ed7db6..6b24e70e329b 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c | |||
| @@ -578,6 +578,11 @@ out: | |||
| 578 | reiserfs_write_unlock_once(inode->i_sb, lock_depth); | 578 | reiserfs_write_unlock_once(inode->i_sb, lock_depth); |
| 579 | } | 579 | } |
| 580 | 580 | ||
| 581 | static void reiserfs_clear_inode(struct inode *inode) | ||
| 582 | { | ||
| 583 | vfs_dq_drop(inode); | ||
| 584 | } | ||
| 585 | |||
| 581 | #ifdef CONFIG_QUOTA | 586 | #ifdef CONFIG_QUOTA |
| 582 | static ssize_t reiserfs_quota_write(struct super_block *, int, const char *, | 587 | static ssize_t reiserfs_quota_write(struct super_block *, int, const char *, |
| 583 | size_t, loff_t); | 588 | size_t, loff_t); |
| @@ -590,6 +595,7 @@ static const struct super_operations reiserfs_sops = { | |||
| 590 | .destroy_inode = reiserfs_destroy_inode, | 595 | .destroy_inode = reiserfs_destroy_inode, |
| 591 | .write_inode = reiserfs_write_inode, | 596 | .write_inode = reiserfs_write_inode, |
| 592 | .dirty_inode = reiserfs_dirty_inode, | 597 | .dirty_inode = reiserfs_dirty_inode, |
| 598 | .clear_inode = reiserfs_clear_inode, | ||
| 593 | .delete_inode = reiserfs_delete_inode, | 599 | .delete_inode = reiserfs_delete_inode, |
| 594 | .put_super = reiserfs_put_super, | 600 | .put_super = reiserfs_put_super, |
| 595 | .write_super = reiserfs_write_super, | 601 | .write_super = reiserfs_write_super, |
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index f90231eb2916..859389a3832b 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
| @@ -108,6 +108,8 @@ void udf_clear_inode(struct inode *inode) | |||
| 108 | (unsigned long long)inode->i_size, | 108 | (unsigned long long)inode->i_size, |
| 109 | (unsigned long long)iinfo->i_lenExtents); | 109 | (unsigned long long)iinfo->i_lenExtents); |
| 110 | } | 110 | } |
| 111 | |||
| 112 | vfs_dq_drop(inode); | ||
| 111 | kfree(iinfo->i_ext.i_data); | 113 | kfree(iinfo->i_ext.i_data); |
| 112 | iinfo->i_ext.i_data = NULL; | 114 | iinfo->i_ext.i_data = NULL; |
| 113 | } | 115 | } |
diff --git a/fs/ufs/super.c b/fs/ufs/super.c index 143c20bfb04b..95d61cb3a5b8 100644 --- a/fs/ufs/super.c +++ b/fs/ufs/super.c | |||
| @@ -1432,6 +1432,11 @@ static void destroy_inodecache(void) | |||
| 1432 | kmem_cache_destroy(ufs_inode_cachep); | 1432 | kmem_cache_destroy(ufs_inode_cachep); |
| 1433 | } | 1433 | } |
| 1434 | 1434 | ||
| 1435 | static void ufs_clear_inode(struct inode *inode) | ||
| 1436 | { | ||
| 1437 | vfs_dq_drop(inode); | ||
| 1438 | } | ||
| 1439 | |||
| 1435 | #ifdef CONFIG_QUOTA | 1440 | #ifdef CONFIG_QUOTA |
| 1436 | static ssize_t ufs_quota_read(struct super_block *, int, char *,size_t, loff_t); | 1441 | static ssize_t ufs_quota_read(struct super_block *, int, char *,size_t, loff_t); |
| 1437 | static ssize_t ufs_quota_write(struct super_block *, int, const char *, size_t, loff_t); | 1442 | static ssize_t ufs_quota_write(struct super_block *, int, const char *, size_t, loff_t); |
| @@ -1442,6 +1447,7 @@ static const struct super_operations ufs_super_ops = { | |||
| 1442 | .destroy_inode = ufs_destroy_inode, | 1447 | .destroy_inode = ufs_destroy_inode, |
| 1443 | .write_inode = ufs_write_inode, | 1448 | .write_inode = ufs_write_inode, |
| 1444 | .delete_inode = ufs_delete_inode, | 1449 | .delete_inode = ufs_delete_inode, |
| 1450 | .clear_inode = ufs_clear_inode, | ||
| 1445 | .put_super = ufs_put_super, | 1451 | .put_super = ufs_put_super, |
| 1446 | .write_super = ufs_write_super, | 1452 | .write_super = ufs_write_super, |
| 1447 | .sync_fs = ufs_sync_fs, | 1453 | .sync_fs = ufs_sync_fs, |
