diff options
Diffstat (limited to 'fs/jfs')
-rw-r--r-- | fs/jfs/acl.c | 27 | ||||
-rw-r--r-- | fs/jfs/file.c | 31 | ||||
-rw-r--r-- | fs/jfs/inode.c | 16 | ||||
-rw-r--r-- | fs/jfs/jfs_acl.h | 7 | ||||
-rw-r--r-- | fs/jfs/jfs_dmap.c | 21 | ||||
-rw-r--r-- | fs/jfs/jfs_dmap.h | 6 | ||||
-rw-r--r-- | fs/jfs/jfs_dtree.c | 29 | ||||
-rw-r--r-- | fs/jfs/jfs_extent.c | 16 | ||||
-rw-r--r-- | fs/jfs/jfs_imap.c | 1 | ||||
-rw-r--r-- | fs/jfs/jfs_inode.c | 8 | ||||
-rw-r--r-- | fs/jfs/jfs_inode.h | 4 | ||||
-rw-r--r-- | fs/jfs/jfs_logmgr.c | 1 | ||||
-rw-r--r-- | fs/jfs/jfs_metapage.c | 1 | ||||
-rw-r--r-- | fs/jfs/jfs_txnmgr.c | 2 | ||||
-rw-r--r-- | fs/jfs/jfs_unicode.h | 1 | ||||
-rw-r--r-- | fs/jfs/jfs_xtree.c | 21 | ||||
-rw-r--r-- | fs/jfs/namei.c | 27 | ||||
-rw-r--r-- | fs/jfs/resize.c | 6 | ||||
-rw-r--r-- | fs/jfs/super.c | 22 | ||||
-rw-r--r-- | fs/jfs/symlink.c | 14 | ||||
-rw-r--r-- | fs/jfs/xattr.c | 18 |
21 files changed, 173 insertions, 106 deletions
diff --git a/fs/jfs/acl.c b/fs/jfs/acl.c index d66477c34306..1057a4998e4e 100644 --- a/fs/jfs/acl.c +++ b/fs/jfs/acl.c | |||
@@ -19,8 +19,8 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
22 | #include <linux/slab.h> | ||
22 | #include <linux/fs.h> | 23 | #include <linux/fs.h> |
23 | #include <linux/quotaops.h> | ||
24 | #include <linux/posix_acl_xattr.h> | 24 | #include <linux/posix_acl_xattr.h> |
25 | #include "jfs_incore.h" | 25 | #include "jfs_incore.h" |
26 | #include "jfs_txnmgr.h" | 26 | #include "jfs_txnmgr.h" |
@@ -174,7 +174,7 @@ cleanup: | |||
174 | return rc; | 174 | return rc; |
175 | } | 175 | } |
176 | 176 | ||
177 | static int jfs_acl_chmod(struct inode *inode) | 177 | int jfs_acl_chmod(struct inode *inode) |
178 | { | 178 | { |
179 | struct posix_acl *acl, *clone; | 179 | struct posix_acl *acl, *clone; |
180 | int rc; | 180 | int rc; |
@@ -205,26 +205,3 @@ static int jfs_acl_chmod(struct inode *inode) | |||
205 | posix_acl_release(clone); | 205 | posix_acl_release(clone); |
206 | return rc; | 206 | return rc; |
207 | } | 207 | } |
208 | |||
209 | int jfs_setattr(struct dentry *dentry, struct iattr *iattr) | ||
210 | { | ||
211 | struct inode *inode = dentry->d_inode; | ||
212 | int rc; | ||
213 | |||
214 | rc = inode_change_ok(inode, iattr); | ||
215 | if (rc) | ||
216 | return rc; | ||
217 | |||
218 | if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || | ||
219 | (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { | ||
220 | if (vfs_dq_transfer(inode, iattr)) | ||
221 | return -EDQUOT; | ||
222 | } | ||
223 | |||
224 | rc = inode_setattr(inode, iattr); | ||
225 | |||
226 | if (!rc && (iattr->ia_valid & ATTR_MODE)) | ||
227 | rc = jfs_acl_chmod(inode); | ||
228 | |||
229 | return rc; | ||
230 | } | ||
diff --git a/fs/jfs/file.c b/fs/jfs/file.c index 2b70fa78e4a7..14ba982b3f24 100644 --- a/fs/jfs/file.c +++ b/fs/jfs/file.c | |||
@@ -18,6 +18,7 @@ | |||
18 | */ | 18 | */ |
19 | 19 | ||
20 | #include <linux/fs.h> | 20 | #include <linux/fs.h> |
21 | #include <linux/quotaops.h> | ||
21 | #include "jfs_incore.h" | 22 | #include "jfs_incore.h" |
22 | #include "jfs_inode.h" | 23 | #include "jfs_inode.h" |
23 | #include "jfs_dmap.h" | 24 | #include "jfs_dmap.h" |
@@ -47,7 +48,7 @@ static int jfs_open(struct inode *inode, struct file *file) | |||
47 | { | 48 | { |
48 | int rc; | 49 | int rc; |
49 | 50 | ||
50 | if ((rc = generic_file_open(inode, file))) | 51 | if ((rc = dquot_file_open(inode, file))) |
51 | return rc; | 52 | return rc; |
52 | 53 | ||
53 | /* | 54 | /* |
@@ -88,14 +89,40 @@ static int jfs_release(struct inode *inode, struct file *file) | |||
88 | return 0; | 89 | return 0; |
89 | } | 90 | } |
90 | 91 | ||
92 | int jfs_setattr(struct dentry *dentry, struct iattr *iattr) | ||
93 | { | ||
94 | struct inode *inode = dentry->d_inode; | ||
95 | int rc; | ||
96 | |||
97 | rc = inode_change_ok(inode, iattr); | ||
98 | if (rc) | ||
99 | return rc; | ||
100 | |||
101 | if (iattr->ia_valid & ATTR_SIZE) | ||
102 | dquot_initialize(inode); | ||
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)) { | ||
105 | rc = dquot_transfer(inode, iattr); | ||
106 | if (rc) | ||
107 | return rc; | ||
108 | } | ||
109 | |||
110 | rc = inode_setattr(inode, iattr); | ||
111 | |||
112 | if (!rc && (iattr->ia_valid & ATTR_MODE)) | ||
113 | rc = jfs_acl_chmod(inode); | ||
114 | |||
115 | return rc; | ||
116 | } | ||
117 | |||
91 | const struct inode_operations jfs_file_inode_operations = { | 118 | const struct inode_operations jfs_file_inode_operations = { |
92 | .truncate = jfs_truncate, | 119 | .truncate = jfs_truncate, |
93 | .setxattr = jfs_setxattr, | 120 | .setxattr = jfs_setxattr, |
94 | .getxattr = jfs_getxattr, | 121 | .getxattr = jfs_getxattr, |
95 | .listxattr = jfs_listxattr, | 122 | .listxattr = jfs_listxattr, |
96 | .removexattr = jfs_removexattr, | 123 | .removexattr = jfs_removexattr, |
97 | #ifdef CONFIG_JFS_POSIX_ACL | ||
98 | .setattr = jfs_setattr, | 124 | .setattr = jfs_setattr, |
125 | #ifdef CONFIG_JFS_POSIX_ACL | ||
99 | .check_acl = jfs_check_acl, | 126 | .check_acl = jfs_check_acl, |
100 | #endif | 127 | #endif |
101 | }; | 128 | }; |
diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c index b2ae190a77ba..ed9ba6fe04f5 100644 --- a/fs/jfs/inode.c +++ b/fs/jfs/inode.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/buffer_head.h> | 22 | #include <linux/buffer_head.h> |
23 | #include <linux/pagemap.h> | 23 | #include <linux/pagemap.h> |
24 | #include <linux/quotaops.h> | 24 | #include <linux/quotaops.h> |
25 | #include <linux/writeback.h> | ||
25 | #include "jfs_incore.h" | 26 | #include "jfs_incore.h" |
26 | #include "jfs_inode.h" | 27 | #include "jfs_inode.h" |
27 | #include "jfs_filsys.h" | 28 | #include "jfs_filsys.h" |
@@ -60,7 +61,7 @@ struct inode *jfs_iget(struct super_block *sb, unsigned long ino) | |||
60 | inode->i_op = &page_symlink_inode_operations; | 61 | inode->i_op = &page_symlink_inode_operations; |
61 | inode->i_mapping->a_ops = &jfs_aops; | 62 | inode->i_mapping->a_ops = &jfs_aops; |
62 | } else { | 63 | } else { |
63 | inode->i_op = &jfs_symlink_inode_operations; | 64 | inode->i_op = &jfs_fast_symlink_inode_operations; |
64 | /* | 65 | /* |
65 | * The inline data should be null-terminated, but | 66 | * The inline data should be null-terminated, but |
66 | * don't let on-disk corruption crash the kernel | 67 | * don't let on-disk corruption crash the kernel |
@@ -120,8 +121,10 @@ int jfs_commit_inode(struct inode *inode, int wait) | |||
120 | return rc; | 121 | return rc; |
121 | } | 122 | } |
122 | 123 | ||
123 | int jfs_write_inode(struct inode *inode, int wait) | 124 | int jfs_write_inode(struct inode *inode, struct writeback_control *wbc) |
124 | { | 125 | { |
126 | int wait = wbc->sync_mode == WB_SYNC_ALL; | ||
127 | |||
125 | if (test_cflag(COMMIT_Nolink, inode)) | 128 | if (test_cflag(COMMIT_Nolink, inode)) |
126 | return 0; | 129 | return 0; |
127 | /* | 130 | /* |
@@ -146,6 +149,9 @@ void jfs_delete_inode(struct inode *inode) | |||
146 | { | 149 | { |
147 | jfs_info("In jfs_delete_inode, inode = 0x%p", inode); | 150 | jfs_info("In jfs_delete_inode, inode = 0x%p", inode); |
148 | 151 | ||
152 | if (!is_bad_inode(inode)) | ||
153 | dquot_initialize(inode); | ||
154 | |||
149 | if (!is_bad_inode(inode) && | 155 | if (!is_bad_inode(inode) && |
150 | (JFS_IP(inode)->fileset == FILESYSTEM_I)) { | 156 | (JFS_IP(inode)->fileset == FILESYSTEM_I)) { |
151 | truncate_inode_pages(&inode->i_data, 0); | 157 | truncate_inode_pages(&inode->i_data, 0); |
@@ -158,9 +164,9 @@ void jfs_delete_inode(struct inode *inode) | |||
158 | /* | 164 | /* |
159 | * Free the inode from the quota allocation. | 165 | * Free the inode from the quota allocation. |
160 | */ | 166 | */ |
161 | vfs_dq_init(inode); | 167 | dquot_initialize(inode); |
162 | vfs_dq_free_inode(inode); | 168 | dquot_free_inode(inode); |
163 | vfs_dq_drop(inode); | 169 | dquot_drop(inode); |
164 | } | 170 | } |
165 | 171 | ||
166 | clear_inode(inode); | 172 | clear_inode(inode); |
diff --git a/fs/jfs/jfs_acl.h b/fs/jfs/jfs_acl.h index b07bd417ef85..54e07559878d 100644 --- a/fs/jfs/jfs_acl.h +++ b/fs/jfs/jfs_acl.h | |||
@@ -22,7 +22,7 @@ | |||
22 | 22 | ||
23 | int jfs_check_acl(struct inode *, int); | 23 | int jfs_check_acl(struct inode *, int); |
24 | int jfs_init_acl(tid_t, struct inode *, struct inode *); | 24 | int jfs_init_acl(tid_t, struct inode *, struct inode *); |
25 | int jfs_setattr(struct dentry *, struct iattr *); | 25 | int jfs_acl_chmod(struct inode *inode); |
26 | 26 | ||
27 | #else | 27 | #else |
28 | 28 | ||
@@ -32,5 +32,10 @@ static inline int jfs_init_acl(tid_t tid, struct inode *inode, | |||
32 | return 0; | 32 | return 0; |
33 | } | 33 | } |
34 | 34 | ||
35 | static inline int jfs_acl_chmod(struct inode *inode) | ||
36 | { | ||
37 | return 0; | ||
38 | } | ||
39 | |||
35 | #endif | 40 | #endif |
36 | #endif /* _H_JFS_ACL */ | 41 | #endif /* _H_JFS_ACL */ |
diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c index 2bc7d8aa5740..9e2f6a721668 100644 --- a/fs/jfs/jfs_dmap.c +++ b/fs/jfs/jfs_dmap.c | |||
@@ -17,6 +17,7 @@ | |||
17 | */ | 17 | */ |
18 | 18 | ||
19 | #include <linux/fs.h> | 19 | #include <linux/fs.h> |
20 | #include <linux/slab.h> | ||
20 | #include "jfs_incore.h" | 21 | #include "jfs_incore.h" |
21 | #include "jfs_superblock.h" | 22 | #include "jfs_superblock.h" |
22 | #include "jfs_dmap.h" | 23 | #include "jfs_dmap.h" |
@@ -195,7 +196,7 @@ int dbMount(struct inode *ipbmap) | |||
195 | bmp->db_maxag = le32_to_cpu(dbmp_le->dn_maxag); | 196 | bmp->db_maxag = le32_to_cpu(dbmp_le->dn_maxag); |
196 | bmp->db_agpref = le32_to_cpu(dbmp_le->dn_agpref); | 197 | bmp->db_agpref = le32_to_cpu(dbmp_le->dn_agpref); |
197 | bmp->db_aglevel = le32_to_cpu(dbmp_le->dn_aglevel); | 198 | bmp->db_aglevel = le32_to_cpu(dbmp_le->dn_aglevel); |
198 | bmp->db_agheigth = le32_to_cpu(dbmp_le->dn_agheigth); | 199 | bmp->db_agheight = le32_to_cpu(dbmp_le->dn_agheight); |
199 | bmp->db_agwidth = le32_to_cpu(dbmp_le->dn_agwidth); | 200 | bmp->db_agwidth = le32_to_cpu(dbmp_le->dn_agwidth); |
200 | bmp->db_agstart = le32_to_cpu(dbmp_le->dn_agstart); | 201 | bmp->db_agstart = le32_to_cpu(dbmp_le->dn_agstart); |
201 | bmp->db_agl2size = le32_to_cpu(dbmp_le->dn_agl2size); | 202 | bmp->db_agl2size = le32_to_cpu(dbmp_le->dn_agl2size); |
@@ -287,7 +288,7 @@ int dbSync(struct inode *ipbmap) | |||
287 | dbmp_le->dn_maxag = cpu_to_le32(bmp->db_maxag); | 288 | dbmp_le->dn_maxag = cpu_to_le32(bmp->db_maxag); |
288 | dbmp_le->dn_agpref = cpu_to_le32(bmp->db_agpref); | 289 | dbmp_le->dn_agpref = cpu_to_le32(bmp->db_agpref); |
289 | dbmp_le->dn_aglevel = cpu_to_le32(bmp->db_aglevel); | 290 | dbmp_le->dn_aglevel = cpu_to_le32(bmp->db_aglevel); |
290 | dbmp_le->dn_agheigth = cpu_to_le32(bmp->db_agheigth); | 291 | dbmp_le->dn_agheight = cpu_to_le32(bmp->db_agheight); |
291 | dbmp_le->dn_agwidth = cpu_to_le32(bmp->db_agwidth); | 292 | dbmp_le->dn_agwidth = cpu_to_le32(bmp->db_agwidth); |
292 | dbmp_le->dn_agstart = cpu_to_le32(bmp->db_agstart); | 293 | dbmp_le->dn_agstart = cpu_to_le32(bmp->db_agstart); |
293 | dbmp_le->dn_agl2size = cpu_to_le32(bmp->db_agl2size); | 294 | dbmp_le->dn_agl2size = cpu_to_le32(bmp->db_agl2size); |
@@ -755,7 +756,7 @@ int dbAlloc(struct inode *ip, s64 hint, s64 nblocks, s64 * results) | |||
755 | * allocation group. | 756 | * allocation group. |
756 | */ | 757 | */ |
757 | if ((blkno & (bmp->db_agsize - 1)) == 0) | 758 | if ((blkno & (bmp->db_agsize - 1)) == 0) |
758 | /* check if the AG is currenly being written to. | 759 | /* check if the AG is currently being written to. |
759 | * if so, call dbNextAG() to find a non-busy | 760 | * if so, call dbNextAG() to find a non-busy |
760 | * AG with sufficient free space. | 761 | * AG with sufficient free space. |
761 | */ | 762 | */ |
@@ -1440,7 +1441,7 @@ dbAllocAG(struct bmap * bmp, int agno, s64 nblocks, int l2nb, s64 * results) | |||
1440 | * tree index of this allocation group within the control page. | 1441 | * tree index of this allocation group within the control page. |
1441 | */ | 1442 | */ |
1442 | agperlev = | 1443 | agperlev = |
1443 | (1 << (L2LPERCTL - (bmp->db_agheigth << 1))) / bmp->db_agwidth; | 1444 | (1 << (L2LPERCTL - (bmp->db_agheight << 1))) / bmp->db_agwidth; |
1444 | ti = bmp->db_agstart + bmp->db_agwidth * (agno & (agperlev - 1)); | 1445 | ti = bmp->db_agstart + bmp->db_agwidth * (agno & (agperlev - 1)); |
1445 | 1446 | ||
1446 | /* dmap control page trees fan-out by 4 and a single allocation | 1447 | /* dmap control page trees fan-out by 4 and a single allocation |
@@ -1459,7 +1460,7 @@ dbAllocAG(struct bmap * bmp, int agno, s64 nblocks, int l2nb, s64 * results) | |||
1459 | * the subtree to find the leftmost leaf that describes this | 1460 | * the subtree to find the leftmost leaf that describes this |
1460 | * free space. | 1461 | * free space. |
1461 | */ | 1462 | */ |
1462 | for (k = bmp->db_agheigth; k > 0; k--) { | 1463 | for (k = bmp->db_agheight; k > 0; k--) { |
1463 | for (n = 0, m = (ti << 2) + 1; n < 4; n++) { | 1464 | for (n = 0, m = (ti << 2) + 1; n < 4; n++) { |
1464 | if (l2nb <= dcp->stree[m + n]) { | 1465 | if (l2nb <= dcp->stree[m + n]) { |
1465 | ti = m + n; | 1466 | ti = m + n; |
@@ -3337,7 +3338,7 @@ int dbExtendFS(struct inode *ipbmap, s64 blkno, s64 nblocks) | |||
3337 | for (i = 0, n = 0; i < agno; n++) { | 3338 | for (i = 0, n = 0; i < agno; n++) { |
3338 | bmp->db_agfree[n] = 0; /* init collection point */ | 3339 | bmp->db_agfree[n] = 0; /* init collection point */ |
3339 | 3340 | ||
3340 | /* coalesce cotiguous k AGs; */ | 3341 | /* coalesce contiguous k AGs; */ |
3341 | for (j = 0; j < k && i < agno; j++, i++) { | 3342 | for (j = 0; j < k && i < agno; j++, i++) { |
3342 | /* merge AGi to AGn */ | 3343 | /* merge AGi to AGn */ |
3343 | bmp->db_agfree[n] += bmp->db_agfree[i]; | 3344 | bmp->db_agfree[n] += bmp->db_agfree[i]; |
@@ -3606,7 +3607,7 @@ void dbFinalizeBmap(struct inode *ipbmap) | |||
3606 | } | 3607 | } |
3607 | 3608 | ||
3608 | /* | 3609 | /* |
3609 | * compute db_aglevel, db_agheigth, db_width, db_agstart: | 3610 | * compute db_aglevel, db_agheight, db_width, db_agstart: |
3610 | * an ag is covered in aglevel dmapctl summary tree, | 3611 | * an ag is covered in aglevel dmapctl summary tree, |
3611 | * at agheight level height (from leaf) with agwidth number of nodes | 3612 | * at agheight level height (from leaf) with agwidth number of nodes |
3612 | * each, which starts at agstart index node of the smmary tree node | 3613 | * each, which starts at agstart index node of the smmary tree node |
@@ -3615,9 +3616,9 @@ void dbFinalizeBmap(struct inode *ipbmap) | |||
3615 | bmp->db_aglevel = BMAPSZTOLEV(bmp->db_agsize); | 3616 | bmp->db_aglevel = BMAPSZTOLEV(bmp->db_agsize); |
3616 | l2nl = | 3617 | l2nl = |
3617 | bmp->db_agl2size - (L2BPERDMAP + bmp->db_aglevel * L2LPERCTL); | 3618 | bmp->db_agl2size - (L2BPERDMAP + bmp->db_aglevel * L2LPERCTL); |
3618 | bmp->db_agheigth = l2nl >> 1; | 3619 | bmp->db_agheight = l2nl >> 1; |
3619 | bmp->db_agwidth = 1 << (l2nl - (bmp->db_agheigth << 1)); | 3620 | bmp->db_agwidth = 1 << (l2nl - (bmp->db_agheight << 1)); |
3620 | for (i = 5 - bmp->db_agheigth, bmp->db_agstart = 0, n = 1; i > 0; | 3621 | for (i = 5 - bmp->db_agheight, bmp->db_agstart = 0, n = 1; i > 0; |
3621 | i--) { | 3622 | i--) { |
3622 | bmp->db_agstart += n; | 3623 | bmp->db_agstart += n; |
3623 | n <<= 2; | 3624 | n <<= 2; |
diff --git a/fs/jfs/jfs_dmap.h b/fs/jfs/jfs_dmap.h index 1a6eb41569bc..6dcb906c55d8 100644 --- a/fs/jfs/jfs_dmap.h +++ b/fs/jfs/jfs_dmap.h | |||
@@ -210,7 +210,7 @@ struct dbmap_disk { | |||
210 | __le32 dn_maxag; /* 4: max active alloc group number */ | 210 | __le32 dn_maxag; /* 4: max active alloc group number */ |
211 | __le32 dn_agpref; /* 4: preferred alloc group (hint) */ | 211 | __le32 dn_agpref; /* 4: preferred alloc group (hint) */ |
212 | __le32 dn_aglevel; /* 4: dmapctl level holding the AG */ | 212 | __le32 dn_aglevel; /* 4: dmapctl level holding the AG */ |
213 | __le32 dn_agheigth; /* 4: height in dmapctl of the AG */ | 213 | __le32 dn_agheight; /* 4: height in dmapctl of the AG */ |
214 | __le32 dn_agwidth; /* 4: width in dmapctl of the AG */ | 214 | __le32 dn_agwidth; /* 4: width in dmapctl of the AG */ |
215 | __le32 dn_agstart; /* 4: start tree index at AG height */ | 215 | __le32 dn_agstart; /* 4: start tree index at AG height */ |
216 | __le32 dn_agl2size; /* 4: l2 num of blks per alloc group */ | 216 | __le32 dn_agl2size; /* 4: l2 num of blks per alloc group */ |
@@ -229,7 +229,7 @@ struct dbmap { | |||
229 | int dn_maxag; /* max active alloc group number */ | 229 | int dn_maxag; /* max active alloc group number */ |
230 | int dn_agpref; /* preferred alloc group (hint) */ | 230 | int dn_agpref; /* preferred alloc group (hint) */ |
231 | int dn_aglevel; /* dmapctl level holding the AG */ | 231 | int dn_aglevel; /* dmapctl level holding the AG */ |
232 | int dn_agheigth; /* height in dmapctl of the AG */ | 232 | int dn_agheight; /* height in dmapctl of the AG */ |
233 | int dn_agwidth; /* width in dmapctl of the AG */ | 233 | int dn_agwidth; /* width in dmapctl of the AG */ |
234 | int dn_agstart; /* start tree index at AG height */ | 234 | int dn_agstart; /* start tree index at AG height */ |
235 | int dn_agl2size; /* l2 num of blks per alloc group */ | 235 | int dn_agl2size; /* l2 num of blks per alloc group */ |
@@ -255,7 +255,7 @@ struct bmap { | |||
255 | #define db_agsize db_bmap.dn_agsize | 255 | #define db_agsize db_bmap.dn_agsize |
256 | #define db_agl2size db_bmap.dn_agl2size | 256 | #define db_agl2size db_bmap.dn_agl2size |
257 | #define db_agwidth db_bmap.dn_agwidth | 257 | #define db_agwidth db_bmap.dn_agwidth |
258 | #define db_agheigth db_bmap.dn_agheigth | 258 | #define db_agheight db_bmap.dn_agheight |
259 | #define db_agstart db_bmap.dn_agstart | 259 | #define db_agstart db_bmap.dn_agstart |
260 | #define db_numag db_bmap.dn_numag | 260 | #define db_numag db_bmap.dn_numag |
261 | #define db_maxlevel db_bmap.dn_maxlevel | 261 | #define db_maxlevel db_bmap.dn_maxlevel |
diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c index 925871e9887b..9197a1b0d02d 100644 --- a/fs/jfs/jfs_dtree.c +++ b/fs/jfs/jfs_dtree.c | |||
@@ -102,6 +102,7 @@ | |||
102 | 102 | ||
103 | #include <linux/fs.h> | 103 | #include <linux/fs.h> |
104 | #include <linux/quotaops.h> | 104 | #include <linux/quotaops.h> |
105 | #include <linux/slab.h> | ||
105 | #include "jfs_incore.h" | 106 | #include "jfs_incore.h" |
106 | #include "jfs_superblock.h" | 107 | #include "jfs_superblock.h" |
107 | #include "jfs_filsys.h" | 108 | #include "jfs_filsys.h" |
@@ -381,10 +382,10 @@ static u32 add_index(tid_t tid, struct inode *ip, s64 bn, int slot) | |||
381 | * It's time to move the inline table to an external | 382 | * It's time to move the inline table to an external |
382 | * page and begin to build the xtree | 383 | * page and begin to build the xtree |
383 | */ | 384 | */ |
384 | if (vfs_dq_alloc_block(ip, sbi->nbperpage)) | 385 | if (dquot_alloc_block(ip, sbi->nbperpage)) |
385 | goto clean_up; | 386 | goto clean_up; |
386 | if (dbAlloc(ip, 0, sbi->nbperpage, &xaddr)) { | 387 | if (dbAlloc(ip, 0, sbi->nbperpage, &xaddr)) { |
387 | vfs_dq_free_block(ip, sbi->nbperpage); | 388 | dquot_free_block(ip, sbi->nbperpage); |
388 | goto clean_up; | 389 | goto clean_up; |
389 | } | 390 | } |
390 | 391 | ||
@@ -408,7 +409,7 @@ static u32 add_index(tid_t tid, struct inode *ip, s64 bn, int slot) | |||
408 | memcpy(&jfs_ip->i_dirtable, temp_table, | 409 | memcpy(&jfs_ip->i_dirtable, temp_table, |
409 | sizeof (temp_table)); | 410 | sizeof (temp_table)); |
410 | dbFree(ip, xaddr, sbi->nbperpage); | 411 | dbFree(ip, xaddr, sbi->nbperpage); |
411 | vfs_dq_free_block(ip, sbi->nbperpage); | 412 | dquot_free_block(ip, sbi->nbperpage); |
412 | goto clean_up; | 413 | goto clean_up; |
413 | } | 414 | } |
414 | ip->i_size = PSIZE; | 415 | ip->i_size = PSIZE; |
@@ -1027,10 +1028,9 @@ static int dtSplitUp(tid_t tid, | |||
1027 | n = xlen; | 1028 | n = xlen; |
1028 | 1029 | ||
1029 | /* Allocate blocks to quota. */ | 1030 | /* Allocate blocks to quota. */ |
1030 | if (vfs_dq_alloc_block(ip, n)) { | 1031 | rc = dquot_alloc_block(ip, n); |
1031 | rc = -EDQUOT; | 1032 | if (rc) |
1032 | goto extendOut; | 1033 | goto extendOut; |
1033 | } | ||
1034 | quota_allocation += n; | 1034 | quota_allocation += n; |
1035 | 1035 | ||
1036 | if ((rc = dbReAlloc(sbi->ipbmap, xaddr, (s64) xlen, | 1036 | if ((rc = dbReAlloc(sbi->ipbmap, xaddr, (s64) xlen, |
@@ -1308,7 +1308,7 @@ static int dtSplitUp(tid_t tid, | |||
1308 | 1308 | ||
1309 | /* Rollback quota allocation */ | 1309 | /* Rollback quota allocation */ |
1310 | if (rc && quota_allocation) | 1310 | if (rc && quota_allocation) |
1311 | vfs_dq_free_block(ip, quota_allocation); | 1311 | dquot_free_block(ip, quota_allocation); |
1312 | 1312 | ||
1313 | dtSplitUp_Exit: | 1313 | dtSplitUp_Exit: |
1314 | 1314 | ||
@@ -1369,9 +1369,10 @@ static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split, | |||
1369 | return -EIO; | 1369 | return -EIO; |
1370 | 1370 | ||
1371 | /* Allocate blocks to quota. */ | 1371 | /* Allocate blocks to quota. */ |
1372 | if (vfs_dq_alloc_block(ip, lengthPXD(pxd))) { | 1372 | rc = dquot_alloc_block(ip, lengthPXD(pxd)); |
1373 | if (rc) { | ||
1373 | release_metapage(rmp); | 1374 | release_metapage(rmp); |
1374 | return -EDQUOT; | 1375 | return rc; |
1375 | } | 1376 | } |
1376 | 1377 | ||
1377 | jfs_info("dtSplitPage: ip:0x%p smp:0x%p rmp:0x%p", ip, smp, rmp); | 1378 | jfs_info("dtSplitPage: ip:0x%p smp:0x%p rmp:0x%p", ip, smp, rmp); |
@@ -1892,6 +1893,7 @@ static int dtSplitRoot(tid_t tid, | |||
1892 | struct dt_lock *dtlck; | 1893 | struct dt_lock *dtlck; |
1893 | struct tlock *tlck; | 1894 | struct tlock *tlck; |
1894 | struct lv *lv; | 1895 | struct lv *lv; |
1896 | int rc; | ||
1895 | 1897 | ||
1896 | /* get split root page */ | 1898 | /* get split root page */ |
1897 | smp = split->mp; | 1899 | smp = split->mp; |
@@ -1916,9 +1918,10 @@ static int dtSplitRoot(tid_t tid, | |||
1916 | rp = rmp->data; | 1918 | rp = rmp->data; |
1917 | 1919 | ||
1918 | /* Allocate blocks to quota. */ | 1920 | /* Allocate blocks to quota. */ |
1919 | if (vfs_dq_alloc_block(ip, lengthPXD(pxd))) { | 1921 | rc = dquot_alloc_block(ip, lengthPXD(pxd)); |
1922 | if (rc) { | ||
1920 | release_metapage(rmp); | 1923 | release_metapage(rmp); |
1921 | return -EDQUOT; | 1924 | return rc; |
1922 | } | 1925 | } |
1923 | 1926 | ||
1924 | BT_MARK_DIRTY(rmp, ip); | 1927 | BT_MARK_DIRTY(rmp, ip); |
@@ -2287,7 +2290,7 @@ static int dtDeleteUp(tid_t tid, struct inode *ip, | |||
2287 | xlen = lengthPXD(&fp->header.self); | 2290 | xlen = lengthPXD(&fp->header.self); |
2288 | 2291 | ||
2289 | /* Free quota allocation. */ | 2292 | /* Free quota allocation. */ |
2290 | vfs_dq_free_block(ip, xlen); | 2293 | dquot_free_block(ip, xlen); |
2291 | 2294 | ||
2292 | /* free/invalidate its buffer page */ | 2295 | /* free/invalidate its buffer page */ |
2293 | discard_metapage(fmp); | 2296 | discard_metapage(fmp); |
@@ -2363,7 +2366,7 @@ static int dtDeleteUp(tid_t tid, struct inode *ip, | |||
2363 | xlen = lengthPXD(&p->header.self); | 2366 | xlen = lengthPXD(&p->header.self); |
2364 | 2367 | ||
2365 | /* Free quota allocation */ | 2368 | /* Free quota allocation */ |
2366 | vfs_dq_free_block(ip, xlen); | 2369 | dquot_free_block(ip, xlen); |
2367 | 2370 | ||
2368 | /* free/invalidate its buffer page */ | 2371 | /* free/invalidate its buffer page */ |
2369 | discard_metapage(mp); | 2372 | discard_metapage(mp); |
diff --git a/fs/jfs/jfs_extent.c b/fs/jfs/jfs_extent.c index 41d6045dbeb0..5d3bbd10f8db 100644 --- a/fs/jfs/jfs_extent.c +++ b/fs/jfs/jfs_extent.c | |||
@@ -141,10 +141,11 @@ extAlloc(struct inode *ip, s64 xlen, s64 pno, xad_t * xp, bool abnr) | |||
141 | } | 141 | } |
142 | 142 | ||
143 | /* Allocate blocks to quota. */ | 143 | /* Allocate blocks to quota. */ |
144 | if (vfs_dq_alloc_block(ip, nxlen)) { | 144 | rc = dquot_alloc_block(ip, nxlen); |
145 | if (rc) { | ||
145 | dbFree(ip, nxaddr, (s64) nxlen); | 146 | dbFree(ip, nxaddr, (s64) nxlen); |
146 | mutex_unlock(&JFS_IP(ip)->commit_mutex); | 147 | mutex_unlock(&JFS_IP(ip)->commit_mutex); |
147 | return -EDQUOT; | 148 | return rc; |
148 | } | 149 | } |
149 | 150 | ||
150 | /* determine the value of the extent flag */ | 151 | /* determine the value of the extent flag */ |
@@ -164,7 +165,7 @@ extAlloc(struct inode *ip, s64 xlen, s64 pno, xad_t * xp, bool abnr) | |||
164 | */ | 165 | */ |
165 | if (rc) { | 166 | if (rc) { |
166 | dbFree(ip, nxaddr, nxlen); | 167 | dbFree(ip, nxaddr, nxlen); |
167 | vfs_dq_free_block(ip, nxlen); | 168 | dquot_free_block(ip, nxlen); |
168 | mutex_unlock(&JFS_IP(ip)->commit_mutex); | 169 | mutex_unlock(&JFS_IP(ip)->commit_mutex); |
169 | return (rc); | 170 | return (rc); |
170 | } | 171 | } |
@@ -256,10 +257,11 @@ int extRealloc(struct inode *ip, s64 nxlen, xad_t * xp, bool abnr) | |||
256 | goto exit; | 257 | goto exit; |
257 | 258 | ||
258 | /* Allocat blocks to quota. */ | 259 | /* Allocat blocks to quota. */ |
259 | if (vfs_dq_alloc_block(ip, nxlen)) { | 260 | rc = dquot_alloc_block(ip, nxlen); |
261 | if (rc) { | ||
260 | dbFree(ip, nxaddr, (s64) nxlen); | 262 | dbFree(ip, nxaddr, (s64) nxlen); |
261 | mutex_unlock(&JFS_IP(ip)->commit_mutex); | 263 | mutex_unlock(&JFS_IP(ip)->commit_mutex); |
262 | return -EDQUOT; | 264 | return rc; |
263 | } | 265 | } |
264 | 266 | ||
265 | delta = nxlen - xlen; | 267 | delta = nxlen - xlen; |
@@ -297,7 +299,7 @@ int extRealloc(struct inode *ip, s64 nxlen, xad_t * xp, bool abnr) | |||
297 | /* extend the extent */ | 299 | /* extend the extent */ |
298 | if ((rc = xtExtend(0, ip, xoff + xlen, (int) nextend, 0))) { | 300 | if ((rc = xtExtend(0, ip, xoff + xlen, (int) nextend, 0))) { |
299 | dbFree(ip, xaddr + xlen, delta); | 301 | dbFree(ip, xaddr + xlen, delta); |
300 | vfs_dq_free_block(ip, nxlen); | 302 | dquot_free_block(ip, nxlen); |
301 | goto exit; | 303 | goto exit; |
302 | } | 304 | } |
303 | } else { | 305 | } else { |
@@ -308,7 +310,7 @@ int extRealloc(struct inode *ip, s64 nxlen, xad_t * xp, bool abnr) | |||
308 | */ | 310 | */ |
309 | if ((rc = xtTailgate(0, ip, xoff, (int) ntail, nxaddr, 0))) { | 311 | if ((rc = xtTailgate(0, ip, xoff, (int) ntail, nxaddr, 0))) { |
310 | dbFree(ip, nxaddr, nxlen); | 312 | dbFree(ip, nxaddr, nxlen); |
311 | vfs_dq_free_block(ip, nxlen); | 313 | dquot_free_block(ip, nxlen); |
312 | goto exit; | 314 | goto exit; |
313 | } | 315 | } |
314 | } | 316 | } |
diff --git a/fs/jfs/jfs_imap.c b/fs/jfs/jfs_imap.c index 0fc30407f039..f8332dc8eeb2 100644 --- a/fs/jfs/jfs_imap.c +++ b/fs/jfs/jfs_imap.c | |||
@@ -45,6 +45,7 @@ | |||
45 | #include <linux/buffer_head.h> | 45 | #include <linux/buffer_head.h> |
46 | #include <linux/pagemap.h> | 46 | #include <linux/pagemap.h> |
47 | #include <linux/quotaops.h> | 47 | #include <linux/quotaops.h> |
48 | #include <linux/slab.h> | ||
48 | 49 | ||
49 | #include "jfs_incore.h" | 50 | #include "jfs_incore.h" |
50 | #include "jfs_inode.h" | 51 | #include "jfs_inode.h" |
diff --git a/fs/jfs/jfs_inode.c b/fs/jfs/jfs_inode.c index dc0e02159ac9..829921b67765 100644 --- a/fs/jfs/jfs_inode.c +++ b/fs/jfs/jfs_inode.c | |||
@@ -116,10 +116,10 @@ struct inode *ialloc(struct inode *parent, umode_t mode) | |||
116 | /* | 116 | /* |
117 | * Allocate inode to quota. | 117 | * Allocate inode to quota. |
118 | */ | 118 | */ |
119 | if (vfs_dq_alloc_inode(inode)) { | 119 | dquot_initialize(inode); |
120 | rc = -EDQUOT; | 120 | rc = dquot_alloc_inode(inode); |
121 | if (rc) | ||
121 | goto fail_drop; | 122 | goto fail_drop; |
122 | } | ||
123 | 123 | ||
124 | inode->i_mode = mode; | 124 | inode->i_mode = mode; |
125 | /* inherit flags from parent */ | 125 | /* inherit flags from parent */ |
@@ -162,7 +162,7 @@ struct inode *ialloc(struct inode *parent, umode_t mode) | |||
162 | return inode; | 162 | return inode; |
163 | 163 | ||
164 | fail_drop: | 164 | fail_drop: |
165 | vfs_dq_drop(inode); | 165 | dquot_drop(inode); |
166 | inode->i_flags |= S_NOQUOTA; | 166 | inode->i_flags |= S_NOQUOTA; |
167 | fail_unlock: | 167 | fail_unlock: |
168 | inode->i_nlink = 0; | 168 | inode->i_nlink = 0; |
diff --git a/fs/jfs/jfs_inode.h b/fs/jfs/jfs_inode.h index 1eff7db34d63..9e6bda30a6e8 100644 --- a/fs/jfs/jfs_inode.h +++ b/fs/jfs/jfs_inode.h | |||
@@ -26,7 +26,7 @@ extern long jfs_ioctl(struct file *, unsigned int, unsigned long); | |||
26 | extern long jfs_compat_ioctl(struct file *, unsigned int, unsigned long); | 26 | extern long jfs_compat_ioctl(struct file *, unsigned int, unsigned long); |
27 | extern struct inode *jfs_iget(struct super_block *, unsigned long); | 27 | extern struct inode *jfs_iget(struct super_block *, unsigned long); |
28 | extern int jfs_commit_inode(struct inode *, int); | 28 | extern int jfs_commit_inode(struct inode *, int); |
29 | extern int jfs_write_inode(struct inode*, int); | 29 | extern int jfs_write_inode(struct inode *, struct writeback_control *); |
30 | extern void jfs_delete_inode(struct inode *); | 30 | extern void jfs_delete_inode(struct inode *); |
31 | extern void jfs_dirty_inode(struct inode *); | 31 | extern void jfs_dirty_inode(struct inode *); |
32 | extern void jfs_truncate(struct inode *); | 32 | extern void jfs_truncate(struct inode *); |
@@ -40,6 +40,7 @@ extern struct dentry *jfs_fh_to_parent(struct super_block *sb, struct fid *fid, | |||
40 | int fh_len, int fh_type); | 40 | int fh_len, int fh_type); |
41 | extern void jfs_set_inode_flags(struct inode *); | 41 | extern void jfs_set_inode_flags(struct inode *); |
42 | extern int jfs_get_block(struct inode *, sector_t, struct buffer_head *, int); | 42 | extern int jfs_get_block(struct inode *, sector_t, struct buffer_head *, int); |
43 | extern int jfs_setattr(struct dentry *, struct iattr *); | ||
43 | 44 | ||
44 | extern const struct address_space_operations jfs_aops; | 45 | extern const struct address_space_operations jfs_aops; |
45 | extern const struct inode_operations jfs_dir_inode_operations; | 46 | extern const struct inode_operations jfs_dir_inode_operations; |
@@ -47,5 +48,6 @@ extern const struct file_operations jfs_dir_operations; | |||
47 | extern const struct inode_operations jfs_file_inode_operations; | 48 | extern const struct inode_operations jfs_file_inode_operations; |
48 | extern const struct file_operations jfs_file_operations; | 49 | extern const struct file_operations jfs_file_operations; |
49 | extern const struct inode_operations jfs_symlink_inode_operations; | 50 | extern const struct inode_operations jfs_symlink_inode_operations; |
51 | extern const struct inode_operations jfs_fast_symlink_inode_operations; | ||
50 | extern const struct dentry_operations jfs_ci_dentry_operations; | 52 | extern const struct dentry_operations jfs_ci_dentry_operations; |
51 | #endif /* _H_JFS_INODE */ | 53 | #endif /* _H_JFS_INODE */ |
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c index 335c4de6552d..c51af2a14516 100644 --- a/fs/jfs/jfs_logmgr.c +++ b/fs/jfs/jfs_logmgr.c | |||
@@ -70,6 +70,7 @@ | |||
70 | #include <linux/delay.h> | 70 | #include <linux/delay.h> |
71 | #include <linux/mutex.h> | 71 | #include <linux/mutex.h> |
72 | #include <linux/seq_file.h> | 72 | #include <linux/seq_file.h> |
73 | #include <linux/slab.h> | ||
73 | #include "jfs_incore.h" | 74 | #include "jfs_incore.h" |
74 | #include "jfs_filsys.h" | 75 | #include "jfs_filsys.h" |
75 | #include "jfs_metapage.h" | 76 | #include "jfs_metapage.h" |
diff --git a/fs/jfs/jfs_metapage.c b/fs/jfs/jfs_metapage.c index 07b6c5dfb4b6..48b44bd8267b 100644 --- a/fs/jfs/jfs_metapage.c +++ b/fs/jfs/jfs_metapage.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/mm.h> | 21 | #include <linux/mm.h> |
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | #include <linux/bio.h> | 23 | #include <linux/bio.h> |
24 | #include <linux/slab.h> | ||
24 | #include <linux/init.h> | 25 | #include <linux/init.h> |
25 | #include <linux/buffer_head.h> | 26 | #include <linux/buffer_head.h> |
26 | #include <linux/mempool.h> | 27 | #include <linux/mempool.h> |
diff --git a/fs/jfs/jfs_txnmgr.c b/fs/jfs/jfs_txnmgr.c index f26e4d03ada5..d945ea76b445 100644 --- a/fs/jfs/jfs_txnmgr.c +++ b/fs/jfs/jfs_txnmgr.c | |||
@@ -1292,7 +1292,7 @@ int txCommit(tid_t tid, /* transaction identifier */ | |||
1292 | */ | 1292 | */ |
1293 | /* | 1293 | /* |
1294 | * I believe this code is no longer needed. Splitting I_LOCK | 1294 | * I believe this code is no longer needed. Splitting I_LOCK |
1295 | * into two bits, I_LOCK and I_SYNC should prevent this | 1295 | * into two bits, I_NEW and I_SYNC should prevent this |
1296 | * deadlock as well. But since I don't have a JFS testload | 1296 | * deadlock as well. But since I don't have a JFS testload |
1297 | * to verify this, only a trivial s/I_LOCK/I_SYNC/ was done. | 1297 | * to verify this, only a trivial s/I_LOCK/I_SYNC/ was done. |
1298 | * Joern | 1298 | * Joern |
diff --git a/fs/jfs/jfs_unicode.h b/fs/jfs/jfs_unicode.h index 3fbb3a225590..8f0f02cb6ca6 100644 --- a/fs/jfs/jfs_unicode.h +++ b/fs/jfs/jfs_unicode.h | |||
@@ -19,6 +19,7 @@ | |||
19 | #ifndef _H_JFS_UNICODE | 19 | #ifndef _H_JFS_UNICODE |
20 | #define _H_JFS_UNICODE | 20 | #define _H_JFS_UNICODE |
21 | 21 | ||
22 | #include <linux/slab.h> | ||
22 | #include <asm/byteorder.h> | 23 | #include <asm/byteorder.h> |
23 | #include "jfs_types.h" | 24 | #include "jfs_types.h" |
24 | 25 | ||
diff --git a/fs/jfs/jfs_xtree.c b/fs/jfs/jfs_xtree.c index d654a6458648..6c50871e6220 100644 --- a/fs/jfs/jfs_xtree.c +++ b/fs/jfs/jfs_xtree.c | |||
@@ -585,10 +585,10 @@ int xtInsert(tid_t tid, /* transaction id */ | |||
585 | hint = addressXAD(xad) + lengthXAD(xad) - 1; | 585 | hint = addressXAD(xad) + lengthXAD(xad) - 1; |
586 | } else | 586 | } else |
587 | hint = 0; | 587 | hint = 0; |
588 | if ((rc = vfs_dq_alloc_block(ip, xlen))) | 588 | if ((rc = dquot_alloc_block(ip, xlen))) |
589 | goto out; | 589 | goto out; |
590 | if ((rc = dbAlloc(ip, hint, (s64) xlen, &xaddr))) { | 590 | if ((rc = dbAlloc(ip, hint, (s64) xlen, &xaddr))) { |
591 | vfs_dq_free_block(ip, xlen); | 591 | dquot_free_block(ip, xlen); |
592 | goto out; | 592 | goto out; |
593 | } | 593 | } |
594 | } | 594 | } |
@@ -617,7 +617,7 @@ int xtInsert(tid_t tid, /* transaction id */ | |||
617 | /* undo data extent allocation */ | 617 | /* undo data extent allocation */ |
618 | if (*xaddrp == 0) { | 618 | if (*xaddrp == 0) { |
619 | dbFree(ip, xaddr, (s64) xlen); | 619 | dbFree(ip, xaddr, (s64) xlen); |
620 | vfs_dq_free_block(ip, xlen); | 620 | dquot_free_block(ip, xlen); |
621 | } | 621 | } |
622 | return rc; | 622 | return rc; |
623 | } | 623 | } |
@@ -985,10 +985,9 @@ xtSplitPage(tid_t tid, struct inode *ip, | |||
985 | rbn = addressPXD(pxd); | 985 | rbn = addressPXD(pxd); |
986 | 986 | ||
987 | /* Allocate blocks to quota. */ | 987 | /* Allocate blocks to quota. */ |
988 | if (vfs_dq_alloc_block(ip, lengthPXD(pxd))) { | 988 | rc = dquot_alloc_block(ip, lengthPXD(pxd)); |
989 | rc = -EDQUOT; | 989 | if (rc) |
990 | goto clean_up; | 990 | goto clean_up; |
991 | } | ||
992 | 991 | ||
993 | quota_allocation += lengthPXD(pxd); | 992 | quota_allocation += lengthPXD(pxd); |
994 | 993 | ||
@@ -1195,7 +1194,7 @@ xtSplitPage(tid_t tid, struct inode *ip, | |||
1195 | 1194 | ||
1196 | /* Rollback quota allocation. */ | 1195 | /* Rollback quota allocation. */ |
1197 | if (quota_allocation) | 1196 | if (quota_allocation) |
1198 | vfs_dq_free_block(ip, quota_allocation); | 1197 | dquot_free_block(ip, quota_allocation); |
1199 | 1198 | ||
1200 | return (rc); | 1199 | return (rc); |
1201 | } | 1200 | } |
@@ -1235,6 +1234,7 @@ xtSplitRoot(tid_t tid, | |||
1235 | struct pxdlist *pxdlist; | 1234 | struct pxdlist *pxdlist; |
1236 | struct tlock *tlck; | 1235 | struct tlock *tlck; |
1237 | struct xtlock *xtlck; | 1236 | struct xtlock *xtlck; |
1237 | int rc; | ||
1238 | 1238 | ||
1239 | sp = &JFS_IP(ip)->i_xtroot; | 1239 | sp = &JFS_IP(ip)->i_xtroot; |
1240 | 1240 | ||
@@ -1252,9 +1252,10 @@ xtSplitRoot(tid_t tid, | |||
1252 | return -EIO; | 1252 | return -EIO; |
1253 | 1253 | ||
1254 | /* Allocate blocks to quota. */ | 1254 | /* Allocate blocks to quota. */ |
1255 | if (vfs_dq_alloc_block(ip, lengthPXD(pxd))) { | 1255 | rc = dquot_alloc_block(ip, lengthPXD(pxd)); |
1256 | if (rc) { | ||
1256 | release_metapage(rmp); | 1257 | release_metapage(rmp); |
1257 | return -EDQUOT; | 1258 | return rc; |
1258 | } | 1259 | } |
1259 | 1260 | ||
1260 | jfs_info("xtSplitRoot: ip:0x%p rmp:0x%p", ip, rmp); | 1261 | jfs_info("xtSplitRoot: ip:0x%p rmp:0x%p", ip, rmp); |
@@ -3680,7 +3681,7 @@ s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int flag) | |||
3680 | ip->i_size = newsize; | 3681 | ip->i_size = newsize; |
3681 | 3682 | ||
3682 | /* update quota allocation to reflect freed blocks */ | 3683 | /* update quota allocation to reflect freed blocks */ |
3683 | vfs_dq_free_block(ip, nfreed); | 3684 | dquot_free_block(ip, nfreed); |
3684 | 3685 | ||
3685 | /* | 3686 | /* |
3686 | * free tlock of invalidated pages | 3687 | * free tlock of invalidated pages |
diff --git a/fs/jfs/namei.c b/fs/jfs/namei.c index c79a4270f083..a9cf8e8675be 100644 --- a/fs/jfs/namei.c +++ b/fs/jfs/namei.c | |||
@@ -85,6 +85,8 @@ 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 | dquot_initialize(dip); | ||
89 | |||
88 | /* | 90 | /* |
89 | * search parent directory for entry/freespace | 91 | * search parent directory for entry/freespace |
90 | * (dtSearch() returns parent directory page pinned) | 92 | * (dtSearch() returns parent directory page pinned) |
@@ -215,6 +217,8 @@ static int jfs_mkdir(struct inode *dip, struct dentry *dentry, int mode) | |||
215 | 217 | ||
216 | 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); |
217 | 219 | ||
220 | dquot_initialize(dip); | ||
221 | |||
218 | /* link count overflow on parent directory ? */ | 222 | /* link count overflow on parent directory ? */ |
219 | if (dip->i_nlink == JFS_LINK_MAX) { | 223 | if (dip->i_nlink == JFS_LINK_MAX) { |
220 | rc = -EMLINK; | 224 | rc = -EMLINK; |
@@ -356,7 +360,8 @@ static int jfs_rmdir(struct inode *dip, struct dentry *dentry) | |||
356 | 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); |
357 | 361 | ||
358 | /* Init inode for quota operations. */ | 362 | /* Init inode for quota operations. */ |
359 | vfs_dq_init(ip); | 363 | dquot_initialize(dip); |
364 | dquot_initialize(ip); | ||
360 | 365 | ||
361 | /* directory must be empty to be removed */ | 366 | /* directory must be empty to be removed */ |
362 | if (!dtEmpty(ip)) { | 367 | if (!dtEmpty(ip)) { |
@@ -483,7 +488,8 @@ static int jfs_unlink(struct inode *dip, struct dentry *dentry) | |||
483 | 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); |
484 | 489 | ||
485 | /* Init inode for quota operations. */ | 490 | /* Init inode for quota operations. */ |
486 | vfs_dq_init(ip); | 491 | dquot_initialize(dip); |
492 | dquot_initialize(ip); | ||
487 | 493 | ||
488 | if ((rc = get_UCSname(&dname, dentry))) | 494 | if ((rc = get_UCSname(&dname, dentry))) |
489 | goto out; | 495 | goto out; |
@@ -805,6 +811,8 @@ static int jfs_link(struct dentry *old_dentry, | |||
805 | if (ip->i_nlink == 0) | 811 | if (ip->i_nlink == 0) |
806 | return -ENOENT; | 812 | return -ENOENT; |
807 | 813 | ||
814 | dquot_initialize(dir); | ||
815 | |||
808 | tid = txBegin(ip->i_sb, 0); | 816 | tid = txBegin(ip->i_sb, 0); |
809 | 817 | ||
810 | mutex_lock_nested(&JFS_IP(dir)->commit_mutex, COMMIT_MUTEX_PARENT); | 818 | mutex_lock_nested(&JFS_IP(dir)->commit_mutex, COMMIT_MUTEX_PARENT); |
@@ -896,6 +904,8 @@ static int jfs_symlink(struct inode *dip, struct dentry *dentry, | |||
896 | 904 | ||
897 | jfs_info("jfs_symlink: dip:0x%p name:%s", dip, name); | 905 | jfs_info("jfs_symlink: dip:0x%p name:%s", dip, name); |
898 | 906 | ||
907 | dquot_initialize(dip); | ||
908 | |||
899 | ssize = strlen(name) + 1; | 909 | ssize = strlen(name) + 1; |
900 | 910 | ||
901 | /* | 911 | /* |
@@ -946,7 +956,7 @@ static int jfs_symlink(struct inode *dip, struct dentry *dentry, | |||
946 | */ | 956 | */ |
947 | 957 | ||
948 | if (ssize <= IDATASIZE) { | 958 | if (ssize <= IDATASIZE) { |
949 | ip->i_op = &jfs_symlink_inode_operations; | 959 | ip->i_op = &jfs_fast_symlink_inode_operations; |
950 | 960 | ||
951 | i_fastsymlink = JFS_IP(ip)->i_inline; | 961 | i_fastsymlink = JFS_IP(ip)->i_inline; |
952 | memcpy(i_fastsymlink, name, ssize); | 962 | memcpy(i_fastsymlink, name, ssize); |
@@ -968,7 +978,7 @@ static int jfs_symlink(struct inode *dip, struct dentry *dentry, | |||
968 | else { | 978 | else { |
969 | jfs_info("jfs_symlink: allocate extent ip:0x%p", ip); | 979 | jfs_info("jfs_symlink: allocate extent ip:0x%p", ip); |
970 | 980 | ||
971 | ip->i_op = &page_symlink_inode_operations; | 981 | ip->i_op = &jfs_symlink_inode_operations; |
972 | ip->i_mapping->a_ops = &jfs_aops; | 982 | ip->i_mapping->a_ops = &jfs_aops; |
973 | 983 | ||
974 | /* | 984 | /* |
@@ -1087,6 +1097,9 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1087 | jfs_info("jfs_rename: %s %s", old_dentry->d_name.name, | 1097 | jfs_info("jfs_rename: %s %s", old_dentry->d_name.name, |
1088 | new_dentry->d_name.name); | 1098 | new_dentry->d_name.name); |
1089 | 1099 | ||
1100 | dquot_initialize(old_dir); | ||
1101 | dquot_initialize(new_dir); | ||
1102 | |||
1090 | old_ip = old_dentry->d_inode; | 1103 | old_ip = old_dentry->d_inode; |
1091 | new_ip = new_dentry->d_inode; | 1104 | new_ip = new_dentry->d_inode; |
1092 | 1105 | ||
@@ -1136,7 +1149,7 @@ static int jfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
1136 | } else if (new_ip) { | 1149 | } else if (new_ip) { |
1137 | IWRITE_LOCK(new_ip, RDWRLOCK_NORMAL); | 1150 | IWRITE_LOCK(new_ip, RDWRLOCK_NORMAL); |
1138 | /* Init inode for quota operations. */ | 1151 | /* Init inode for quota operations. */ |
1139 | vfs_dq_init(new_ip); | 1152 | dquot_initialize(new_ip); |
1140 | } | 1153 | } |
1141 | 1154 | ||
1142 | /* | 1155 | /* |
@@ -1360,6 +1373,8 @@ static int jfs_mknod(struct inode *dir, struct dentry *dentry, | |||
1360 | 1373 | ||
1361 | jfs_info("jfs_mknod: %s", dentry->d_name.name); | 1374 | jfs_info("jfs_mknod: %s", dentry->d_name.name); |
1362 | 1375 | ||
1376 | dquot_initialize(dir); | ||
1377 | |||
1363 | if ((rc = get_UCSname(&dname, dentry))) | 1378 | if ((rc = get_UCSname(&dname, dentry))) |
1364 | goto out; | 1379 | goto out; |
1365 | 1380 | ||
@@ -1541,8 +1556,8 @@ const struct inode_operations jfs_dir_inode_operations = { | |||
1541 | .getxattr = jfs_getxattr, | 1556 | .getxattr = jfs_getxattr, |
1542 | .listxattr = jfs_listxattr, | 1557 | .listxattr = jfs_listxattr, |
1543 | .removexattr = jfs_removexattr, | 1558 | .removexattr = jfs_removexattr, |
1544 | #ifdef CONFIG_JFS_POSIX_ACL | ||
1545 | .setattr = jfs_setattr, | 1559 | .setattr = jfs_setattr, |
1560 | #ifdef CONFIG_JFS_POSIX_ACL | ||
1546 | .check_acl = jfs_check_acl, | 1561 | .check_acl = jfs_check_acl, |
1547 | #endif | 1562 | #endif |
1548 | }; | 1563 | }; |
diff --git a/fs/jfs/resize.c b/fs/jfs/resize.c index 7f24a0bb08ca..1aba0039f1c9 100644 --- a/fs/jfs/resize.c +++ b/fs/jfs/resize.c | |||
@@ -81,6 +81,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize) | |||
81 | struct inode *iplist[1]; | 81 | struct inode *iplist[1]; |
82 | struct jfs_superblock *j_sb, *j_sb2; | 82 | struct jfs_superblock *j_sb, *j_sb2; |
83 | uint old_agsize; | 83 | uint old_agsize; |
84 | int agsizechanged = 0; | ||
84 | struct buffer_head *bh, *bh2; | 85 | struct buffer_head *bh, *bh2; |
85 | 86 | ||
86 | /* If the volume hasn't grown, get out now */ | 87 | /* If the volume hasn't grown, get out now */ |
@@ -333,6 +334,9 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize) | |||
333 | */ | 334 | */ |
334 | if ((rc = dbExtendFS(ipbmap, XAddress, nblocks))) | 335 | if ((rc = dbExtendFS(ipbmap, XAddress, nblocks))) |
335 | goto error_out; | 336 | goto error_out; |
337 | |||
338 | agsizechanged |= (bmp->db_agsize != old_agsize); | ||
339 | |||
336 | /* | 340 | /* |
337 | * the map now has extended to cover additional nblocks: | 341 | * the map now has extended to cover additional nblocks: |
338 | * dn_mapsize = oldMapsize + nblocks; | 342 | * dn_mapsize = oldMapsize + nblocks; |
@@ -432,7 +436,7 @@ int jfs_extendfs(struct super_block *sb, s64 newLVSize, int newLogSize) | |||
432 | * will correctly identify the new ag); | 436 | * will correctly identify the new ag); |
433 | */ | 437 | */ |
434 | /* if new AG size the same as old AG size, done! */ | 438 | /* if new AG size the same as old AG size, done! */ |
435 | if (bmp->db_agsize != old_agsize) { | 439 | if (agsizechanged) { |
436 | if ((rc = diExtendFS(ipimap, ipbmap))) | 440 | if ((rc = diExtendFS(ipimap, ipbmap))) |
437 | goto error_out; | 441 | goto error_out; |
438 | 442 | ||
diff --git a/fs/jfs/super.c b/fs/jfs/super.c index 2234c73fc577..b66832ac33ac 100644 --- a/fs/jfs/super.c +++ b/fs/jfs/super.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/buffer_head.h> | 30 | #include <linux/buffer_head.h> |
31 | #include <linux/exportfs.h> | 31 | #include <linux/exportfs.h> |
32 | #include <linux/crc32.h> | 32 | #include <linux/crc32.h> |
33 | #include <linux/slab.h> | ||
33 | #include <asm/uaccess.h> | 34 | #include <asm/uaccess.h> |
34 | #include <linux/seq_file.h> | 35 | #include <linux/seq_file.h> |
35 | #include <linux/smp_lock.h> | 36 | #include <linux/smp_lock.h> |
@@ -131,6 +132,11 @@ static void jfs_destroy_inode(struct inode *inode) | |||
131 | kmem_cache_free(jfs_inode_cachep, ji); | 132 | kmem_cache_free(jfs_inode_cachep, ji); |
132 | } | 133 | } |
133 | 134 | ||
135 | static void jfs_clear_inode(struct inode *inode) | ||
136 | { | ||
137 | dquot_drop(inode); | ||
138 | } | ||
139 | |||
134 | static int jfs_statfs(struct dentry *dentry, struct kstatfs *buf) | 140 | static int jfs_statfs(struct dentry *dentry, struct kstatfs *buf) |
135 | { | 141 | { |
136 | struct jfs_sb_info *sbi = JFS_SBI(dentry->d_sb); | 142 | struct jfs_sb_info *sbi = JFS_SBI(dentry->d_sb); |
@@ -440,10 +446,8 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) | |||
440 | /* initialize the mount flag and determine the default error handler */ | 446 | /* initialize the mount flag and determine the default error handler */ |
441 | flag = JFS_ERR_REMOUNT_RO; | 447 | flag = JFS_ERR_REMOUNT_RO; |
442 | 448 | ||
443 | if (!parse_options((char *) data, sb, &newLVSize, &flag)) { | 449 | if (!parse_options((char *) data, sb, &newLVSize, &flag)) |
444 | kfree(sbi); | 450 | goto out_kfree; |
445 | return -EINVAL; | ||
446 | } | ||
447 | sbi->flag = flag; | 451 | sbi->flag = flag; |
448 | 452 | ||
449 | #ifdef CONFIG_JFS_POSIX_ACL | 453 | #ifdef CONFIG_JFS_POSIX_ACL |
@@ -452,7 +456,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) | |||
452 | 456 | ||
453 | if (newLVSize) { | 457 | if (newLVSize) { |
454 | printk(KERN_ERR "resize option for remount only\n"); | 458 | printk(KERN_ERR "resize option for remount only\n"); |
455 | return -EINVAL; | 459 | goto out_kfree; |
456 | } | 460 | } |
457 | 461 | ||
458 | /* | 462 | /* |
@@ -472,7 +476,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) | |||
472 | inode = new_inode(sb); | 476 | inode = new_inode(sb); |
473 | if (inode == NULL) { | 477 | if (inode == NULL) { |
474 | ret = -ENOMEM; | 478 | ret = -ENOMEM; |
475 | goto out_kfree; | 479 | goto out_unload; |
476 | } | 480 | } |
477 | inode->i_ino = 0; | 481 | inode->i_ino = 0; |
478 | inode->i_nlink = 1; | 482 | inode->i_nlink = 1; |
@@ -524,7 +528,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent) | |||
524 | * Page cache is indexed by long. | 528 | * Page cache is indexed by long. |
525 | * I would use MAX_LFS_FILESIZE, but it's only half as big | 529 | * I would use MAX_LFS_FILESIZE, but it's only half as big |
526 | */ | 530 | */ |
527 | sb->s_maxbytes = min(((u64) PAGE_CACHE_SIZE << 32) - 1, sb->s_maxbytes); | 531 | sb->s_maxbytes = min(((u64) PAGE_CACHE_SIZE << 32) - 1, (u64)sb->s_maxbytes); |
528 | #endif | 532 | #endif |
529 | sb->s_time_gran = 1; | 533 | sb->s_time_gran = 1; |
530 | return 0; | 534 | return 0; |
@@ -544,9 +548,10 @@ out_mount_failed: | |||
544 | make_bad_inode(sbi->direct_inode); | 548 | make_bad_inode(sbi->direct_inode); |
545 | iput(sbi->direct_inode); | 549 | iput(sbi->direct_inode); |
546 | sbi->direct_inode = NULL; | 550 | sbi->direct_inode = NULL; |
547 | out_kfree: | 551 | out_unload: |
548 | if (sbi->nls_tab) | 552 | if (sbi->nls_tab) |
549 | unload_nls(sbi->nls_tab); | 553 | unload_nls(sbi->nls_tab); |
554 | out_kfree: | ||
550 | kfree(sbi); | 555 | kfree(sbi); |
551 | return ret; | 556 | return ret; |
552 | } | 557 | } |
@@ -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/jfs/symlink.c b/fs/jfs/symlink.c index 4af1a05aad0a..205b946d8e0d 100644 --- a/fs/jfs/symlink.c +++ b/fs/jfs/symlink.c | |||
@@ -29,9 +29,21 @@ static void *jfs_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
29 | return NULL; | 29 | return NULL; |
30 | } | 30 | } |
31 | 31 | ||
32 | const struct inode_operations jfs_symlink_inode_operations = { | 32 | const struct inode_operations jfs_fast_symlink_inode_operations = { |
33 | .readlink = generic_readlink, | 33 | .readlink = generic_readlink, |
34 | .follow_link = jfs_follow_link, | 34 | .follow_link = jfs_follow_link, |
35 | .setattr = jfs_setattr, | ||
36 | .setxattr = jfs_setxattr, | ||
37 | .getxattr = jfs_getxattr, | ||
38 | .listxattr = jfs_listxattr, | ||
39 | .removexattr = jfs_removexattr, | ||
40 | }; | ||
41 | |||
42 | const struct inode_operations jfs_symlink_inode_operations = { | ||
43 | .readlink = generic_readlink, | ||
44 | .follow_link = page_follow_link_light, | ||
45 | .put_link = page_put_link, | ||
46 | .setattr = jfs_setattr, | ||
35 | .setxattr = jfs_setxattr, | 47 | .setxattr = jfs_setxattr, |
36 | .getxattr = jfs_getxattr, | 48 | .getxattr = jfs_getxattr, |
37 | .listxattr = jfs_listxattr, | 49 | .listxattr = jfs_listxattr, |
diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index fad364548bc9..fa96bbb26343 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/fs.h> | 21 | #include <linux/fs.h> |
22 | #include <linux/xattr.h> | 22 | #include <linux/xattr.h> |
23 | #include <linux/posix_acl_xattr.h> | 23 | #include <linux/posix_acl_xattr.h> |
24 | #include <linux/slab.h> | ||
24 | #include <linux/quotaops.h> | 25 | #include <linux/quotaops.h> |
25 | #include <linux/security.h> | 26 | #include <linux/security.h> |
26 | #include "jfs_incore.h" | 27 | #include "jfs_incore.h" |
@@ -260,14 +261,14 @@ static int ea_write(struct inode *ip, struct jfs_ea_list *ealist, int size, | |||
260 | nblocks = (size + (sb->s_blocksize - 1)) >> sb->s_blocksize_bits; | 261 | nblocks = (size + (sb->s_blocksize - 1)) >> sb->s_blocksize_bits; |
261 | 262 | ||
262 | /* Allocate new blocks to quota. */ | 263 | /* Allocate new blocks to quota. */ |
263 | if (vfs_dq_alloc_block(ip, nblocks)) { | 264 | rc = dquot_alloc_block(ip, nblocks); |
264 | return -EDQUOT; | 265 | if (rc) |
265 | } | 266 | return rc; |
266 | 267 | ||
267 | rc = dbAlloc(ip, INOHINT(ip), nblocks, &blkno); | 268 | rc = dbAlloc(ip, INOHINT(ip), nblocks, &blkno); |
268 | if (rc) { | 269 | if (rc) { |
269 | /*Rollback quota allocation. */ | 270 | /*Rollback quota allocation. */ |
270 | vfs_dq_free_block(ip, nblocks); | 271 | dquot_free_block(ip, nblocks); |
271 | return rc; | 272 | return rc; |
272 | } | 273 | } |
273 | 274 | ||
@@ -332,7 +333,7 @@ static int ea_write(struct inode *ip, struct jfs_ea_list *ealist, int size, | |||
332 | 333 | ||
333 | failed: | 334 | failed: |
334 | /* Rollback quota allocation. */ | 335 | /* Rollback quota allocation. */ |
335 | vfs_dq_free_block(ip, nblocks); | 336 | dquot_free_block(ip, nblocks); |
336 | 337 | ||
337 | dbFree(ip, blkno, nblocks); | 338 | dbFree(ip, blkno, nblocks); |
338 | return rc; | 339 | return rc; |
@@ -538,7 +539,8 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size) | |||
538 | 539 | ||
539 | if (blocks_needed > current_blocks) { | 540 | if (blocks_needed > current_blocks) { |
540 | /* Allocate new blocks to quota. */ | 541 | /* Allocate new blocks to quota. */ |
541 | if (vfs_dq_alloc_block(inode, blocks_needed)) | 542 | rc = dquot_alloc_block(inode, blocks_needed); |
543 | if (rc) | ||
542 | return -EDQUOT; | 544 | return -EDQUOT; |
543 | 545 | ||
544 | quota_allocation = blocks_needed; | 546 | quota_allocation = blocks_needed; |
@@ -602,7 +604,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size) | |||
602 | clean_up: | 604 | clean_up: |
603 | /* Rollback quota allocation */ | 605 | /* Rollback quota allocation */ |
604 | if (quota_allocation) | 606 | if (quota_allocation) |
605 | vfs_dq_free_block(inode, quota_allocation); | 607 | dquot_free_block(inode, quota_allocation); |
606 | 608 | ||
607 | return (rc); | 609 | return (rc); |
608 | } | 610 | } |
@@ -677,7 +679,7 @@ static int ea_put(tid_t tid, struct inode *inode, struct ea_buffer *ea_buf, | |||
677 | 679 | ||
678 | /* If old blocks exist, they must be removed from quota allocation. */ | 680 | /* If old blocks exist, they must be removed from quota allocation. */ |
679 | if (old_blocks) | 681 | if (old_blocks) |
680 | vfs_dq_free_block(inode, old_blocks); | 682 | dquot_free_block(inode, old_blocks); |
681 | 683 | ||
682 | inode->i_ctime = CURRENT_TIME; | 684 | inode->i_ctime = CURRENT_TIME; |
683 | 685 | ||