diff options
-rw-r--r-- | fs/nilfs2/bmap.c | 11 | ||||
-rw-r--r-- | fs/nilfs2/bmap.h | 3 | ||||
-rw-r--r-- | fs/nilfs2/btree.c | 6 | ||||
-rw-r--r-- | fs/nilfs2/direct.c | 4 | ||||
-rw-r--r-- | fs/nilfs2/inode.c | 18 | ||||
-rw-r--r-- | fs/nilfs2/nilfs.h | 2 | ||||
-rw-r--r-- | include/linux/nilfs2_fs.h | 6 |
7 files changed, 29 insertions, 21 deletions
diff --git a/fs/nilfs2/bmap.c b/fs/nilfs2/bmap.c index 3ee67c67cc52..85447a2fab33 100644 --- a/fs/nilfs2/bmap.c +++ b/fs/nilfs2/bmap.c | |||
@@ -425,17 +425,6 @@ int nilfs_bmap_test_and_clear_dirty(struct nilfs_bmap *bmap) | |||
425 | /* | 425 | /* |
426 | * Internal use only | 426 | * Internal use only |
427 | */ | 427 | */ |
428 | |||
429 | void nilfs_bmap_add_blocks(const struct nilfs_bmap *bmap, int n) | ||
430 | { | ||
431 | inode_add_bytes(bmap->b_inode, (1 << bmap->b_inode->i_blkbits) * n); | ||
432 | } | ||
433 | |||
434 | void nilfs_bmap_sub_blocks(const struct nilfs_bmap *bmap, int n) | ||
435 | { | ||
436 | inode_sub_bytes(bmap->b_inode, (1 << bmap->b_inode->i_blkbits) * n); | ||
437 | } | ||
438 | |||
439 | __u64 nilfs_bmap_data_get_key(const struct nilfs_bmap *bmap, | 428 | __u64 nilfs_bmap_data_get_key(const struct nilfs_bmap *bmap, |
440 | const struct buffer_head *bh) | 429 | const struct buffer_head *bh) |
441 | { | 430 | { |
diff --git a/fs/nilfs2/bmap.h b/fs/nilfs2/bmap.h index bde1c0aa2e15..40d9f453d31c 100644 --- a/fs/nilfs2/bmap.h +++ b/fs/nilfs2/bmap.h | |||
@@ -240,9 +240,6 @@ __u64 nilfs_bmap_data_get_key(const struct nilfs_bmap *, | |||
240 | __u64 nilfs_bmap_find_target_seq(const struct nilfs_bmap *, __u64); | 240 | __u64 nilfs_bmap_find_target_seq(const struct nilfs_bmap *, __u64); |
241 | __u64 nilfs_bmap_find_target_in_group(const struct nilfs_bmap *); | 241 | __u64 nilfs_bmap_find_target_in_group(const struct nilfs_bmap *); |
242 | 242 | ||
243 | void nilfs_bmap_add_blocks(const struct nilfs_bmap *, int); | ||
244 | void nilfs_bmap_sub_blocks(const struct nilfs_bmap *, int); | ||
245 | |||
246 | 243 | ||
247 | /* Assume that bmap semaphore is locked. */ | 244 | /* Assume that bmap semaphore is locked. */ |
248 | static inline int nilfs_bmap_dirty(const struct nilfs_bmap *bmap) | 245 | static inline int nilfs_bmap_dirty(const struct nilfs_bmap *bmap) |
diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c index 300c2bc00c3f..d451ae0e0bf3 100644 --- a/fs/nilfs2/btree.c +++ b/fs/nilfs2/btree.c | |||
@@ -1174,7 +1174,7 @@ static int nilfs_btree_insert(struct nilfs_bmap *btree, __u64 key, __u64 ptr) | |||
1174 | if (ret < 0) | 1174 | if (ret < 0) |
1175 | goto out; | 1175 | goto out; |
1176 | nilfs_btree_commit_insert(btree, path, level, key, ptr); | 1176 | nilfs_btree_commit_insert(btree, path, level, key, ptr); |
1177 | nilfs_bmap_add_blocks(btree, stats.bs_nblocks); | 1177 | nilfs_inode_add_blocks(btree->b_inode, stats.bs_nblocks); |
1178 | 1178 | ||
1179 | out: | 1179 | out: |
1180 | nilfs_btree_free_path(path); | 1180 | nilfs_btree_free_path(path); |
@@ -1511,7 +1511,7 @@ static int nilfs_btree_delete(struct nilfs_bmap *btree, __u64 key) | |||
1511 | if (ret < 0) | 1511 | if (ret < 0) |
1512 | goto out; | 1512 | goto out; |
1513 | nilfs_btree_commit_delete(btree, path, level, dat); | 1513 | nilfs_btree_commit_delete(btree, path, level, dat); |
1514 | nilfs_bmap_sub_blocks(btree, stats.bs_nblocks); | 1514 | nilfs_inode_sub_blocks(btree->b_inode, stats.bs_nblocks); |
1515 | 1515 | ||
1516 | out: | 1516 | out: |
1517 | nilfs_btree_free_path(path); | 1517 | nilfs_btree_free_path(path); |
@@ -1776,7 +1776,7 @@ int nilfs_btree_convert_and_insert(struct nilfs_bmap *btree, | |||
1776 | return ret; | 1776 | return ret; |
1777 | nilfs_btree_commit_convert_and_insert(btree, key, ptr, keys, ptrs, n, | 1777 | nilfs_btree_commit_convert_and_insert(btree, key, ptr, keys, ptrs, n, |
1778 | di, ni, bh); | 1778 | di, ni, bh); |
1779 | nilfs_bmap_add_blocks(btree, stats.bs_nblocks); | 1779 | nilfs_inode_add_blocks(btree->b_inode, stats.bs_nblocks); |
1780 | return 0; | 1780 | return 0; |
1781 | } | 1781 | } |
1782 | 1782 | ||
diff --git a/fs/nilfs2/direct.c b/fs/nilfs2/direct.c index 324d80c57518..82f4865e86dd 100644 --- a/fs/nilfs2/direct.c +++ b/fs/nilfs2/direct.c | |||
@@ -146,7 +146,7 @@ static int nilfs_direct_insert(struct nilfs_bmap *bmap, __u64 key, __u64 ptr) | |||
146 | if (NILFS_BMAP_USE_VBN(bmap)) | 146 | if (NILFS_BMAP_USE_VBN(bmap)) |
147 | nilfs_bmap_set_target_v(bmap, key, req.bpr_ptr); | 147 | nilfs_bmap_set_target_v(bmap, key, req.bpr_ptr); |
148 | 148 | ||
149 | nilfs_bmap_add_blocks(bmap, 1); | 149 | nilfs_inode_add_blocks(bmap->b_inode, 1); |
150 | } | 150 | } |
151 | return ret; | 151 | return ret; |
152 | } | 152 | } |
@@ -168,7 +168,7 @@ static int nilfs_direct_delete(struct nilfs_bmap *bmap, __u64 key) | |||
168 | if (!ret) { | 168 | if (!ret) { |
169 | nilfs_bmap_commit_end_ptr(bmap, &req, dat); | 169 | nilfs_bmap_commit_end_ptr(bmap, &req, dat); |
170 | nilfs_direct_set_ptr(bmap, key, NILFS_BMAP_INVALID_PTR); | 170 | nilfs_direct_set_ptr(bmap, key, NILFS_BMAP_INVALID_PTR); |
171 | nilfs_bmap_sub_blocks(bmap, 1); | 171 | nilfs_inode_sub_blocks(bmap->b_inode, 1); |
172 | } | 172 | } |
173 | return ret; | 173 | return ret; |
174 | } | 174 | } |
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index 2534af8d2b5c..22a816ba3621 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c | |||
@@ -41,6 +41,24 @@ struct nilfs_iget_args { | |||
41 | int for_gc; | 41 | int for_gc; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | void nilfs_inode_add_blocks(struct inode *inode, int n) | ||
45 | { | ||
46 | struct nilfs_root *root = NILFS_I(inode)->i_root; | ||
47 | |||
48 | inode_add_bytes(inode, (1 << inode->i_blkbits) * n); | ||
49 | if (root) | ||
50 | atomic_add(n, &root->blocks_count); | ||
51 | } | ||
52 | |||
53 | void nilfs_inode_sub_blocks(struct inode *inode, int n) | ||
54 | { | ||
55 | struct nilfs_root *root = NILFS_I(inode)->i_root; | ||
56 | |||
57 | inode_sub_bytes(inode, (1 << inode->i_blkbits) * n); | ||
58 | if (root) | ||
59 | atomic_sub(n, &root->blocks_count); | ||
60 | } | ||
61 | |||
44 | /** | 62 | /** |
45 | * nilfs_get_block() - get a file block on the filesystem (callback function) | 63 | * nilfs_get_block() - get a file block on the filesystem (callback function) |
46 | * @inode - inode struct of the target file | 64 | * @inode - inode struct of the target file |
diff --git a/fs/nilfs2/nilfs.h b/fs/nilfs2/nilfs.h index 45b1fd1d0245..03ba4d88083f 100644 --- a/fs/nilfs2/nilfs.h +++ b/fs/nilfs2/nilfs.h | |||
@@ -251,6 +251,8 @@ int nilfs_ioctl_prepare_clean_segments(struct the_nilfs *, struct nilfs_argv *, | |||
251 | void **); | 251 | void **); |
252 | 252 | ||
253 | /* inode.c */ | 253 | /* inode.c */ |
254 | void nilfs_inode_add_blocks(struct inode *inode, int n); | ||
255 | void nilfs_inode_sub_blocks(struct inode *inode, int n); | ||
254 | extern struct inode *nilfs_new_inode(struct inode *, int); | 256 | extern struct inode *nilfs_new_inode(struct inode *, int); |
255 | extern void nilfs_free_inode(struct inode *); | 257 | extern void nilfs_free_inode(struct inode *); |
256 | extern int nilfs_get_block(struct inode *, sector_t, struct buffer_head *, int); | 258 | extern int nilfs_get_block(struct inode *, sector_t, struct buffer_head *, int); |
diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h index 3a65e5aa2d76..ae33ac2db62d 100644 --- a/include/linux/nilfs2_fs.h +++ b/include/linux/nilfs2_fs.h | |||
@@ -216,8 +216,10 @@ struct nilfs_super_block { | |||
216 | * If there is a bit set in the incompatible feature set that the kernel | 216 | * If there is a bit set in the incompatible feature set that the kernel |
217 | * doesn't know about, it should refuse to mount the filesystem. | 217 | * doesn't know about, it should refuse to mount the filesystem. |
218 | */ | 218 | */ |
219 | #define NILFS_FEATURE_COMPAT_RO_BLOCK_COUNT 0x00000001ULL | ||
220 | |||
219 | #define NILFS_FEATURE_COMPAT_SUPP 0ULL | 221 | #define NILFS_FEATURE_COMPAT_SUPP 0ULL |
220 | #define NILFS_FEATURE_COMPAT_RO_SUPP 0ULL | 222 | #define NILFS_FEATURE_COMPAT_RO_SUPP NILFS_FEATURE_COMPAT_RO_BLOCK_COUNT |
221 | #define NILFS_FEATURE_INCOMPAT_SUPP 0ULL | 223 | #define NILFS_FEATURE_INCOMPAT_SUPP 0ULL |
222 | 224 | ||
223 | /* | 225 | /* |
@@ -509,7 +511,7 @@ struct nilfs_checkpoint { | |||
509 | __le64 cp_create; | 511 | __le64 cp_create; |
510 | __le64 cp_nblk_inc; | 512 | __le64 cp_nblk_inc; |
511 | __le64 cp_inodes_count; | 513 | __le64 cp_inodes_count; |
512 | __le64 cp_blocks_count; /* Reserved (might be deleted) */ | 514 | __le64 cp_blocks_count; |
513 | 515 | ||
514 | /* Do not change the byte offset of ifile inode. | 516 | /* Do not change the byte offset of ifile inode. |
515 | To keep the compatibility of the disk format, | 517 | To keep the compatibility of the disk format, |