diff options
author | Christoph Hellwig <hch@infradead.org> | 2010-03-03 09:05:00 -0500 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2010-03-04 18:20:28 -0500 |
commit | 5dd4056db84387975140ff2568eaa0406f07985e (patch) | |
tree | 03c26d7f6e3367b167bfeeb1a01654c6619573f4 /fs/jfs | |
parent | 49792c806d0bfd53afc789dcdf50dc9bed2c5b83 (diff) |
dquot: cleanup space allocation / freeing routines
Get rid of the alloc_space, free_space, reserve_space, claim_space and
release_rsv dquot operations - they are always called from the filesystem
and if a filesystem really needs their own (which none currently does)
it can just call into it's own routine directly.
Move shared logic into the common __dquot_alloc_space,
dquot_claim_space_nodirty and __dquot_free_space low-level methods,
and rationalize the wrappers around it to move as much as possible
code into the common block for CONFIG_QUOTA vs not. Also rename
all these helpers to be named dquot_* instead of vfs_dq_*.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/jfs')
-rw-r--r-- | fs/jfs/jfs_dtree.c | 28 | ||||
-rw-r--r-- | fs/jfs/jfs_extent.c | 16 | ||||
-rw-r--r-- | fs/jfs/jfs_xtree.c | 21 | ||||
-rw-r--r-- | fs/jfs/xattr.c | 17 |
4 files changed, 44 insertions, 38 deletions
diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c index 925871e9887b..0e4623be70ce 100644 --- a/fs/jfs/jfs_dtree.c +++ b/fs/jfs/jfs_dtree.c | |||
@@ -381,10 +381,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 | 381 | * It's time to move the inline table to an external |
382 | * page and begin to build the xtree | 382 | * page and begin to build the xtree |
383 | */ | 383 | */ |
384 | if (vfs_dq_alloc_block(ip, sbi->nbperpage)) | 384 | if (dquot_alloc_block(ip, sbi->nbperpage)) |
385 | goto clean_up; | 385 | goto clean_up; |
386 | if (dbAlloc(ip, 0, sbi->nbperpage, &xaddr)) { | 386 | if (dbAlloc(ip, 0, sbi->nbperpage, &xaddr)) { |
387 | vfs_dq_free_block(ip, sbi->nbperpage); | 387 | dquot_free_block(ip, sbi->nbperpage); |
388 | goto clean_up; | 388 | goto clean_up; |
389 | } | 389 | } |
390 | 390 | ||
@@ -408,7 +408,7 @@ static u32 add_index(tid_t tid, struct inode *ip, s64 bn, int slot) | |||
408 | memcpy(&jfs_ip->i_dirtable, temp_table, | 408 | memcpy(&jfs_ip->i_dirtable, temp_table, |
409 | sizeof (temp_table)); | 409 | sizeof (temp_table)); |
410 | dbFree(ip, xaddr, sbi->nbperpage); | 410 | dbFree(ip, xaddr, sbi->nbperpage); |
411 | vfs_dq_free_block(ip, sbi->nbperpage); | 411 | dquot_free_block(ip, sbi->nbperpage); |
412 | goto clean_up; | 412 | goto clean_up; |
413 | } | 413 | } |
414 | ip->i_size = PSIZE; | 414 | ip->i_size = PSIZE; |
@@ -1027,10 +1027,9 @@ static int dtSplitUp(tid_t tid, | |||
1027 | n = xlen; | 1027 | n = xlen; |
1028 | 1028 | ||
1029 | /* Allocate blocks to quota. */ | 1029 | /* Allocate blocks to quota. */ |
1030 | if (vfs_dq_alloc_block(ip, n)) { | 1030 | rc = dquot_alloc_block(ip, n); |
1031 | rc = -EDQUOT; | 1031 | if (rc) |
1032 | goto extendOut; | 1032 | goto extendOut; |
1033 | } | ||
1034 | quota_allocation += n; | 1033 | quota_allocation += n; |
1035 | 1034 | ||
1036 | if ((rc = dbReAlloc(sbi->ipbmap, xaddr, (s64) xlen, | 1035 | if ((rc = dbReAlloc(sbi->ipbmap, xaddr, (s64) xlen, |
@@ -1308,7 +1307,7 @@ static int dtSplitUp(tid_t tid, | |||
1308 | 1307 | ||
1309 | /* Rollback quota allocation */ | 1308 | /* Rollback quota allocation */ |
1310 | if (rc && quota_allocation) | 1309 | if (rc && quota_allocation) |
1311 | vfs_dq_free_block(ip, quota_allocation); | 1310 | dquot_free_block(ip, quota_allocation); |
1312 | 1311 | ||
1313 | dtSplitUp_Exit: | 1312 | dtSplitUp_Exit: |
1314 | 1313 | ||
@@ -1369,9 +1368,10 @@ static int dtSplitPage(tid_t tid, struct inode *ip, struct dtsplit * split, | |||
1369 | return -EIO; | 1368 | return -EIO; |
1370 | 1369 | ||
1371 | /* Allocate blocks to quota. */ | 1370 | /* Allocate blocks to quota. */ |
1372 | if (vfs_dq_alloc_block(ip, lengthPXD(pxd))) { | 1371 | rc = dquot_alloc_block(ip, lengthPXD(pxd)); |
1372 | if (rc) { | ||
1373 | release_metapage(rmp); | 1373 | release_metapage(rmp); |
1374 | return -EDQUOT; | 1374 | return rc; |
1375 | } | 1375 | } |
1376 | 1376 | ||
1377 | jfs_info("dtSplitPage: ip:0x%p smp:0x%p rmp:0x%p", ip, smp, rmp); | 1377 | jfs_info("dtSplitPage: ip:0x%p smp:0x%p rmp:0x%p", ip, smp, rmp); |
@@ -1892,6 +1892,7 @@ static int dtSplitRoot(tid_t tid, | |||
1892 | struct dt_lock *dtlck; | 1892 | struct dt_lock *dtlck; |
1893 | struct tlock *tlck; | 1893 | struct tlock *tlck; |
1894 | struct lv *lv; | 1894 | struct lv *lv; |
1895 | int rc; | ||
1895 | 1896 | ||
1896 | /* get split root page */ | 1897 | /* get split root page */ |
1897 | smp = split->mp; | 1898 | smp = split->mp; |
@@ -1916,9 +1917,10 @@ static int dtSplitRoot(tid_t tid, | |||
1916 | rp = rmp->data; | 1917 | rp = rmp->data; |
1917 | 1918 | ||
1918 | /* Allocate blocks to quota. */ | 1919 | /* Allocate blocks to quota. */ |
1919 | if (vfs_dq_alloc_block(ip, lengthPXD(pxd))) { | 1920 | rc = dquot_alloc_block(ip, lengthPXD(pxd)); |
1921 | if (rc) { | ||
1920 | release_metapage(rmp); | 1922 | release_metapage(rmp); |
1921 | return -EDQUOT; | 1923 | return rc; |
1922 | } | 1924 | } |
1923 | 1925 | ||
1924 | BT_MARK_DIRTY(rmp, ip); | 1926 | BT_MARK_DIRTY(rmp, ip); |
@@ -2287,7 +2289,7 @@ static int dtDeleteUp(tid_t tid, struct inode *ip, | |||
2287 | xlen = lengthPXD(&fp->header.self); | 2289 | xlen = lengthPXD(&fp->header.self); |
2288 | 2290 | ||
2289 | /* Free quota allocation. */ | 2291 | /* Free quota allocation. */ |
2290 | vfs_dq_free_block(ip, xlen); | 2292 | dquot_free_block(ip, xlen); |
2291 | 2293 | ||
2292 | /* free/invalidate its buffer page */ | 2294 | /* free/invalidate its buffer page */ |
2293 | discard_metapage(fmp); | 2295 | discard_metapage(fmp); |
@@ -2363,7 +2365,7 @@ static int dtDeleteUp(tid_t tid, struct inode *ip, | |||
2363 | xlen = lengthPXD(&p->header.self); | 2365 | xlen = lengthPXD(&p->header.self); |
2364 | 2366 | ||
2365 | /* Free quota allocation */ | 2367 | /* Free quota allocation */ |
2366 | vfs_dq_free_block(ip, xlen); | 2368 | dquot_free_block(ip, xlen); |
2367 | 2369 | ||
2368 | /* free/invalidate its buffer page */ | 2370 | /* free/invalidate its buffer page */ |
2369 | discard_metapage(mp); | 2371 | 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_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/xattr.c b/fs/jfs/xattr.c index fad364548bc9..1f594ab21895 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c | |||
@@ -260,14 +260,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; | 260 | nblocks = (size + (sb->s_blocksize - 1)) >> sb->s_blocksize_bits; |
261 | 261 | ||
262 | /* Allocate new blocks to quota. */ | 262 | /* Allocate new blocks to quota. */ |
263 | if (vfs_dq_alloc_block(ip, nblocks)) { | 263 | rc = dquot_alloc_block(ip, nblocks); |
264 | return -EDQUOT; | 264 | if (rc) |
265 | } | 265 | return rc; |
266 | 266 | ||
267 | rc = dbAlloc(ip, INOHINT(ip), nblocks, &blkno); | 267 | rc = dbAlloc(ip, INOHINT(ip), nblocks, &blkno); |
268 | if (rc) { | 268 | if (rc) { |
269 | /*Rollback quota allocation. */ | 269 | /*Rollback quota allocation. */ |
270 | vfs_dq_free_block(ip, nblocks); | 270 | dquot_free_block(ip, nblocks); |
271 | return rc; | 271 | return rc; |
272 | } | 272 | } |
273 | 273 | ||
@@ -332,7 +332,7 @@ static int ea_write(struct inode *ip, struct jfs_ea_list *ealist, int size, | |||
332 | 332 | ||
333 | failed: | 333 | failed: |
334 | /* Rollback quota allocation. */ | 334 | /* Rollback quota allocation. */ |
335 | vfs_dq_free_block(ip, nblocks); | 335 | dquot_free_block(ip, nblocks); |
336 | 336 | ||
337 | dbFree(ip, blkno, nblocks); | 337 | dbFree(ip, blkno, nblocks); |
338 | return rc; | 338 | return rc; |
@@ -538,7 +538,8 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size) | |||
538 | 538 | ||
539 | if (blocks_needed > current_blocks) { | 539 | if (blocks_needed > current_blocks) { |
540 | /* Allocate new blocks to quota. */ | 540 | /* Allocate new blocks to quota. */ |
541 | if (vfs_dq_alloc_block(inode, blocks_needed)) | 541 | rc = dquot_alloc_block(inode, blocks_needed); |
542 | if (rc) | ||
542 | return -EDQUOT; | 543 | return -EDQUOT; |
543 | 544 | ||
544 | quota_allocation = blocks_needed; | 545 | quota_allocation = blocks_needed; |
@@ -602,7 +603,7 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size) | |||
602 | clean_up: | 603 | clean_up: |
603 | /* Rollback quota allocation */ | 604 | /* Rollback quota allocation */ |
604 | if (quota_allocation) | 605 | if (quota_allocation) |
605 | vfs_dq_free_block(inode, quota_allocation); | 606 | dquot_free_block(inode, quota_allocation); |
606 | 607 | ||
607 | return (rc); | 608 | return (rc); |
608 | } | 609 | } |
@@ -677,7 +678,7 @@ static int ea_put(tid_t tid, struct inode *inode, struct ea_buffer *ea_buf, | |||
677 | 678 | ||
678 | /* If old blocks exist, they must be removed from quota allocation. */ | 679 | /* If old blocks exist, they must be removed from quota allocation. */ |
679 | if (old_blocks) | 680 | if (old_blocks) |
680 | vfs_dq_free_block(inode, old_blocks); | 681 | dquot_free_block(inode, old_blocks); |
681 | 682 | ||
682 | inode->i_ctime = CURRENT_TIME; | 683 | inode->i_ctime = CURRENT_TIME; |
683 | 684 | ||