aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>2011-03-08 21:05:08 -0500
committerRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>2011-03-08 21:05:08 -0500
commit9b1fc4e4973469dd3fab27ba5d78eca1cd5c13fe (patch)
tree0f51872d41cbc1e43db2fafab0074c107dfce7e7
parent693dd321222f03b17668f88ceb0f7d518900191e (diff)
nilfs2: move next generation counter into nilfs object
Moves s_next_generation counter and a spinlock protecting it to nilfs object from nilfs_sb_info structure. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
-rw-r--r--fs/nilfs2/inode.c8
-rw-r--r--fs/nilfs2/sb.h4
-rw-r--r--fs/nilfs2/super.c11
-rw-r--r--fs/nilfs2/the_nilfs.c5
-rw-r--r--fs/nilfs2/the_nilfs.h6
5 files changed, 15 insertions, 19 deletions
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
index dd5d6d633ea1..7a3dbe4f229c 100644
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -295,7 +295,7 @@ const struct address_space_operations nilfs_aops = {
295struct inode *nilfs_new_inode(struct inode *dir, int mode) 295struct inode *nilfs_new_inode(struct inode *dir, int mode)
296{ 296{
297 struct super_block *sb = dir->i_sb; 297 struct super_block *sb = dir->i_sb;
298 struct nilfs_sb_info *sbi = NILFS_SB(sb); 298 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs;
299 struct inode *inode; 299 struct inode *inode;
300 struct nilfs_inode_info *ii; 300 struct nilfs_inode_info *ii;
301 struct nilfs_root *root; 301 struct nilfs_root *root;
@@ -340,9 +340,9 @@ struct inode *nilfs_new_inode(struct inode *dir, int mode)
340 /* ii->i_dir_acl = 0; */ 340 /* ii->i_dir_acl = 0; */
341 ii->i_dir_start_lookup = 0; 341 ii->i_dir_start_lookup = 0;
342 nilfs_set_inode_flags(inode); 342 nilfs_set_inode_flags(inode);
343 spin_lock(&sbi->s_next_gen_lock); 343 spin_lock(&nilfs->ns_next_gen_lock);
344 inode->i_generation = sbi->s_next_generation++; 344 inode->i_generation = nilfs->ns_next_generation++;
345 spin_unlock(&sbi->s_next_gen_lock); 345 spin_unlock(&nilfs->ns_next_gen_lock);
346 insert_inode_hash(inode); 346 insert_inode_hash(inode);
347 347
348 err = nilfs_init_acl(inode, dir); 348 err = nilfs_init_acl(inode, dir);
diff --git a/fs/nilfs2/sb.h b/fs/nilfs2/sb.h
index 3232e75fab75..6f190dfdc649 100644
--- a/fs/nilfs2/sb.h
+++ b/fs/nilfs2/sb.h
@@ -40,10 +40,6 @@ struct nilfs_sb_info {
40 40
41 /* Segment constructor */ 41 /* Segment constructor */
42 struct nilfs_sc_info *s_sc_info; /* segment constructor info */ 42 struct nilfs_sc_info *s_sc_info; /* segment constructor info */
43
44 /* Inode allocator */
45 spinlock_t s_next_gen_lock;
46 u32 s_next_generation;
47}; 43};
48 44
49static inline struct nilfs_sb_info *NILFS_SB(struct super_block *sb) 45static inline struct nilfs_sb_info *NILFS_SB(struct super_block *sb)
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
index 6dc8b3cad127..1368c4293c7f 100644
--- a/fs/nilfs2/super.c
+++ b/fs/nilfs2/super.c
@@ -43,7 +43,6 @@
43#include <linux/init.h> 43#include <linux/init.h>
44#include <linux/blkdev.h> 44#include <linux/blkdev.h>
45#include <linux/parser.h> 45#include <linux/parser.h>
46#include <linux/random.h>
47#include <linux/crc32.h> 46#include <linux/crc32.h>
48#include <linux/vfs.h> 47#include <linux/vfs.h>
49#include <linux/writeback.h> 48#include <linux/writeback.h>
@@ -943,16 +942,6 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent)
943 if (err) 942 if (err)
944 goto failed_nilfs; 943 goto failed_nilfs;
945 944
946 /*
947 * Following initialization is overlapped because
948 * nilfs_sb_info structure has been cleared at the beginning.
949 * But we reserve them to keep our interest and make ready
950 * for the future change.
951 */
952 get_random_bytes(&sbi->s_next_generation,
953 sizeof(sbi->s_next_generation));
954 spin_lock_init(&sbi->s_next_gen_lock);
955
956 sb->s_op = &nilfs_sops; 945 sb->s_op = &nilfs_sops;
957 sb->s_export_op = &nilfs_export_ops; 946 sb->s_export_op = &nilfs_export_ops;
958 sb->s_root = NULL; 947 sb->s_root = NULL;
diff --git a/fs/nilfs2/the_nilfs.c b/fs/nilfs2/the_nilfs.c
index 40239a932dec..1bf695e887a7 100644
--- a/fs/nilfs2/the_nilfs.c
+++ b/fs/nilfs2/the_nilfs.c
@@ -25,6 +25,7 @@
25#include <linux/slab.h> 25#include <linux/slab.h>
26#include <linux/blkdev.h> 26#include <linux/blkdev.h>
27#include <linux/backing-dev.h> 27#include <linux/backing-dev.h>
28#include <linux/random.h>
28#include <linux/crc32.h> 29#include <linux/crc32.h>
29#include "nilfs.h" 30#include "nilfs.h"
30#include "segment.h" 31#include "segment.h"
@@ -78,6 +79,7 @@ struct the_nilfs *alloc_nilfs(struct block_device *bdev)
78 INIT_LIST_HEAD(&nilfs->ns_dirty_files); 79 INIT_LIST_HEAD(&nilfs->ns_dirty_files);
79 INIT_LIST_HEAD(&nilfs->ns_gc_inodes); 80 INIT_LIST_HEAD(&nilfs->ns_gc_inodes);
80 spin_lock_init(&nilfs->ns_inode_lock); 81 spin_lock_init(&nilfs->ns_inode_lock);
82 spin_lock_init(&nilfs->ns_next_gen_lock);
81 spin_lock_init(&nilfs->ns_last_segment_lock); 83 spin_lock_init(&nilfs->ns_last_segment_lock);
82 nilfs->ns_cptree = RB_ROOT; 84 nilfs->ns_cptree = RB_ROOT;
83 spin_lock_init(&nilfs->ns_cptree_lock); 85 spin_lock_init(&nilfs->ns_cptree_lock);
@@ -593,6 +595,9 @@ int init_nilfs(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi, char *data)
593 nilfs->ns_blocksize_bits = sb->s_blocksize_bits; 595 nilfs->ns_blocksize_bits = sb->s_blocksize_bits;
594 nilfs->ns_blocksize = blocksize; 596 nilfs->ns_blocksize = blocksize;
595 597
598 get_random_bytes(&nilfs->ns_next_generation,
599 sizeof(nilfs->ns_next_generation));
600
596 err = nilfs_store_disk_layout(nilfs, sbp); 601 err = nilfs_store_disk_layout(nilfs, sbp);
597 if (err) 602 if (err)
598 goto failed_sbh; 603 goto failed_sbh;
diff --git a/fs/nilfs2/the_nilfs.h b/fs/nilfs2/the_nilfs.h
index 6106ec5ad89a..3ecc968f2123 100644
--- a/fs/nilfs2/the_nilfs.h
+++ b/fs/nilfs2/the_nilfs.h
@@ -74,6 +74,8 @@ enum {
74 * @ns_dirty_files: list of dirty files 74 * @ns_dirty_files: list of dirty files
75 * @ns_inode_lock: lock protecting @ns_dirty_files 75 * @ns_inode_lock: lock protecting @ns_dirty_files
76 * @ns_gc_inodes: dummy inodes to keep live blocks 76 * @ns_gc_inodes: dummy inodes to keep live blocks
77 * @ns_next_generation: next generation number for inodes
78 * @ns_next_gen_lock: lock protecting @ns_next_generation
77 * @ns_mount_opt: mount options 79 * @ns_mount_opt: mount options
78 * @ns_resuid: uid for reserved blocks 80 * @ns_resuid: uid for reserved blocks
79 * @ns_resgid: gid for reserved blocks 81 * @ns_resgid: gid for reserved blocks
@@ -159,6 +161,10 @@ struct the_nilfs {
159 /* GC inode list */ 161 /* GC inode list */
160 struct list_head ns_gc_inodes; 162 struct list_head ns_gc_inodes;
161 163
164 /* Inode allocator */
165 u32 ns_next_generation;
166 spinlock_t ns_next_gen_lock;
167
162 /* Mount options */ 168 /* Mount options */
163 unsigned long ns_mount_opt; 169 unsigned long ns_mount_opt;
164 170