diff options
author | Christoph Hellwig <hch@infradead.org> | 2010-03-03 09:05:07 -0500 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2010-03-04 18:20:30 -0500 |
commit | 871a293155a24554e153538d36e3a80fa169aefb (patch) | |
tree | 7e38f5a2f9e87f63cbc4bc1077a4bb49dde441b0 | |
parent | 907f4554e2521cb28b0009d17167760650a9561c (diff) |
dquot: cleanup dquot initialize routine
Get rid of the initialize dquot operation - it is now always called from
the filesystem and if a filesystem really needs it's own (which none
currently does) it can just call into it's own routine directly.
Rename the now static low-level dquot_initialize helper to __dquot_initialize
and vfs_dq_init to dquot_initialize to have a consistent namespace.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
39 files changed, 141 insertions, 145 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index fa10e4bf8e5e..06bbbed71206 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -460,7 +460,6 @@ in sys_read() and friends. | |||
460 | 460 | ||
461 | --------------------------- dquot_operations ------------------------------- | 461 | --------------------------- dquot_operations ------------------------------- |
462 | prototypes: | 462 | prototypes: |
463 | int (*initialize) (struct inode *, int); | ||
464 | int (*write_dquot) (struct dquot *); | 463 | int (*write_dquot) (struct dquot *); |
465 | int (*acquire_dquot) (struct dquot *); | 464 | int (*acquire_dquot) (struct dquot *); |
466 | int (*release_dquot) (struct dquot *); | 465 | int (*release_dquot) (struct dquot *); |
@@ -473,7 +472,6 @@ a proper locking wrt the filesystem and call the generic quota operations. | |||
473 | What filesystem should expect from the generic quota functions: | 472 | What filesystem should expect from the generic quota functions: |
474 | 473 | ||
475 | FS recursion Held locks when called | 474 | FS recursion Held locks when called |
476 | initialize: yes maybe dqonoff_sem | ||
477 | write_dquot: yes dqonoff_sem or dqptr_sem | 475 | write_dquot: yes dqonoff_sem or dqptr_sem |
478 | acquire_dquot: yes dqonoff_sem or dqptr_sem | 476 | acquire_dquot: yes dqonoff_sem or dqptr_sem |
479 | release_dquot: yes dqonoff_sem or dqptr_sem | 477 | release_dquot: yes dqonoff_sem or dqptr_sem |
diff --git a/fs/ext2/file.c b/fs/ext2/file.c index d11f6e484519..5d198d0697fb 100644 --- a/fs/ext2/file.c +++ b/fs/ext2/file.c | |||
@@ -20,6 +20,7 @@ | |||
20 | 20 | ||
21 | #include <linux/time.h> | 21 | #include <linux/time.h> |
22 | #include <linux/pagemap.h> | 22 | #include <linux/pagemap.h> |
23 | #include <linux/quotaops.h> | ||
23 | #include "ext2.h" | 24 | #include "ext2.h" |
24 | #include "xattr.h" | 25 | #include "xattr.h" |
25 | #include "acl.h" | 26 | #include "acl.h" |
diff --git a/fs/ext2/ialloc.c b/fs/ext2/ialloc.c index 88b71972c626..ad7d572ee8dc 100644 --- a/fs/ext2/ialloc.c +++ b/fs/ext2/ialloc.c | |||
@@ -586,7 +586,7 @@ got: | |||
586 | goto fail_drop; | 586 | goto fail_drop; |
587 | } | 587 | } |
588 | 588 | ||
589 | vfs_dq_init(inode); | 589 | dquot_initialize(inode); |
590 | err = dquot_alloc_inode(inode); | 590 | err = dquot_alloc_inode(inode); |
591 | if (err) | 591 | if (err) |
592 | goto fail_drop; | 592 | goto fail_drop; |
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index c87840c33e17..45ff49f0a4b5 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c | |||
@@ -59,7 +59,7 @@ static inline int ext2_inode_is_fast_symlink(struct inode *inode) | |||
59 | void ext2_delete_inode (struct inode * inode) | 59 | void ext2_delete_inode (struct inode * inode) |
60 | { | 60 | { |
61 | if (!is_bad_inode(inode)) | 61 | if (!is_bad_inode(inode)) |
62 | vfs_dq_init(inode); | 62 | dquot_initialize(inode); |
63 | truncate_inode_pages(&inode->i_data, 0); | 63 | truncate_inode_pages(&inode->i_data, 0); |
64 | 64 | ||
65 | if (is_bad_inode(inode)) | 65 | if (is_bad_inode(inode)) |
@@ -1461,7 +1461,7 @@ int ext2_setattr(struct dentry *dentry, struct iattr *iattr) | |||
1461 | return error; | 1461 | return error; |
1462 | 1462 | ||
1463 | if (iattr->ia_valid & ATTR_SIZE) | 1463 | if (iattr->ia_valid & ATTR_SIZE) |
1464 | vfs_dq_init(inode); | 1464 | dquot_initialize(inode); |
1465 | if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || | 1465 | if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || |
1466 | (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { | 1466 | (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { |
1467 | error = dquot_transfer(inode, iattr); | 1467 | error = dquot_transfer(inode, iattr); |
diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index 5923df7b22af..71efb0e9a3f2 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c | |||
@@ -102,7 +102,7 @@ static int ext2_create (struct inode * dir, struct dentry * dentry, int mode, st | |||
102 | { | 102 | { |
103 | struct inode *inode; | 103 | struct inode *inode; |
104 | 104 | ||
105 | vfs_dq_init(dir); | 105 | dquot_initialize(dir); |
106 | 106 | ||
107 | inode = ext2_new_inode(dir, mode); | 107 | inode = ext2_new_inode(dir, mode); |
108 | if (IS_ERR(inode)) | 108 | if (IS_ERR(inode)) |
@@ -131,7 +131,7 @@ static int ext2_mknod (struct inode * dir, struct dentry *dentry, int mode, dev_ | |||
131 | if (!new_valid_dev(rdev)) | 131 | if (!new_valid_dev(rdev)) |
132 | return -EINVAL; | 132 | return -EINVAL; |
133 | 133 | ||
134 | vfs_dq_init(dir); | 134 | dquot_initialize(dir); |
135 | 135 | ||
136 | inode = ext2_new_inode (dir, mode); | 136 | inode = ext2_new_inode (dir, mode); |
137 | err = PTR_ERR(inode); | 137 | err = PTR_ERR(inode); |
@@ -157,7 +157,7 @@ static int ext2_symlink (struct inode * dir, struct dentry * dentry, | |||
157 | if (l > sb->s_blocksize) | 157 | if (l > sb->s_blocksize) |
158 | goto out; | 158 | goto out; |
159 | 159 | ||
160 | vfs_dq_init(dir); | 160 | dquot_initialize(dir); |
161 | 161 | ||
162 | inode = ext2_new_inode (dir, S_IFLNK | S_IRWXUGO); | 162 | inode = ext2_new_inode (dir, S_IFLNK | S_IRWXUGO); |
163 | err = PTR_ERR(inode); | 163 | err = PTR_ERR(inode); |
@@ -202,7 +202,7 @@ static int ext2_link (struct dentry * old_dentry, struct inode * dir, | |||
202 | if (inode->i_nlink >= EXT2_LINK_MAX) | 202 | if (inode->i_nlink >= EXT2_LINK_MAX) |
203 | return -EMLINK; | 203 | return -EMLINK; |
204 | 204 | ||
205 | vfs_dq_init(dir); | 205 | dquot_initialize(dir); |
206 | 206 | ||
207 | inode->i_ctime = CURRENT_TIME_SEC; | 207 | inode->i_ctime = CURRENT_TIME_SEC; |
208 | inode_inc_link_count(inode); | 208 | inode_inc_link_count(inode); |
@@ -226,7 +226,7 @@ static int ext2_mkdir(struct inode * dir, struct dentry * dentry, int mode) | |||
226 | if (dir->i_nlink >= EXT2_LINK_MAX) | 226 | if (dir->i_nlink >= EXT2_LINK_MAX) |
227 | goto out; | 227 | goto out; |
228 | 228 | ||
229 | vfs_dq_init(dir); | 229 | dquot_initialize(dir); |
230 | 230 | ||
231 | inode_inc_link_count(dir); | 231 | inode_inc_link_count(dir); |
232 | 232 | ||
@@ -274,7 +274,7 @@ static int ext2_unlink(struct inode * dir, struct dentry *dentry) | |||
274 | struct page * page; | 274 | struct page * page; |
275 | int err = -ENOENT; | 275 | int err = -ENOENT; |
276 | 276 | ||
277 | vfs_dq_init(dir); | 277 | dquot_initialize(dir); |
278 | 278 | ||
279 | de = ext2_find_entry (dir, &dentry->d_name, &page); | 279 | de = ext2_find_entry (dir, &dentry->d_name, &page); |
280 | if (!de) | 280 | if (!de) |
@@ -318,8 +318,8 @@ static int ext2_rename (struct inode * old_dir, struct dentry * old_dentry, | |||
318 | struct ext2_dir_entry_2 * old_de; | 318 | struct ext2_dir_entry_2 * old_de; |
319 | int err = -ENOENT; | 319 | int err = -ENOENT; |
320 | 320 | ||
321 | vfs_dq_init(old_dir); | 321 | dquot_initialize(old_dir); |
322 | vfs_dq_init(new_dir); | 322 | dquot_initialize(new_dir); |
323 | 323 | ||
324 | old_de = ext2_find_entry (old_dir, &old_dentry->d_name, &old_page); | 324 | old_de = ext2_find_entry (old_dir, &old_dentry->d_name, &old_page); |
325 | if (!old_de) | 325 | if (!old_de) |
diff --git a/fs/ext3/file.c b/fs/ext3/file.c index 3c7fb11a3b29..f55df0e61cbd 100644 --- a/fs/ext3/file.c +++ b/fs/ext3/file.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/time.h> | 21 | #include <linux/time.h> |
22 | #include <linux/fs.h> | 22 | #include <linux/fs.h> |
23 | #include <linux/jbd.h> | 23 | #include <linux/jbd.h> |
24 | #include <linux/quotaops.h> | ||
24 | #include <linux/ext3_fs.h> | 25 | #include <linux/ext3_fs.h> |
25 | #include <linux/ext3_jbd.h> | 26 | #include <linux/ext3_jbd.h> |
26 | #include "xattr.h" | 27 | #include "xattr.h" |
diff --git a/fs/ext3/ialloc.c b/fs/ext3/ialloc.c index 7d7238f9f6f3..ef9008b885b5 100644 --- a/fs/ext3/ialloc.c +++ b/fs/ext3/ialloc.c | |||
@@ -123,7 +123,7 @@ void ext3_free_inode (handle_t *handle, struct inode * inode) | |||
123 | * Note: we must free any quota before locking the superblock, | 123 | * Note: we must free any quota before locking the superblock, |
124 | * as writing the quota to disk may need the lock as well. | 124 | * as writing the quota to disk may need the lock as well. |
125 | */ | 125 | */ |
126 | vfs_dq_init(inode); | 126 | dquot_initialize(inode); |
127 | ext3_xattr_delete_inode(handle, inode); | 127 | ext3_xattr_delete_inode(handle, inode); |
128 | dquot_free_inode(inode); | 128 | dquot_free_inode(inode); |
129 | dquot_drop(inode); | 129 | dquot_drop(inode); |
@@ -588,7 +588,7 @@ got: | |||
588 | sizeof(struct ext3_inode) - EXT3_GOOD_OLD_INODE_SIZE : 0; | 588 | sizeof(struct ext3_inode) - EXT3_GOOD_OLD_INODE_SIZE : 0; |
589 | 589 | ||
590 | ret = inode; | 590 | ret = inode; |
591 | vfs_dq_init(inode); | 591 | dquot_initialize(inode); |
592 | err = dquot_alloc_inode(inode); | 592 | err = dquot_alloc_inode(inode); |
593 | if (err) | 593 | if (err) |
594 | goto fail_drop; | 594 | goto fail_drop; |
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index d7962b0c57b3..ffbbc65e3f68 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c | |||
@@ -197,7 +197,7 @@ void ext3_delete_inode (struct inode * inode) | |||
197 | handle_t *handle; | 197 | handle_t *handle; |
198 | 198 | ||
199 | if (!is_bad_inode(inode)) | 199 | if (!is_bad_inode(inode)) |
200 | vfs_dq_init(inode); | 200 | dquot_initialize(inode); |
201 | 201 | ||
202 | truncate_inode_pages(&inode->i_data, 0); | 202 | truncate_inode_pages(&inode->i_data, 0); |
203 | 203 | ||
@@ -3152,7 +3152,7 @@ int ext3_setattr(struct dentry *dentry, struct iattr *attr) | |||
3152 | return error; | 3152 | return error; |
3153 | 3153 | ||
3154 | if (ia_valid & ATTR_SIZE) | 3154 | if (ia_valid & ATTR_SIZE) |
3155 | vfs_dq_init(inode); | 3155 | dquot_initialize(inode); |
3156 | if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) || | 3156 | if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) || |
3157 | (ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) { | 3157 | (ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) { |
3158 | handle_t *handle; | 3158 | handle_t *handle; |
@@ -3250,7 +3250,7 @@ static int ext3_writepage_trans_blocks(struct inode *inode) | |||
3250 | ret = 2 * (bpp + indirects) + 2; | 3250 | ret = 2 * (bpp + indirects) + 2; |
3251 | 3251 | ||
3252 | #ifdef CONFIG_QUOTA | 3252 | #ifdef CONFIG_QUOTA |
3253 | /* We know that structure was already allocated during vfs_dq_init so | 3253 | /* We know that structure was already allocated during dquot_initialize so |
3254 | * we will be updating only the data blocks + inodes */ | 3254 | * we will be updating only the data blocks + inodes */ |
3255 | ret += EXT3_MAXQUOTAS_TRANS_BLOCKS(inode->i_sb); | 3255 | ret += EXT3_MAXQUOTAS_TRANS_BLOCKS(inode->i_sb); |
3256 | #endif | 3256 | #endif |
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c index a492b371b134..ee184084ca42 100644 --- a/fs/ext3/namei.c +++ b/fs/ext3/namei.c | |||
@@ -1696,7 +1696,7 @@ static int ext3_create (struct inode * dir, struct dentry * dentry, int mode, | |||
1696 | struct inode * inode; | 1696 | struct inode * inode; |
1697 | int err, retries = 0; | 1697 | int err, retries = 0; |
1698 | 1698 | ||
1699 | vfs_dq_init(dir); | 1699 | dquot_initialize(dir); |
1700 | 1700 | ||
1701 | retry: | 1701 | retry: |
1702 | handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + | 1702 | handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + |
@@ -1732,7 +1732,7 @@ static int ext3_mknod (struct inode * dir, struct dentry *dentry, | |||
1732 | if (!new_valid_dev(rdev)) | 1732 | if (!new_valid_dev(rdev)) |
1733 | return -EINVAL; | 1733 | return -EINVAL; |
1734 | 1734 | ||
1735 | vfs_dq_init(dir); | 1735 | dquot_initialize(dir); |
1736 | 1736 | ||
1737 | retry: | 1737 | retry: |
1738 | handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + | 1738 | handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + |
@@ -1770,7 +1770,7 @@ static int ext3_mkdir(struct inode * dir, struct dentry * dentry, int mode) | |||
1770 | if (dir->i_nlink >= EXT3_LINK_MAX) | 1770 | if (dir->i_nlink >= EXT3_LINK_MAX) |
1771 | return -EMLINK; | 1771 | return -EMLINK; |
1772 | 1772 | ||
1773 | vfs_dq_init(dir); | 1773 | dquot_initialize(dir); |
1774 | 1774 | ||
1775 | retry: | 1775 | retry: |
1776 | handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + | 1776 | handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + |
@@ -2066,8 +2066,8 @@ static int ext3_rmdir (struct inode * dir, struct dentry *dentry) | |||
2066 | 2066 | ||
2067 | /* Initialize quotas before so that eventual writes go in | 2067 | /* Initialize quotas before so that eventual writes go in |
2068 | * separate transaction */ | 2068 | * separate transaction */ |
2069 | vfs_dq_init(dir); | 2069 | dquot_initialize(dir); |
2070 | vfs_dq_init(dentry->d_inode); | 2070 | dquot_initialize(dentry->d_inode); |
2071 | 2071 | ||
2072 | handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb)); | 2072 | handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb)); |
2073 | if (IS_ERR(handle)) | 2073 | if (IS_ERR(handle)) |
@@ -2127,8 +2127,8 @@ static int ext3_unlink(struct inode * dir, struct dentry *dentry) | |||
2127 | 2127 | ||
2128 | /* Initialize quotas before so that eventual writes go | 2128 | /* Initialize quotas before so that eventual writes go |
2129 | * in separate transaction */ | 2129 | * in separate transaction */ |
2130 | vfs_dq_init(dir); | 2130 | dquot_initialize(dir); |
2131 | vfs_dq_init(dentry->d_inode); | 2131 | dquot_initialize(dentry->d_inode); |
2132 | 2132 | ||
2133 | handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb)); | 2133 | handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb)); |
2134 | if (IS_ERR(handle)) | 2134 | if (IS_ERR(handle)) |
@@ -2184,7 +2184,7 @@ static int ext3_symlink (struct inode * dir, | |||
2184 | if (l > dir->i_sb->s_blocksize) | 2184 | if (l > dir->i_sb->s_blocksize) |
2185 | return -ENAMETOOLONG; | 2185 | return -ENAMETOOLONG; |
2186 | 2186 | ||
2187 | vfs_dq_init(dir); | 2187 | dquot_initialize(dir); |
2188 | 2188 | ||
2189 | retry: | 2189 | retry: |
2190 | handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + | 2190 | handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) + |
@@ -2241,7 +2241,7 @@ static int ext3_link (struct dentry * old_dentry, | |||
2241 | if (inode->i_nlink >= EXT3_LINK_MAX) | 2241 | if (inode->i_nlink >= EXT3_LINK_MAX) |
2242 | return -EMLINK; | 2242 | return -EMLINK; |
2243 | 2243 | ||
2244 | vfs_dq_init(dir); | 2244 | dquot_initialize(dir); |
2245 | 2245 | ||
2246 | /* | 2246 | /* |
2247 | * Return -ENOENT if we've raced with unlink and i_nlink is 0. Doing | 2247 | * Return -ENOENT if we've raced with unlink and i_nlink is 0. Doing |
@@ -2293,15 +2293,15 @@ static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry, | |||
2293 | struct ext3_dir_entry_2 * old_de, * new_de; | 2293 | struct ext3_dir_entry_2 * old_de, * new_de; |
2294 | int retval, flush_file = 0; | 2294 | int retval, flush_file = 0; |
2295 | 2295 | ||
2296 | vfs_dq_init(old_dir); | 2296 | dquot_initialize(old_dir); |
2297 | vfs_dq_init(new_dir); | 2297 | dquot_initialize(new_dir); |
2298 | 2298 | ||
2299 | old_bh = new_bh = dir_bh = NULL; | 2299 | old_bh = new_bh = dir_bh = NULL; |
2300 | 2300 | ||
2301 | /* Initialize quotas before so that eventual writes go | 2301 | /* Initialize quotas before so that eventual writes go |
2302 | * in separate transaction */ | 2302 | * in separate transaction */ |
2303 | if (new_dentry->d_inode) | 2303 | if (new_dentry->d_inode) |
2304 | vfs_dq_init(new_dentry->d_inode); | 2304 | dquot_initialize(new_dentry->d_inode); |
2305 | handle = ext3_journal_start(old_dir, 2 * | 2305 | handle = ext3_journal_start(old_dir, 2 * |
2306 | EXT3_DATA_TRANS_BLOCKS(old_dir->i_sb) + | 2306 | EXT3_DATA_TRANS_BLOCKS(old_dir->i_sb) + |
2307 | EXT3_INDEX_EXTRA_TRANS_BLOCKS + 2); | 2307 | EXT3_INDEX_EXTRA_TRANS_BLOCKS + 2); |
diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 0163d0dae124..e844accbf55d 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c | |||
@@ -752,7 +752,6 @@ static ssize_t ext3_quota_write(struct super_block *sb, int type, | |||
752 | const char *data, size_t len, loff_t off); | 752 | const char *data, size_t len, loff_t off); |
753 | 753 | ||
754 | static const struct dquot_operations ext3_quota_operations = { | 754 | static const struct dquot_operations ext3_quota_operations = { |
755 | .initialize = dquot_initialize, | ||
756 | .write_dquot = ext3_write_dquot, | 755 | .write_dquot = ext3_write_dquot, |
757 | .acquire_dquot = ext3_acquire_dquot, | 756 | .acquire_dquot = ext3_acquire_dquot, |
758 | .release_dquot = ext3_release_dquot, | 757 | .release_dquot = ext3_release_dquot, |
@@ -1480,7 +1479,7 @@ static void ext3_orphan_cleanup (struct super_block * sb, | |||
1480 | } | 1479 | } |
1481 | 1480 | ||
1482 | list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan); | 1481 | list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan); |
1483 | vfs_dq_init(inode); | 1482 | dquot_initialize(inode); |
1484 | if (inode->i_nlink) { | 1483 | if (inode->i_nlink) { |
1485 | printk(KERN_DEBUG | 1484 | printk(KERN_DEBUG |
1486 | "%s: truncating inode %lu to %Ld bytes\n", | 1485 | "%s: truncating inode %lu to %Ld bytes\n", |
@@ -2736,7 +2735,7 @@ static int ext3_statfs (struct dentry * dentry, struct kstatfs * buf) | |||
2736 | * Process 1 Process 2 | 2735 | * Process 1 Process 2 |
2737 | * ext3_create() quota_sync() | 2736 | * ext3_create() quota_sync() |
2738 | * journal_start() write_dquot() | 2737 | * journal_start() write_dquot() |
2739 | * vfs_dq_init() down(dqio_mutex) | 2738 | * dquot_initialize() down(dqio_mutex) |
2740 | * down(dqio_mutex) journal_start() | 2739 | * down(dqio_mutex) journal_start() |
2741 | * | 2740 | * |
2742 | */ | 2741 | */ |
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 85fa464a24ad..a08a12998c49 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/jbd2.h> | 23 | #include <linux/jbd2.h> |
24 | #include <linux/mount.h> | 24 | #include <linux/mount.h> |
25 | #include <linux/path.h> | 25 | #include <linux/path.h> |
26 | #include <linux/quotaops.h> | ||
26 | #include "ext4.h" | 27 | #include "ext4.h" |
27 | #include "ext4_jbd2.h" | 28 | #include "ext4_jbd2.h" |
28 | #include "xattr.h" | 29 | #include "xattr.h" |
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index ca8986e4b528..9bb2bb9f67ad 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c | |||
@@ -217,7 +217,7 @@ void ext4_free_inode(handle_t *handle, struct inode *inode) | |||
217 | * Note: we must free any quota before locking the superblock, | 217 | * Note: we must free any quota before locking the superblock, |
218 | * as writing the quota to disk may need the lock as well. | 218 | * as writing the quota to disk may need the lock as well. |
219 | */ | 219 | */ |
220 | vfs_dq_init(inode); | 220 | dquot_initialize(inode); |
221 | ext4_xattr_delete_inode(handle, inode); | 221 | ext4_xattr_delete_inode(handle, inode); |
222 | dquot_free_inode(inode); | 222 | dquot_free_inode(inode); |
223 | dquot_drop(inode); | 223 | dquot_drop(inode); |
@@ -1034,7 +1034,7 @@ got: | |||
1034 | ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize; | 1034 | ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize; |
1035 | 1035 | ||
1036 | ret = inode; | 1036 | ret = inode; |
1037 | vfs_dq_init(inode); | 1037 | dquot_initialize(inode); |
1038 | err = dquot_alloc_inode(inode); | 1038 | err = dquot_alloc_inode(inode); |
1039 | if (err) | 1039 | if (err) |
1040 | goto fail_drop; | 1040 | goto fail_drop; |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index eaa22ae9f1f6..bec222ca9ba4 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -171,7 +171,7 @@ void ext4_delete_inode(struct inode *inode) | |||
171 | int err; | 171 | int err; |
172 | 172 | ||
173 | if (!is_bad_inode(inode)) | 173 | if (!is_bad_inode(inode)) |
174 | vfs_dq_init(inode); | 174 | dquot_initialize(inode); |
175 | 175 | ||
176 | if (ext4_should_order_data(inode)) | 176 | if (ext4_should_order_data(inode)) |
177 | ext4_begin_ordered_truncate(inode, 0); | 177 | ext4_begin_ordered_truncate(inode, 0); |
@@ -5255,7 +5255,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr) | |||
5255 | return error; | 5255 | return error; |
5256 | 5256 | ||
5257 | if (ia_valid & ATTR_SIZE) | 5257 | if (ia_valid & ATTR_SIZE) |
5258 | vfs_dq_init(inode); | 5258 | dquot_initialize(inode); |
5259 | if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) || | 5259 | if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) || |
5260 | (ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) { | 5260 | (ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) { |
5261 | handle_t *handle; | 5261 | handle_t *handle; |
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 20f55c2e7571..7f3d2d75a0dc 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -1766,7 +1766,7 @@ static int ext4_create(struct inode *dir, struct dentry *dentry, int mode, | |||
1766 | struct inode *inode; | 1766 | struct inode *inode; |
1767 | int err, retries = 0; | 1767 | int err, retries = 0; |
1768 | 1768 | ||
1769 | vfs_dq_init(dir); | 1769 | dquot_initialize(dir); |
1770 | 1770 | ||
1771 | retry: | 1771 | retry: |
1772 | handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + | 1772 | handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + |
@@ -1802,7 +1802,7 @@ static int ext4_mknod(struct inode *dir, struct dentry *dentry, | |||
1802 | if (!new_valid_dev(rdev)) | 1802 | if (!new_valid_dev(rdev)) |
1803 | return -EINVAL; | 1803 | return -EINVAL; |
1804 | 1804 | ||
1805 | vfs_dq_init(dir); | 1805 | dquot_initialize(dir); |
1806 | 1806 | ||
1807 | retry: | 1807 | retry: |
1808 | handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + | 1808 | handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + |
@@ -1841,7 +1841,7 @@ static int ext4_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
1841 | if (EXT4_DIR_LINK_MAX(dir)) | 1841 | if (EXT4_DIR_LINK_MAX(dir)) |
1842 | return -EMLINK; | 1842 | return -EMLINK; |
1843 | 1843 | ||
1844 | vfs_dq_init(dir); | 1844 | dquot_initialize(dir); |
1845 | 1845 | ||
1846 | retry: | 1846 | retry: |
1847 | handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + | 1847 | handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + |
@@ -2142,8 +2142,8 @@ static int ext4_rmdir(struct inode *dir, struct dentry *dentry) | |||
2142 | 2142 | ||
2143 | /* Initialize quotas before so that eventual writes go in | 2143 | /* Initialize quotas before so that eventual writes go in |
2144 | * separate transaction */ | 2144 | * separate transaction */ |
2145 | vfs_dq_init(dir); | 2145 | dquot_initialize(dir); |
2146 | vfs_dq_init(dentry->d_inode); | 2146 | dquot_initialize(dentry->d_inode); |
2147 | 2147 | ||
2148 | handle = ext4_journal_start(dir, EXT4_DELETE_TRANS_BLOCKS(dir->i_sb)); | 2148 | handle = ext4_journal_start(dir, EXT4_DELETE_TRANS_BLOCKS(dir->i_sb)); |
2149 | if (IS_ERR(handle)) | 2149 | if (IS_ERR(handle)) |
@@ -2203,8 +2203,8 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry) | |||
2203 | 2203 | ||
2204 | /* Initialize quotas before so that eventual writes go | 2204 | /* Initialize quotas before so that eventual writes go |
2205 | * in separate transaction */ | 2205 | * in separate transaction */ |
2206 | vfs_dq_init(dir); | 2206 | dquot_initialize(dir); |
2207 | vfs_dq_init(dentry->d_inode); | 2207 | dquot_initialize(dentry->d_inode); |
2208 | 2208 | ||
2209 | handle = ext4_journal_start(dir, EXT4_DELETE_TRANS_BLOCKS(dir->i_sb)); | 2209 | handle = ext4_journal_start(dir, EXT4_DELETE_TRANS_BLOCKS(dir->i_sb)); |
2210 | if (IS_ERR(handle)) | 2210 | if (IS_ERR(handle)) |
@@ -2260,7 +2260,7 @@ static int ext4_symlink(struct inode *dir, | |||
2260 | if (l > dir->i_sb->s_blocksize) | 2260 | if (l > dir->i_sb->s_blocksize) |
2261 | return -ENAMETOOLONG; | 2261 | return -ENAMETOOLONG; |
2262 | 2262 | ||
2263 | vfs_dq_init(dir); | 2263 | dquot_initialize(dir); |
2264 | 2264 | ||
2265 | retry: | 2265 | retry: |
2266 | handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + | 2266 | handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) + |
@@ -2320,7 +2320,7 @@ static int ext4_link(struct dentry *old_dentry, | |||
2320 | if (inode->i_nlink >= EXT4_LINK_MAX) | 2320 | if (inode->i_nlink >= EXT4_LINK_MAX) |
2321 | return -EMLINK; | 2321 | return -EMLINK; |
2322 | 2322 | ||
2323 | vfs_dq_init(dir); | 2323 | dquot_initialize(dir); |
2324 | 2324 | ||
2325 | /* | 2325 | /* |
2326 | * Return -ENOENT if we've raced with unlink and i_nlink is 0. Doing | 2326 | * Return -ENOENT if we've raced with unlink and i_nlink is 0. Doing |
@@ -2372,15 +2372,15 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
2372 | struct ext4_dir_entry_2 *old_de, *new_de; | 2372 | struct ext4_dir_entry_2 *old_de, *new_de; |
2373 | int retval, force_da_alloc = 0; | 2373 | int retval, force_da_alloc = 0; |
2374 | 2374 | ||
2375 | vfs_dq_init(old_dir); | 2375 | dquot_initialize(old_dir); |
2376 | vfs_dq_init(new_dir); | 2376 | dquot_initialize(new_dir); |
2377 | 2377 | ||
2378 | old_bh = new_bh = dir_bh = NULL; | 2378 | old_bh = new_bh = dir_bh = NULL; |
2379 | 2379 | ||
2380 | /* Initialize quotas before so that eventual writes go | 2380 | /* Initialize quotas before so that eventual writes go |
2381 | * in separate transaction */ | 2381 | * in separate transaction */ |
2382 | if (new_dentry->d_inode) | 2382 | if (new_dentry->d_inode) |
2383 | vfs_dq_init(new_dentry->d_inode); | 2383 | dquot_initialize(new_dentry->d_inode); |
2384 | handle = ext4_journal_start(old_dir, 2 * | 2384 | handle = ext4_journal_start(old_dir, 2 * |
2385 | EXT4_DATA_TRANS_BLOCKS(old_dir->i_sb) + | 2385 | EXT4_DATA_TRANS_BLOCKS(old_dir->i_sb) + |
2386 | EXT4_INDEX_EXTRA_TRANS_BLOCKS + 2); | 2386 | EXT4_INDEX_EXTRA_TRANS_BLOCKS + 2); |
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 035516c80df2..edcf3b0239d1 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
@@ -1013,7 +1013,6 @@ static ssize_t ext4_quota_write(struct super_block *sb, int type, | |||
1013 | const char *data, size_t len, loff_t off); | 1013 | const char *data, size_t len, loff_t off); |
1014 | 1014 | ||
1015 | static const struct dquot_operations ext4_quota_operations = { | 1015 | static const struct dquot_operations ext4_quota_operations = { |
1016 | .initialize = dquot_initialize, | ||
1017 | #ifdef CONFIG_QUOTA | 1016 | #ifdef CONFIG_QUOTA |
1018 | .get_reserved_space = ext4_get_reserved_space, | 1017 | .get_reserved_space = ext4_get_reserved_space, |
1019 | #endif | 1018 | #endif |
@@ -1931,7 +1930,7 @@ static void ext4_orphan_cleanup(struct super_block *sb, | |||
1931 | } | 1930 | } |
1932 | 1931 | ||
1933 | list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan); | 1932 | list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan); |
1934 | vfs_dq_init(inode); | 1933 | dquot_initialize(inode); |
1935 | if (inode->i_nlink) { | 1934 | if (inode->i_nlink) { |
1936 | ext4_msg(sb, KERN_DEBUG, | 1935 | ext4_msg(sb, KERN_DEBUG, |
1937 | "%s: truncating inode %lu to %lld bytes", | 1936 | "%s: truncating inode %lu to %lld bytes", |
@@ -3700,7 +3699,7 @@ static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf) | |||
3700 | * Process 1 Process 2 | 3699 | * Process 1 Process 2 |
3701 | * ext4_create() quota_sync() | 3700 | * ext4_create() quota_sync() |
3702 | * jbd2_journal_start() write_dquot() | 3701 | * jbd2_journal_start() write_dquot() |
3703 | * vfs_dq_init() down(dqio_mutex) | 3702 | * dquot_initialize() down(dqio_mutex) |
3704 | * down(dqio_mutex) jbd2_journal_start() | 3703 | * down(dqio_mutex) jbd2_journal_start() |
3705 | * | 3704 | * |
3706 | */ | 3705 | */ |
diff --git a/fs/jfs/file.c b/fs/jfs/file.c index f19bb33eb1eb..14ba982b3f24 100644 --- a/fs/jfs/file.c +++ b/fs/jfs/file.c | |||
@@ -99,7 +99,7 @@ int jfs_setattr(struct dentry *dentry, struct iattr *iattr) | |||
99 | return rc; | 99 | return rc; |
100 | 100 | ||
101 | if (iattr->ia_valid & ATTR_SIZE) | 101 | if (iattr->ia_valid & ATTR_SIZE) |
102 | vfs_dq_init(inode); | 102 | dquot_initialize(inode); |
103 | if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || | 103 | if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || |
104 | (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { | 104 | (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { |
105 | rc = dquot_transfer(inode, iattr); | 105 | rc = dquot_transfer(inode, iattr); |
diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c index 1aa2dda16590..c694a5f15380 100644 --- a/fs/jfs/inode.c +++ b/fs/jfs/inode.c | |||
@@ -147,7 +147,7 @@ void jfs_delete_inode(struct inode *inode) | |||
147 | jfs_info("In jfs_delete_inode, inode = 0x%p", inode); | 147 | jfs_info("In jfs_delete_inode, inode = 0x%p", inode); |
148 | 148 | ||
149 | if (!is_bad_inode(inode)) | 149 | if (!is_bad_inode(inode)) |
150 | vfs_dq_init(inode); | 150 | dquot_initialize(inode); |
151 | 151 | ||
152 | if (!is_bad_inode(inode) && | 152 | if (!is_bad_inode(inode) && |
153 | (JFS_IP(inode)->fileset == FILESYSTEM_I)) { | 153 | (JFS_IP(inode)->fileset == FILESYSTEM_I)) { |
@@ -161,7 +161,7 @@ void jfs_delete_inode(struct inode *inode) | |||
161 | /* | 161 | /* |
162 | * Free the inode from the quota allocation. | 162 | * Free the inode from the quota allocation. |
163 | */ | 163 | */ |
164 | vfs_dq_init(inode); | 164 | dquot_initialize(inode); |
165 | dquot_free_inode(inode); | 165 | dquot_free_inode(inode); |
166 | dquot_drop(inode); | 166 | dquot_drop(inode); |
167 | } | 167 | } |
diff --git a/fs/jfs/jfs_inode.c b/fs/jfs/jfs_inode.c index 72b30895422c..829921b67765 100644 --- a/fs/jfs/jfs_inode.c +++ b/fs/jfs/jfs_inode.c | |||
@@ -116,7 +116,7 @@ struct inode *ialloc(struct inode *parent, umode_t mode) | |||
116 | /* | 116 | /* |
117 | * Allocate inode to quota. | 117 | * Allocate inode to quota. |
118 | */ | 118 | */ |
119 | vfs_dq_init(inode); | 119 | dquot_initialize(inode); |
120 | rc = dquot_alloc_inode(inode); | 120 | rc = dquot_alloc_inode(inode); |
121 | if (rc) | 121 | if (rc) |
122 | goto fail_drop; | 122 | goto fail_drop; |
diff --git a/fs/jfs/namei.c b/fs/jfs/namei.c index b7cc29da50b4..4a3e9f39c21d 100644 --- a/fs/jfs/namei.c +++ b/fs/jfs/namei.c | |||
@@ -85,7 +85,7 @@ static int jfs_create(struct inode *dip, struct dentry *dentry, int mode, | |||
85 | 85 | ||
86 | jfs_info("jfs_create: dip:0x%p name:%s", dip, dentry->d_name.name); | 86 | jfs_info("jfs_create: dip:0x%p name:%s", dip, dentry->d_name.name); |
87 | 87 | ||
88 | vfs_dq_init(dip); | 88 | dquot_initialize(dip); |
89 | 89 | ||
90 | /* | 90 | /* |
91 | * search parent directory for entry/freespace | 91 | * search parent directory for entry/freespace |
@@ -217,7 +217,7 @@ static int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode) | |||
217 | 217 | ||
218 | jfs_info("jfs_mkdir: dip:0x%p name:%s", dip, dentry->d_name.name); | 218 | jfs_info("jfs_mkdir: dip:0x%p name:%s", dip, dentry->d_name.name); |
219 | 219 | ||
220 | vfs_dq_init(dip); | 220 | dquot_initialize(dip); |
221 | 221 | ||
222 | /* link count overflow on parent directory ? */ | 222 | /* link count overflow on parent directory ? */ |
223 | if (dip->i_nlink == JFS_LINK_MAX) { | 223 | if (dip->i_nlink == JFS_LINK_MAX) { |
@@ -360,8 +360,8 @@ static int jfs_rmdir(struct inode *dip, struct dentry *dentry) | |||
360 | jfs_info("jfs_rmdir: dip:0x%p name:%s", dip, dentry->d_name.name); | 360 | jfs_info("jfs_rmdir: dip:0x%p name:%s", dip, dentry->d_name.name); |
361 | 361 | ||
362 | /* Init inode for quota operations. */ | 362 | /* Init inode for quota operations. */ |
363 | vfs_dq_init(dip); | 363 | dquot_initialize(dip); |
364 | vfs_dq_init(ip); | 364 | dquot_initialize(ip); |
365 | 365 | ||
366 | /* directory must be empty to be removed */ | 366 | /* directory must be empty to be removed */ |
367 | if (!dtEmpty(ip)) { | 367 | if (!dtEmpty(ip)) { |
@@ -488,8 +488,8 @@ static int jfs_unlink(struct inode *dip, struct dentry *dentry) | |||
488 | jfs_info("jfs_unlink: dip:0x%p name:%s", dip, dentry->d_name.name); | 488 | jfs_info("jfs_unlink: dip:0x%p name:%s", dip, dentry->d_name.name); |
489 | 489 | ||
490 | /* Init inode for quota operations. */ | 490 | /* Init inode for quota operations. */ |
491 | vfs_dq_init(dip); | 491 | dquot_initialize(dip); |
492 | vfs_dq_init(ip); | 492 | dquot_initialize(ip); |
493 | 493 | ||
494 | if ((rc = get_UCSname(&dname, dentry))) | 494 | if ((rc = get_UCSname(&dname, dentry))) |
495 | goto out; | 495 | goto out; |
@@ -811,7 +811,7 @@ static int jfs_link(struct dentry *old_dentry, | |||
811 | if (ip->i_nlink == 0) | 811 | if (ip->i_nlink == 0) |
812 | return -ENOENT; | 812 | return -ENOENT; |
813 | 813 | ||
814 | vfs_dq_init(dir); | 814 | dquot_initialize(dir); |
815 | 815 | ||
816 | tid = txBegin(ip->i_sb, 0); | 816 | tid = txBegin(ip->i_sb, 0); |
817 | 817 | ||
@@ -904,7 +904,7 @@ static int jfs_symlink(struct inode *dip, struct dentry *dentry, | |||
904 | 904 | ||
905 | jfs_info("jfs_symlink: dip:0x%p name:%s", dip, name); | 905 | jfs_info("jfs_symlink: dip:0x%p name:%s", dip, name); |
906 | 906 | ||
907 | vfs_dq_init(dip); | 907 | dquot_initialize(dip); |
908 | 908 | ||
909 | ssize = strlen(name) + 1; | 909 | ssize = strlen(name) + 1; |
910 | 910 | ||
@@ -1097,8 +1097,8 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1097 | jfs_info("jfs_rename: %s %s", old_dentry->d_name.name, | 1097 | jfs_info("jfs_rename: %s %s", old_dentry->d_name.name, |
1098 | new_dentry->d_name.name); | 1098 | new_dentry->d_name.name); |
1099 | 1099 | ||
1100 | vfs_dq_init(old_dir); | 1100 | dquot_initialize(old_dir); |
1101 | vfs_dq_init(new_dir); | 1101 | dquot_initialize(new_dir); |
1102 | 1102 | ||
1103 | old_ip = old_dentry->d_inode; | 1103 | old_ip = old_dentry->d_inode; |
1104 | new_ip = new_dentry->d_inode; | 1104 | new_ip = new_dentry->d_inode; |
@@ -1149,7 +1149,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1149 | } else if (new_ip) { | 1149 | } else if (new_ip) { |
1150 | IWRITE_LOCK(new_ip, RDWRLOCK_NORMAL); | 1150 | IWRITE_LOCK(new_ip, RDWRLOCK_NORMAL); |
1151 | /* Init inode for quota operations. */ | 1151 | /* Init inode for quota operations. */ |
1152 | vfs_dq_init(new_ip); | 1152 | dquot_initialize(new_ip); |
1153 | } | 1153 | } |
1154 | 1154 | ||
1155 | /* | 1155 | /* |
@@ -1373,7 +1373,7 @@ static int jfs_mknod(struct inode *dir, struct dentry *dentry, | |||
1373 | 1373 | ||
1374 | jfs_info("jfs_mknod: %s", dentry->d_name.name); | 1374 | jfs_info("jfs_mknod: %s", dentry->d_name.name); |
1375 | 1375 | ||
1376 | vfs_dq_init(dir); | 1376 | dquot_initialize(dir); |
1377 | 1377 | ||
1378 | if ((rc = get_UCSname(&dname, dentry))) | 1378 | if ((rc = get_UCSname(&dname, dentry))) |
1379 | goto out; | 1379 | goto out; |
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 126198f5a67c..364105291282 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c | |||
@@ -108,7 +108,7 @@ static int ocfs2_file_open(struct inode *inode, struct file *file) | |||
108 | file->f_path.dentry->d_name.len, file->f_path.dentry->d_name.name); | 108 | file->f_path.dentry->d_name.len, file->f_path.dentry->d_name.name); |
109 | 109 | ||
110 | if (file->f_mode & FMODE_WRITE) | 110 | if (file->f_mode & FMODE_WRITE) |
111 | vfs_dq_init(inode); | 111 | dquot_initialize(inode); |
112 | 112 | ||
113 | spin_lock(&oi->ip_lock); | 113 | spin_lock(&oi->ip_lock); |
114 | 114 | ||
@@ -980,7 +980,7 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr) | |||
980 | 980 | ||
981 | size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE; | 981 | size_change = S_ISREG(inode->i_mode) && attr->ia_valid & ATTR_SIZE; |
982 | if (size_change) { | 982 | if (size_change) { |
983 | vfs_dq_init(inode); | 983 | dquot_initialize(inode); |
984 | 984 | ||
985 | status = ocfs2_rw_lock(inode, 1); | 985 | status = ocfs2_rw_lock(inode, 1); |
986 | if (status < 0) { | 986 | if (status < 0) { |
diff --git a/fs/ocfs2/inode.c b/fs/ocfs2/inode.c index 77681a690d16..278a223aae14 100644 --- a/fs/ocfs2/inode.c +++ b/fs/ocfs2/inode.c | |||
@@ -971,7 +971,7 @@ void ocfs2_delete_inode(struct inode *inode) | |||
971 | goto bail; | 971 | goto bail; |
972 | } | 972 | } |
973 | 973 | ||
974 | vfs_dq_init(inode); | 974 | dquot_initialize(inode); |
975 | 975 | ||
976 | if (!ocfs2_inode_is_valid_to_delete(inode)) { | 976 | if (!ocfs2_inode_is_valid_to_delete(inode)) { |
977 | /* It's probably not necessary to truncate_inode_pages | 977 | /* It's probably not necessary to truncate_inode_pages |
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index 8b5b142eb638..d9cd4e373a53 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c | |||
@@ -212,7 +212,7 @@ static struct inode *ocfs2_get_init_inode(struct inode *dir, int mode) | |||
212 | } else | 212 | } else |
213 | inode->i_gid = current_fsgid(); | 213 | inode->i_gid = current_fsgid(); |
214 | inode->i_mode = mode; | 214 | inode->i_mode = mode; |
215 | vfs_dq_init(inode); | 215 | dquot_initialize(inode); |
216 | return inode; | 216 | return inode; |
217 | } | 217 | } |
218 | 218 | ||
@@ -244,7 +244,7 @@ static int ocfs2_mknod(struct inode *dir, | |||
244 | (unsigned long)dev, dentry->d_name.len, | 244 | (unsigned long)dev, dentry->d_name.len, |
245 | dentry->d_name.name); | 245 | dentry->d_name.name); |
246 | 246 | ||
247 | vfs_dq_init(dir); | 247 | dquot_initialize(dir); |
248 | 248 | ||
249 | /* get our super block */ | 249 | /* get our super block */ |
250 | osb = OCFS2_SB(dir->i_sb); | 250 | osb = OCFS2_SB(dir->i_sb); |
@@ -634,7 +634,7 @@ static int ocfs2_link(struct dentry *old_dentry, | |||
634 | if (S_ISDIR(inode->i_mode)) | 634 | if (S_ISDIR(inode->i_mode)) |
635 | return -EPERM; | 635 | return -EPERM; |
636 | 636 | ||
637 | vfs_dq_init(dir); | 637 | dquot_initialize(dir); |
638 | 638 | ||
639 | err = ocfs2_inode_lock_nested(dir, &parent_fe_bh, 1, OI_LS_PARENT); | 639 | err = ocfs2_inode_lock_nested(dir, &parent_fe_bh, 1, OI_LS_PARENT); |
640 | if (err < 0) { | 640 | if (err < 0) { |
@@ -791,7 +791,7 @@ static int ocfs2_unlink(struct inode *dir, | |||
791 | mlog_entry("(0x%p, 0x%p, '%.*s')\n", dir, dentry, | 791 | mlog_entry("(0x%p, 0x%p, '%.*s')\n", dir, dentry, |
792 | dentry->d_name.len, dentry->d_name.name); | 792 | dentry->d_name.len, dentry->d_name.name); |
793 | 793 | ||
794 | vfs_dq_init(dir); | 794 | dquot_initialize(dir); |
795 | 795 | ||
796 | BUG_ON(dentry->d_parent->d_inode != dir); | 796 | BUG_ON(dentry->d_parent->d_inode != dir); |
797 | 797 | ||
@@ -1053,8 +1053,8 @@ static int ocfs2_rename(struct inode *old_dir, | |||
1053 | old_dentry->d_name.len, old_dentry->d_name.name, | 1053 | old_dentry->d_name.len, old_dentry->d_name.name, |
1054 | new_dentry->d_name.len, new_dentry->d_name.name); | 1054 | new_dentry->d_name.len, new_dentry->d_name.name); |
1055 | 1055 | ||
1056 | vfs_dq_init(old_dir); | 1056 | dquot_initialize(old_dir); |
1057 | vfs_dq_init(new_dir); | 1057 | dquot_initialize(new_dir); |
1058 | 1058 | ||
1059 | osb = OCFS2_SB(old_dir->i_sb); | 1059 | osb = OCFS2_SB(old_dir->i_sb); |
1060 | 1060 | ||
@@ -1604,7 +1604,7 @@ static int ocfs2_symlink(struct inode *dir, | |||
1604 | mlog_entry("(0x%p, 0x%p, symname='%s' actual='%.*s')\n", dir, | 1604 | mlog_entry("(0x%p, 0x%p, symname='%s' actual='%.*s')\n", dir, |
1605 | dentry, symname, dentry->d_name.len, dentry->d_name.name); | 1605 | dentry, symname, dentry->d_name.len, dentry->d_name.name); |
1606 | 1606 | ||
1607 | vfs_dq_init(dir); | 1607 | dquot_initialize(dir); |
1608 | 1608 | ||
1609 | sb = dir->i_sb; | 1609 | sb = dir->i_sb; |
1610 | osb = OCFS2_SB(sb); | 1610 | osb = OCFS2_SB(sb); |
diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c index 4dca38f487cf..355f41d1d520 100644 --- a/fs/ocfs2/quota_global.c +++ b/fs/ocfs2/quota_global.c | |||
@@ -851,7 +851,6 @@ static void ocfs2_destroy_dquot(struct dquot *dquot) | |||
851 | } | 851 | } |
852 | 852 | ||
853 | const struct dquot_operations ocfs2_quota_operations = { | 853 | const struct dquot_operations ocfs2_quota_operations = { |
854 | .initialize = dquot_initialize, | ||
855 | .write_dquot = ocfs2_write_dquot, | 854 | .write_dquot = ocfs2_write_dquot, |
856 | .acquire_dquot = ocfs2_acquire_dquot, | 855 | .acquire_dquot = ocfs2_acquire_dquot, |
857 | .release_dquot = ocfs2_release_dquot, | 856 | .release_dquot = ocfs2_release_dquot, |
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c index 8ae65c9c020c..f3ae10cde841 100644 --- a/fs/ocfs2/refcounttree.c +++ b/fs/ocfs2/refcounttree.c | |||
@@ -4390,7 +4390,7 @@ static int ocfs2_vfs_reflink(struct dentry *old_dentry, struct inode *dir, | |||
4390 | } | 4390 | } |
4391 | 4391 | ||
4392 | mutex_lock(&inode->i_mutex); | 4392 | mutex_lock(&inode->i_mutex); |
4393 | vfs_dq_init(dir); | 4393 | dquot_initialize(dir); |
4394 | error = ocfs2_reflink(old_dentry, dir, new_dentry, preserve); | 4394 | error = ocfs2_reflink(old_dentry, dir, new_dentry, preserve); |
4395 | mutex_unlock(&inode->i_mutex); | 4395 | mutex_unlock(&inode->i_mutex); |
4396 | if (!error) | 4396 | if (!error) |
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 6244bca45c9d..3c0a7e0dff78 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c | |||
@@ -230,6 +230,7 @@ struct dqstats dqstats; | |||
230 | EXPORT_SYMBOL(dqstats); | 230 | EXPORT_SYMBOL(dqstats); |
231 | 231 | ||
232 | static qsize_t inode_get_rsv_space(struct inode *inode); | 232 | static qsize_t inode_get_rsv_space(struct inode *inode); |
233 | static void __dquot_initialize(struct inode *inode, int type); | ||
233 | 234 | ||
234 | static inline unsigned int | 235 | static inline unsigned int |
235 | hashfn(const struct super_block *sb, unsigned int id, int type) | 236 | hashfn(const struct super_block *sb, unsigned int id, int type) |
@@ -890,7 +891,7 @@ static void add_dquot_ref(struct super_block *sb, int type) | |||
890 | spin_unlock(&inode_lock); | 891 | spin_unlock(&inode_lock); |
891 | 892 | ||
892 | iput(old_inode); | 893 | iput(old_inode); |
893 | sb->dq_op->initialize(inode, type); | 894 | __dquot_initialize(inode, type); |
894 | /* We hold a reference to 'inode' so it couldn't have been | 895 | /* We hold a reference to 'inode' so it couldn't have been |
895 | * removed from s_inodes list while we dropped the inode_lock. | 896 | * removed from s_inodes list while we dropped the inode_lock. |
896 | * We cannot iput the inode now as we can be holding the last | 897 | * We cannot iput the inode now as we can be holding the last |
@@ -1293,22 +1294,26 @@ static int info_bdq_free(struct dquot *dquot, qsize_t space) | |||
1293 | } | 1294 | } |
1294 | 1295 | ||
1295 | /* | 1296 | /* |
1296 | * Initialize quota pointers in inode | 1297 | * Initialize quota pointers in inode |
1297 | * We do things in a bit complicated way but by that we avoid calling | 1298 | * |
1298 | * dqget() and thus filesystem callbacks under dqptr_sem. | 1299 | * We do things in a bit complicated way but by that we avoid calling |
1300 | * dqget() and thus filesystem callbacks under dqptr_sem. | ||
1301 | * | ||
1302 | * It is better to call this function outside of any transaction as it | ||
1303 | * might need a lot of space in journal for dquot structure allocation. | ||
1299 | */ | 1304 | */ |
1300 | int dquot_initialize(struct inode *inode, int type) | 1305 | static void __dquot_initialize(struct inode *inode, int type) |
1301 | { | 1306 | { |
1302 | unsigned int id = 0; | 1307 | unsigned int id = 0; |
1303 | int cnt, ret = 0; | 1308 | int cnt; |
1304 | struct dquot *got[MAXQUOTAS]; | 1309 | struct dquot *got[MAXQUOTAS]; |
1305 | struct super_block *sb = inode->i_sb; | 1310 | struct super_block *sb = inode->i_sb; |
1306 | qsize_t rsv; | 1311 | qsize_t rsv; |
1307 | 1312 | ||
1308 | /* First test before acquiring mutex - solves deadlocks when we | 1313 | /* First test before acquiring mutex - solves deadlocks when we |
1309 | * re-enter the quota code and are already holding the mutex */ | 1314 | * re-enter the quota code and are already holding the mutex */ |
1310 | if (IS_NOQUOTA(inode)) | 1315 | if (!sb_any_quota_active(inode->i_sb) || IS_NOQUOTA(inode)) |
1311 | return 0; | 1316 | return; |
1312 | 1317 | ||
1313 | /* First get references to structures we might need. */ | 1318 | /* First get references to structures we might need. */ |
1314 | for (cnt = 0; cnt < MAXQUOTAS; cnt++) { | 1319 | for (cnt = 0; cnt < MAXQUOTAS; cnt++) { |
@@ -1351,7 +1356,11 @@ out_err: | |||
1351 | up_write(&sb_dqopt(sb)->dqptr_sem); | 1356 | up_write(&sb_dqopt(sb)->dqptr_sem); |
1352 | /* Drop unused references */ | 1357 | /* Drop unused references */ |
1353 | dqput_all(got); | 1358 | dqput_all(got); |
1354 | return ret; | 1359 | } |
1360 | |||
1361 | void dquot_initialize(struct inode *inode) | ||
1362 | { | ||
1363 | __dquot_initialize(inode, -1); | ||
1355 | } | 1364 | } |
1356 | EXPORT_SYMBOL(dquot_initialize); | 1365 | EXPORT_SYMBOL(dquot_initialize); |
1357 | 1366 | ||
@@ -1783,7 +1792,7 @@ int dquot_transfer(struct inode *inode, struct iattr *iattr) | |||
1783 | chid[GRPQUOTA] = iattr->ia_gid; | 1792 | chid[GRPQUOTA] = iattr->ia_gid; |
1784 | } | 1793 | } |
1785 | if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode)) { | 1794 | if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode)) { |
1786 | vfs_dq_init(inode); | 1795 | dquot_initialize(inode); |
1787 | if (__dquot_transfer(inode, chid, mask) == NO_QUOTA) | 1796 | if (__dquot_transfer(inode, chid, mask) == NO_QUOTA) |
1788 | return -EDQUOT; | 1797 | return -EDQUOT; |
1789 | } | 1798 | } |
@@ -1810,7 +1819,6 @@ EXPORT_SYMBOL(dquot_commit_info); | |||
1810 | * Definitions of diskquota operations. | 1819 | * Definitions of diskquota operations. |
1811 | */ | 1820 | */ |
1812 | const struct dquot_operations dquot_operations = { | 1821 | const struct dquot_operations dquot_operations = { |
1813 | .initialize = dquot_initialize, | ||
1814 | .write_dquot = dquot_commit, | 1822 | .write_dquot = dquot_commit, |
1815 | .acquire_dquot = dquot_acquire, | 1823 | .acquire_dquot = dquot_acquire, |
1816 | .release_dquot = dquot_release, | 1824 | .release_dquot = dquot_release, |
@@ -1829,7 +1837,7 @@ int dquot_file_open(struct inode *inode, struct file *file) | |||
1829 | 1837 | ||
1830 | error = generic_file_open(inode, file); | 1838 | error = generic_file_open(inode, file); |
1831 | if (!error && (file->f_mode & FMODE_WRITE)) | 1839 | if (!error && (file->f_mode & FMODE_WRITE)) |
1832 | vfs_dq_init(inode); | 1840 | dquot_initialize(inode); |
1833 | return error; | 1841 | return error; |
1834 | } | 1842 | } |
1835 | EXPORT_SYMBOL(dquot_file_open); | 1843 | EXPORT_SYMBOL(dquot_file_open); |
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index 06995cb48e39..b8671a54e8ed 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c | |||
@@ -35,7 +35,7 @@ void reiserfs_delete_inode(struct inode *inode) | |||
35 | int err; | 35 | int err; |
36 | 36 | ||
37 | if (!is_bad_inode(inode)) | 37 | if (!is_bad_inode(inode)) |
38 | vfs_dq_init(inode); | 38 | dquot_initialize(inode); |
39 | 39 | ||
40 | truncate_inode_pages(&inode->i_data, 0); | 40 | truncate_inode_pages(&inode->i_data, 0); |
41 | 41 | ||
@@ -1768,7 +1768,7 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th, | |||
1768 | 1768 | ||
1769 | BUG_ON(!th->t_trans_id); | 1769 | BUG_ON(!th->t_trans_id); |
1770 | 1770 | ||
1771 | vfs_dq_init(inode); | 1771 | dquot_initialize(inode); |
1772 | err = dquot_alloc_inode(inode); | 1772 | err = dquot_alloc_inode(inode); |
1773 | if (err) | 1773 | if (err) |
1774 | goto out_end_trans; | 1774 | goto out_end_trans; |
@@ -3076,7 +3076,7 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
3076 | 3076 | ||
3077 | depth = reiserfs_write_lock_once(inode->i_sb); | 3077 | depth = reiserfs_write_lock_once(inode->i_sb); |
3078 | if (attr->ia_valid & ATTR_SIZE) { | 3078 | if (attr->ia_valid & ATTR_SIZE) { |
3079 | vfs_dq_init(inode); | 3079 | dquot_initialize(inode); |
3080 | 3080 | ||
3081 | /* version 2 items will be caught by the s_maxbytes check | 3081 | /* version 2 items will be caught by the s_maxbytes check |
3082 | ** done for us in vmtruncate | 3082 | ** done for us in vmtruncate |
diff --git a/fs/reiserfs/namei.c b/fs/reiserfs/namei.c index c55e1b9fee5f..96e4cbbfaa18 100644 --- a/fs/reiserfs/namei.c +++ b/fs/reiserfs/namei.c | |||
@@ -554,7 +554,7 @@ static int drop_new_inode(struct inode *inode) | |||
554 | } | 554 | } |
555 | 555 | ||
556 | /* utility function that does setup for reiserfs_new_inode. | 556 | /* utility function that does setup for reiserfs_new_inode. |
557 | ** vfs_dq_init needs lots of credits so it's better to have it | 557 | ** dquot_initialize needs lots of credits so it's better to have it |
558 | ** outside of a transaction, so we had to pull some bits of | 558 | ** outside of a transaction, so we had to pull some bits of |
559 | ** reiserfs_new_inode out into this func. | 559 | ** reiserfs_new_inode out into this func. |
560 | */ | 560 | */ |
@@ -577,7 +577,7 @@ static int new_inode_init(struct inode *inode, struct inode *dir, int mode) | |||
577 | } else { | 577 | } else { |
578 | inode->i_gid = current_fsgid(); | 578 | inode->i_gid = current_fsgid(); |
579 | } | 579 | } |
580 | vfs_dq_init(inode); | 580 | dquot_initialize(inode); |
581 | return 0; | 581 | return 0; |
582 | } | 582 | } |
583 | 583 | ||
@@ -594,7 +594,7 @@ static int reiserfs_create(struct inode *dir, struct dentry *dentry, int mode, | |||
594 | struct reiserfs_transaction_handle th; | 594 | struct reiserfs_transaction_handle th; |
595 | struct reiserfs_security_handle security; | 595 | struct reiserfs_security_handle security; |
596 | 596 | ||
597 | vfs_dq_init(dir); | 597 | dquot_initialize(dir); |
598 | 598 | ||
599 | if (!(inode = new_inode(dir->i_sb))) { | 599 | if (!(inode = new_inode(dir->i_sb))) { |
600 | return -ENOMEM; | 600 | return -ENOMEM; |
@@ -668,7 +668,7 @@ static int reiserfs_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
668 | if (!new_valid_dev(rdev)) | 668 | if (!new_valid_dev(rdev)) |
669 | return -EINVAL; | 669 | return -EINVAL; |
670 | 670 | ||
671 | vfs_dq_init(dir); | 671 | dquot_initialize(dir); |
672 | 672 | ||
673 | if (!(inode = new_inode(dir->i_sb))) { | 673 | if (!(inode = new_inode(dir->i_sb))) { |
674 | return -ENOMEM; | 674 | return -ENOMEM; |
@@ -743,7 +743,7 @@ static int reiserfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
743 | 2 * (REISERFS_QUOTA_INIT_BLOCKS(dir->i_sb) + | 743 | 2 * (REISERFS_QUOTA_INIT_BLOCKS(dir->i_sb) + |
744 | REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb)); | 744 | REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb)); |
745 | 745 | ||
746 | vfs_dq_init(dir); | 746 | dquot_initialize(dir); |
747 | 747 | ||
748 | #ifdef DISPLACE_NEW_PACKING_LOCALITIES | 748 | #ifdef DISPLACE_NEW_PACKING_LOCALITIES |
749 | /* set flag that new packing locality created and new blocks for the content * of that directory are not displaced yet */ | 749 | /* set flag that new packing locality created and new blocks for the content * of that directory are not displaced yet */ |
@@ -848,7 +848,7 @@ static int reiserfs_rmdir(struct inode *dir, struct dentry *dentry) | |||
848 | JOURNAL_PER_BALANCE_CNT * 2 + 2 + | 848 | JOURNAL_PER_BALANCE_CNT * 2 + 2 + |
849 | 4 * REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb); | 849 | 4 * REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb); |
850 | 850 | ||
851 | vfs_dq_init(dir); | 851 | dquot_initialize(dir); |
852 | 852 | ||
853 | reiserfs_write_lock(dir->i_sb); | 853 | reiserfs_write_lock(dir->i_sb); |
854 | retval = journal_begin(&th, dir->i_sb, jbegin_count); | 854 | retval = journal_begin(&th, dir->i_sb, jbegin_count); |
@@ -931,7 +931,7 @@ static int reiserfs_unlink(struct inode *dir, struct dentry *dentry) | |||
931 | unsigned long savelink; | 931 | unsigned long savelink; |
932 | int depth; | 932 | int depth; |
933 | 933 | ||
934 | vfs_dq_init(dir); | 934 | dquot_initialize(dir); |
935 | 935 | ||
936 | inode = dentry->d_inode; | 936 | inode = dentry->d_inode; |
937 | 937 | ||
@@ -1034,7 +1034,7 @@ static int reiserfs_symlink(struct inode *parent_dir, | |||
1034 | 2 * (REISERFS_QUOTA_INIT_BLOCKS(parent_dir->i_sb) + | 1034 | 2 * (REISERFS_QUOTA_INIT_BLOCKS(parent_dir->i_sb) + |
1035 | REISERFS_QUOTA_TRANS_BLOCKS(parent_dir->i_sb)); | 1035 | REISERFS_QUOTA_TRANS_BLOCKS(parent_dir->i_sb)); |
1036 | 1036 | ||
1037 | vfs_dq_init(parent_dir); | 1037 | dquot_initialize(parent_dir); |
1038 | 1038 | ||
1039 | if (!(inode = new_inode(parent_dir->i_sb))) { | 1039 | if (!(inode = new_inode(parent_dir->i_sb))) { |
1040 | return -ENOMEM; | 1040 | return -ENOMEM; |
@@ -1123,7 +1123,7 @@ static int reiserfs_link(struct dentry *old_dentry, struct inode *dir, | |||
1123 | JOURNAL_PER_BALANCE_CNT * 3 + | 1123 | JOURNAL_PER_BALANCE_CNT * 3 + |
1124 | 2 * REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb); | 1124 | 2 * REISERFS_QUOTA_TRANS_BLOCKS(dir->i_sb); |
1125 | 1125 | ||
1126 | vfs_dq_init(dir); | 1126 | dquot_initialize(dir); |
1127 | 1127 | ||
1128 | reiserfs_write_lock(dir->i_sb); | 1128 | reiserfs_write_lock(dir->i_sb); |
1129 | if (inode->i_nlink >= REISERFS_LINK_MAX) { | 1129 | if (inode->i_nlink >= REISERFS_LINK_MAX) { |
@@ -1249,8 +1249,8 @@ static int reiserfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1249 | JOURNAL_PER_BALANCE_CNT * 3 + 5 + | 1249 | JOURNAL_PER_BALANCE_CNT * 3 + 5 + |
1250 | 4 * REISERFS_QUOTA_TRANS_BLOCKS(old_dir->i_sb); | 1250 | 4 * REISERFS_QUOTA_TRANS_BLOCKS(old_dir->i_sb); |
1251 | 1251 | ||
1252 | vfs_dq_init(old_dir); | 1252 | dquot_initialize(old_dir); |
1253 | vfs_dq_init(new_dir); | 1253 | dquot_initialize(new_dir); |
1254 | 1254 | ||
1255 | old_inode = old_dentry->d_inode; | 1255 | old_inode = old_dentry->d_inode; |
1256 | new_dentry_inode = new_dentry->d_inode; | 1256 | new_dentry_inode = new_dentry->d_inode; |
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index 34f7cd0cb02d..04bf5d791bda 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c | |||
@@ -246,7 +246,7 @@ static int finish_unfinished(struct super_block *s) | |||
246 | retval = remove_save_link_only(s, &save_link_key, 0); | 246 | retval = remove_save_link_only(s, &save_link_key, 0); |
247 | continue; | 247 | continue; |
248 | } | 248 | } |
249 | vfs_dq_init(inode); | 249 | dquot_initialize(inode); |
250 | 250 | ||
251 | if (truncate && S_ISDIR(inode->i_mode)) { | 251 | if (truncate && S_ISDIR(inode->i_mode)) { |
252 | /* We got a truncate request for a dir which is impossible. | 252 | /* We got a truncate request for a dir which is impossible. |
@@ -622,7 +622,6 @@ static int reiserfs_write_info(struct super_block *, int); | |||
622 | static int reiserfs_quota_on(struct super_block *, int, int, char *, int); | 622 | static int reiserfs_quota_on(struct super_block *, int, int, char *, int); |
623 | 623 | ||
624 | static const struct dquot_operations reiserfs_quota_operations = { | 624 | static const struct dquot_operations reiserfs_quota_operations = { |
625 | .initialize = dquot_initialize, | ||
626 | .write_dquot = reiserfs_write_dquot, | 625 | .write_dquot = reiserfs_write_dquot, |
627 | .acquire_dquot = reiserfs_acquire_dquot, | 626 | .acquire_dquot = reiserfs_acquire_dquot, |
628 | .release_dquot = reiserfs_release_dquot, | 627 | .release_dquot = reiserfs_release_dquot, |
diff --git a/fs/udf/file.c b/fs/udf/file.c index 013fa44d9a5e..1eb06774ed90 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c | |||
@@ -228,7 +228,7 @@ static int udf_setattr(struct dentry *dentry, struct iattr *iattr) | |||
228 | return error; | 228 | return error; |
229 | 229 | ||
230 | if (iattr->ia_valid & ATTR_SIZE) | 230 | if (iattr->ia_valid & ATTR_SIZE) |
231 | vfs_dq_init(inode); | 231 | dquot_initialize(inode); |
232 | 232 | ||
233 | if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || | 233 | if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || |
234 | (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { | 234 | (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { |
diff --git a/fs/udf/ialloc.c b/fs/udf/ialloc.c index 15c6e992e587..fb68c9cd0c3e 100644 --- a/fs/udf/ialloc.c +++ b/fs/udf/ialloc.c | |||
@@ -153,7 +153,7 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err) | |||
153 | insert_inode_hash(inode); | 153 | insert_inode_hash(inode); |
154 | mark_inode_dirty(inode); | 154 | mark_inode_dirty(inode); |
155 | 155 | ||
156 | vfs_dq_init(inode); | 156 | dquot_initialize(inode); |
157 | ret = dquot_alloc_inode(inode); | 157 | ret = dquot_alloc_inode(inode); |
158 | if (ret) { | 158 | if (ret) { |
159 | dquot_drop(inode); | 159 | dquot_drop(inode); |
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index f19520268404..c7da1a32b364 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
@@ -72,7 +72,7 @@ static int udf_get_block(struct inode *, sector_t, struct buffer_head *, int); | |||
72 | void udf_delete_inode(struct inode *inode) | 72 | void udf_delete_inode(struct inode *inode) |
73 | { | 73 | { |
74 | if (!is_bad_inode(inode)) | 74 | if (!is_bad_inode(inode)) |
75 | vfs_dq_init(inode); | 75 | dquot_initialize(inode); |
76 | 76 | ||
77 | truncate_inode_pages(&inode->i_data, 0); | 77 | truncate_inode_pages(&inode->i_data, 0); |
78 | 78 | ||
diff --git a/fs/udf/namei.c b/fs/udf/namei.c index e360c3fc4ae4..96757e3e3e04 100644 --- a/fs/udf/namei.c +++ b/fs/udf/namei.c | |||
@@ -563,7 +563,7 @@ static int udf_create(struct inode *dir, struct dentry *dentry, int mode, | |||
563 | int err; | 563 | int err; |
564 | struct udf_inode_info *iinfo; | 564 | struct udf_inode_info *iinfo; |
565 | 565 | ||
566 | vfs_dq_init(dir); | 566 | dquot_initialize(dir); |
567 | 567 | ||
568 | lock_kernel(); | 568 | lock_kernel(); |
569 | inode = udf_new_inode(dir, mode, &err); | 569 | inode = udf_new_inode(dir, mode, &err); |
@@ -618,7 +618,7 @@ static int udf_mknod(struct inode *dir, struct dentry *dentry, int mode, | |||
618 | if (!old_valid_dev(rdev)) | 618 | if (!old_valid_dev(rdev)) |
619 | return -EINVAL; | 619 | return -EINVAL; |
620 | 620 | ||
621 | vfs_dq_init(dir); | 621 | dquot_initialize(dir); |
622 | 622 | ||
623 | lock_kernel(); | 623 | lock_kernel(); |
624 | err = -EIO; | 624 | err = -EIO; |
@@ -666,7 +666,7 @@ static int udf_mkdir(struct inode *dir, struct dentry *dentry, int mode) | |||
666 | struct udf_inode_info *dinfo = UDF_I(dir); | 666 | struct udf_inode_info *dinfo = UDF_I(dir); |
667 | struct udf_inode_info *iinfo; | 667 | struct udf_inode_info *iinfo; |
668 | 668 | ||
669 | vfs_dq_init(dir); | 669 | dquot_initialize(dir); |
670 | 670 | ||
671 | lock_kernel(); | 671 | lock_kernel(); |
672 | err = -EMLINK; | 672 | err = -EMLINK; |
@@ -805,7 +805,7 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry) | |||
805 | struct fileIdentDesc *fi, cfi; | 805 | struct fileIdentDesc *fi, cfi; |
806 | struct kernel_lb_addr tloc; | 806 | struct kernel_lb_addr tloc; |
807 | 807 | ||
808 | vfs_dq_init(dir); | 808 | dquot_initialize(dir); |
809 | 809 | ||
810 | retval = -ENOENT; | 810 | retval = -ENOENT; |
811 | lock_kernel(); | 811 | lock_kernel(); |
@@ -853,7 +853,7 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry) | |||
853 | struct fileIdentDesc cfi; | 853 | struct fileIdentDesc cfi; |
854 | struct kernel_lb_addr tloc; | 854 | struct kernel_lb_addr tloc; |
855 | 855 | ||
856 | vfs_dq_init(dir); | 856 | dquot_initialize(dir); |
857 | 857 | ||
858 | retval = -ENOENT; | 858 | retval = -ENOENT; |
859 | lock_kernel(); | 859 | lock_kernel(); |
@@ -909,7 +909,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry, | |||
909 | struct buffer_head *bh; | 909 | struct buffer_head *bh; |
910 | struct udf_inode_info *iinfo; | 910 | struct udf_inode_info *iinfo; |
911 | 911 | ||
912 | vfs_dq_init(dir); | 912 | dquot_initialize(dir); |
913 | 913 | ||
914 | lock_kernel(); | 914 | lock_kernel(); |
915 | inode = udf_new_inode(dir, S_IFLNK, &err); | 915 | inode = udf_new_inode(dir, S_IFLNK, &err); |
@@ -1081,7 +1081,7 @@ static int udf_link(struct dentry *old_dentry, struct inode *dir, | |||
1081 | int err; | 1081 | int err; |
1082 | struct buffer_head *bh; | 1082 | struct buffer_head *bh; |
1083 | 1083 | ||
1084 | vfs_dq_init(dir); | 1084 | dquot_initialize(dir); |
1085 | 1085 | ||
1086 | lock_kernel(); | 1086 | lock_kernel(); |
1087 | if (inode->i_nlink >= (256 << sizeof(inode->i_nlink)) - 1) { | 1087 | if (inode->i_nlink >= (256 << sizeof(inode->i_nlink)) - 1) { |
@@ -1145,8 +1145,8 @@ static int udf_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1145 | struct kernel_lb_addr tloc; | 1145 | struct kernel_lb_addr tloc; |
1146 | struct udf_inode_info *old_iinfo = UDF_I(old_inode); | 1146 | struct udf_inode_info *old_iinfo = UDF_I(old_inode); |
1147 | 1147 | ||
1148 | vfs_dq_init(old_dir); | 1148 | dquot_initialize(old_dir); |
1149 | vfs_dq_init(new_dir); | 1149 | dquot_initialize(new_dir); |
1150 | 1150 | ||
1151 | lock_kernel(); | 1151 | lock_kernel(); |
1152 | ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi); | 1152 | ofi = udf_find_entry(old_dir, &old_dentry->d_name, &ofibh, &ocfi); |
diff --git a/fs/ufs/file.c b/fs/ufs/file.c index d84762f3028e..a8962cecde5b 100644 --- a/fs/ufs/file.c +++ b/fs/ufs/file.c | |||
@@ -24,6 +24,7 @@ | |||
24 | */ | 24 | */ |
25 | 25 | ||
26 | #include <linux/fs.h> | 26 | #include <linux/fs.h> |
27 | #include <linux/quotaops.h> | ||
27 | 28 | ||
28 | #include "ufs_fs.h" | 29 | #include "ufs_fs.h" |
29 | #include "ufs.h" | 30 | #include "ufs.h" |
diff --git a/fs/ufs/ialloc.c b/fs/ufs/ialloc.c index 67b4bdb056fb..230ecf608026 100644 --- a/fs/ufs/ialloc.c +++ b/fs/ufs/ialloc.c | |||
@@ -355,7 +355,7 @@ cg_found: | |||
355 | 355 | ||
356 | unlock_super (sb); | 356 | unlock_super (sb); |
357 | 357 | ||
358 | vfs_dq_init(inode); | 358 | dquot_initialize(inode); |
359 | err = dquot_alloc_inode(inode); | 359 | err = dquot_alloc_inode(inode); |
360 | if (err) { | 360 | if (err) { |
361 | dquot_drop(inode); | 361 | dquot_drop(inode); |
diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c index fff8edab382f..09aef49beedb 100644 --- a/fs/ufs/inode.c +++ b/fs/ufs/inode.c | |||
@@ -910,7 +910,7 @@ void ufs_delete_inode (struct inode * inode) | |||
910 | loff_t old_i_size; | 910 | loff_t old_i_size; |
911 | 911 | ||
912 | if (!is_bad_inode(inode)) | 912 | if (!is_bad_inode(inode)) |
913 | vfs_dq_init(inode); | 913 | dquot_initialize(inode); |
914 | 914 | ||
915 | truncate_inode_pages(&inode->i_data, 0); | 915 | truncate_inode_pages(&inode->i_data, 0); |
916 | if (is_bad_inode(inode)) | 916 | if (is_bad_inode(inode)) |
diff --git a/fs/ufs/namei.c b/fs/ufs/namei.c index c33cb90c516d..118556243e7a 100644 --- a/fs/ufs/namei.c +++ b/fs/ufs/namei.c | |||
@@ -86,7 +86,7 @@ static int ufs_create (struct inode * dir, struct dentry * dentry, int mode, | |||
86 | 86 | ||
87 | UFSD("BEGIN\n"); | 87 | UFSD("BEGIN\n"); |
88 | 88 | ||
89 | vfs_dq_init(dir); | 89 | dquot_initialize(dir); |
90 | 90 | ||
91 | inode = ufs_new_inode(dir, mode); | 91 | inode = ufs_new_inode(dir, mode); |
92 | err = PTR_ERR(inode); | 92 | err = PTR_ERR(inode); |
@@ -112,7 +112,7 @@ static int ufs_mknod (struct inode * dir, struct dentry *dentry, int mode, dev_t | |||
112 | if (!old_valid_dev(rdev)) | 112 | if (!old_valid_dev(rdev)) |
113 | return -EINVAL; | 113 | return -EINVAL; |
114 | 114 | ||
115 | vfs_dq_init(dir); | 115 | dquot_initialize(dir); |
116 | 116 | ||
117 | inode = ufs_new_inode(dir, mode); | 117 | inode = ufs_new_inode(dir, mode); |
118 | err = PTR_ERR(inode); | 118 | err = PTR_ERR(inode); |
@@ -138,7 +138,7 @@ static int ufs_symlink (struct inode * dir, struct dentry * dentry, | |||
138 | if (l > sb->s_blocksize) | 138 | if (l > sb->s_blocksize) |
139 | goto out_notlocked; | 139 | goto out_notlocked; |
140 | 140 | ||
141 | vfs_dq_init(dir); | 141 | dquot_initialize(dir); |
142 | 142 | ||
143 | lock_kernel(); | 143 | lock_kernel(); |
144 | inode = ufs_new_inode(dir, S_IFLNK | S_IRWXUGO); | 144 | inode = ufs_new_inode(dir, S_IFLNK | S_IRWXUGO); |
@@ -185,7 +185,7 @@ static int ufs_link (struct dentry * old_dentry, struct inode * dir, | |||
185 | return -EMLINK; | 185 | return -EMLINK; |
186 | } | 186 | } |
187 | 187 | ||
188 | vfs_dq_init(dir); | 188 | dquot_initialize(dir); |
189 | 189 | ||
190 | inode->i_ctime = CURRENT_TIME_SEC; | 190 | inode->i_ctime = CURRENT_TIME_SEC; |
191 | inode_inc_link_count(inode); | 191 | inode_inc_link_count(inode); |
@@ -204,7 +204,7 @@ static int ufs_mkdir(struct inode * dir, struct dentry * dentry, int mode) | |||
204 | if (dir->i_nlink >= UFS_LINK_MAX) | 204 | if (dir->i_nlink >= UFS_LINK_MAX) |
205 | goto out; | 205 | goto out; |
206 | 206 | ||
207 | vfs_dq_init(dir); | 207 | dquot_initialize(dir); |
208 | 208 | ||
209 | lock_kernel(); | 209 | lock_kernel(); |
210 | inode_inc_link_count(dir); | 210 | inode_inc_link_count(dir); |
@@ -250,7 +250,7 @@ static int ufs_unlink(struct inode *dir, struct dentry *dentry) | |||
250 | struct page *page; | 250 | struct page *page; |
251 | int err = -ENOENT; | 251 | int err = -ENOENT; |
252 | 252 | ||
253 | vfs_dq_init(dir); | 253 | dquot_initialize(dir); |
254 | 254 | ||
255 | de = ufs_find_entry(dir, &dentry->d_name, &page); | 255 | de = ufs_find_entry(dir, &dentry->d_name, &page); |
256 | if (!de) | 256 | if (!de) |
@@ -296,8 +296,8 @@ static int ufs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
296 | struct ufs_dir_entry *old_de; | 296 | struct ufs_dir_entry *old_de; |
297 | int err = -ENOENT; | 297 | int err = -ENOENT; |
298 | 298 | ||
299 | vfs_dq_init(old_dir); | 299 | dquot_initialize(old_dir); |
300 | vfs_dq_init(new_dir); | 300 | dquot_initialize(new_dir); |
301 | 301 | ||
302 | old_de = ufs_find_entry(old_dir, &old_dentry->d_name, &old_page); | 302 | old_de = ufs_find_entry(old_dir, &old_dentry->d_name, &old_page); |
303 | if (!old_de) | 303 | if (!old_de) |
diff --git a/fs/ufs/truncate.c b/fs/ufs/truncate.c index e5ef8a3ec230..d3b6270cb377 100644 --- a/fs/ufs/truncate.c +++ b/fs/ufs/truncate.c | |||
@@ -528,7 +528,7 @@ static int ufs_setattr(struct dentry *dentry, struct iattr *attr) | |||
528 | attr->ia_size != i_size_read(inode)) { | 528 | attr->ia_size != i_size_read(inode)) { |
529 | loff_t old_i_size = inode->i_size; | 529 | loff_t old_i_size = inode->i_size; |
530 | 530 | ||
531 | vfs_dq_init(inode); | 531 | dquot_initialize(inode); |
532 | 532 | ||
533 | error = vmtruncate(inode, attr->ia_size); | 533 | error = vmtruncate(inode, attr->ia_size); |
534 | if (error) | 534 | if (error) |
diff --git a/include/linux/quota.h b/include/linux/quota.h index aec2e9dac2d7..4aa93554f0eb 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h | |||
@@ -295,7 +295,6 @@ struct quota_format_ops { | |||
295 | 295 | ||
296 | /* Operations working with dquots */ | 296 | /* Operations working with dquots */ |
297 | struct dquot_operations { | 297 | struct dquot_operations { |
298 | int (*initialize) (struct inode *, int); | ||
299 | int (*write_dquot) (struct dquot *); /* Ordinary dquot write */ | 298 | int (*write_dquot) (struct dquot *); /* Ordinary dquot write */ |
300 | struct dquot *(*alloc_dquot)(struct super_block *, int); /* Allocate memory for new dquot */ | 299 | struct dquot *(*alloc_dquot)(struct super_block *, int); /* Allocate memory for new dquot */ |
301 | void (*destroy_dquot)(struct dquot *); /* Free memory for dquot */ | 300 | void (*destroy_dquot)(struct dquot *); /* Free memory for dquot */ |
diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 93ac788345e2..e6fa7acce290 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h | |||
@@ -23,7 +23,7 @@ void inode_add_rsv_space(struct inode *inode, qsize_t number); | |||
23 | void inode_claim_rsv_space(struct inode *inode, qsize_t number); | 23 | void inode_claim_rsv_space(struct inode *inode, qsize_t number); |
24 | void inode_sub_rsv_space(struct inode *inode, qsize_t number); | 24 | void inode_sub_rsv_space(struct inode *inode, qsize_t number); |
25 | 25 | ||
26 | int dquot_initialize(struct inode *inode, int type); | 26 | void dquot_initialize(struct inode *inode); |
27 | void dquot_drop(struct inode *inode); | 27 | void dquot_drop(struct inode *inode); |
28 | struct dquot *dqget(struct super_block *sb, unsigned int id, int type); | 28 | struct dquot *dqget(struct super_block *sb, unsigned int id, int type); |
29 | void dqput(struct dquot *dquot); | 29 | void dqput(struct dquot *dquot); |
@@ -139,15 +139,6 @@ extern const struct quotactl_ops vfs_quotactl_ops; | |||
139 | #define sb_dquot_ops (&dquot_operations) | 139 | #define sb_dquot_ops (&dquot_operations) |
140 | #define sb_quotactl_ops (&vfs_quotactl_ops) | 140 | #define sb_quotactl_ops (&vfs_quotactl_ops) |
141 | 141 | ||
142 | /* It is better to call this function outside of any transaction as it might | ||
143 | * need a lot of space in journal for dquot structure allocation. */ | ||
144 | static inline void vfs_dq_init(struct inode *inode) | ||
145 | { | ||
146 | BUG_ON(!inode->i_sb); | ||
147 | if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode)) | ||
148 | inode->i_sb->dq_op->initialize(inode, -1); | ||
149 | } | ||
150 | |||
151 | /* Cannot be called inside a transaction */ | 142 | /* Cannot be called inside a transaction */ |
152 | static inline int vfs_dq_off(struct super_block *sb, int remount) | 143 | static inline int vfs_dq_off(struct super_block *sb, int remount) |
153 | { | 144 | { |
@@ -207,7 +198,7 @@ static inline int sb_any_quota_active(struct super_block *sb) | |||
207 | #define sb_dquot_ops (NULL) | 198 | #define sb_dquot_ops (NULL) |
208 | #define sb_quotactl_ops (NULL) | 199 | #define sb_quotactl_ops (NULL) |
209 | 200 | ||
210 | static inline void vfs_dq_init(struct inode *inode) | 201 | static inline void dquot_initialize(struct inode *inode) |
211 | { | 202 | { |
212 | } | 203 | } |
213 | 204 | ||
@@ -260,6 +251,8 @@ static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number) | |||
260 | return 0; | 251 | return 0; |
261 | } | 252 | } |
262 | 253 | ||
254 | #define dquot_file_open generic_file_open | ||
255 | |||
263 | #endif /* CONFIG_QUOTA */ | 256 | #endif /* CONFIG_QUOTA */ |
264 | 257 | ||
265 | static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr) | 258 | static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr) |
@@ -344,6 +337,4 @@ static inline void dquot_release_reservation_block(struct inode *inode, | |||
344 | __dquot_free_space(inode, nr << inode->i_blkbits, 1); | 337 | __dquot_free_space(inode, nr << inode->i_blkbits, 1); |
345 | } | 338 | } |
346 | 339 | ||
347 | #define dquot_file_open generic_file_open | ||
348 | |||
349 | #endif /* _LINUX_QUOTAOPS_ */ | 340 | #endif /* _LINUX_QUOTAOPS_ */ |