aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nilfs2/segment.c
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:54:26 -0500
commite3154e9748f0f337e9f6ff9dc7d7bf24d426bd1a (patch)
treeac2a3f3dca6189b8a608571c49da66386fd1bdec /fs/nilfs2/segment.c
parentf7545144c2e3d280139260df934043e0a6ccce6f (diff)
nilfs2: get rid of nilfs_sb_info structure
This directly uses sb->s_fs_info to keep a nilfs filesystem object and fully removes the intermediate nilfs_sb_info structure. With this change, the hierarchy of on-memory structures of nilfs will be simplified as follows: Before: super_block -> nilfs_sb_info -> the_nilfs -> cptree --+-> nilfs_root (current file system) +-> nilfs_root (snapshot A) +-> nilfs_root (snapshot B) : -> nilfs_sc_info (log writer structure) After: super_block -> the_nilfs -> cptree --+-> nilfs_root (current file system) +-> nilfs_root (snapshot A) +-> nilfs_root (snapshot B) : -> nilfs_sc_info (log writer structure) The reason why we didn't design so from the beginning is because the initial shape also differed from the above. The early hierachy was composed of "per-mount-point" super_block -> nilfs_sb_info pairs and a shared nilfs object. On the kernel 2.6.37, it was changed to the current shape in order to unify super block instances into one per device, and this cleanup became applicable as the result. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Diffstat (limited to 'fs/nilfs2/segment.c')
-rw-r--r--fs/nilfs2/segment.c47
1 files changed, 24 insertions, 23 deletions
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c
index 90e3130303a3..afe4f2183454 100644
--- a/fs/nilfs2/segment.c
+++ b/fs/nilfs2/segment.c
@@ -191,7 +191,7 @@ int nilfs_transaction_begin(struct super_block *sb,
191 191
192 vfs_check_frozen(sb, SB_FREEZE_WRITE); 192 vfs_check_frozen(sb, SB_FREEZE_WRITE);
193 193
194 nilfs = NILFS_SB(sb)->s_nilfs; 194 nilfs = sb->s_fs_info;
195 down_read(&nilfs->ns_segctor_sem); 195 down_read(&nilfs->ns_segctor_sem);
196 if (vacancy_check && nilfs_near_disk_full(nilfs)) { 196 if (vacancy_check && nilfs_near_disk_full(nilfs)) {
197 up_read(&nilfs->ns_segctor_sem); 197 up_read(&nilfs->ns_segctor_sem);
@@ -222,7 +222,7 @@ int nilfs_transaction_begin(struct super_block *sb,
222int nilfs_transaction_commit(struct super_block *sb) 222int nilfs_transaction_commit(struct super_block *sb)
223{ 223{
224 struct nilfs_transaction_info *ti = current->journal_info; 224 struct nilfs_transaction_info *ti = current->journal_info;
225 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 225 struct the_nilfs *nilfs = sb->s_fs_info;
226 int err = 0; 226 int err = 0;
227 227
228 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC); 228 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC);
@@ -252,13 +252,14 @@ int nilfs_transaction_commit(struct super_block *sb)
252void nilfs_transaction_abort(struct super_block *sb) 252void nilfs_transaction_abort(struct super_block *sb)
253{ 253{
254 struct nilfs_transaction_info *ti = current->journal_info; 254 struct nilfs_transaction_info *ti = current->journal_info;
255 struct the_nilfs *nilfs = sb->s_fs_info;
255 256
256 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC); 257 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC);
257 if (ti->ti_count > 0) { 258 if (ti->ti_count > 0) {
258 ti->ti_count--; 259 ti->ti_count--;
259 return; 260 return;
260 } 261 }
261 up_read(&NILFS_SB(sb)->s_nilfs->ns_segctor_sem); 262 up_read(&nilfs->ns_segctor_sem);
262 263
263 current->journal_info = ti->ti_save; 264 current->journal_info = ti->ti_save;
264 if (ti->ti_flags & NILFS_TI_DYNAMIC_ALLOC) 265 if (ti->ti_flags & NILFS_TI_DYNAMIC_ALLOC)
@@ -267,7 +268,7 @@ void nilfs_transaction_abort(struct super_block *sb)
267 268
268void nilfs_relax_pressure_in_lock(struct super_block *sb) 269void nilfs_relax_pressure_in_lock(struct super_block *sb)
269{ 270{
270 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 271 struct the_nilfs *nilfs = sb->s_fs_info;
271 struct nilfs_sc_info *sci = nilfs->ns_writer; 272 struct nilfs_sc_info *sci = nilfs->ns_writer;
272 273
273 if (!sci || !sci->sc_flush_request) 274 if (!sci || !sci->sc_flush_request)
@@ -293,7 +294,7 @@ static void nilfs_transaction_lock(struct super_block *sb,
293 int gcflag) 294 int gcflag)
294{ 295{
295 struct nilfs_transaction_info *cur_ti = current->journal_info; 296 struct nilfs_transaction_info *cur_ti = current->journal_info;
296 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 297 struct the_nilfs *nilfs = sb->s_fs_info;
297 struct nilfs_sc_info *sci = nilfs->ns_writer; 298 struct nilfs_sc_info *sci = nilfs->ns_writer;
298 299
299 WARN_ON(cur_ti); 300 WARN_ON(cur_ti);
@@ -321,7 +322,7 @@ static void nilfs_transaction_lock(struct super_block *sb,
321static void nilfs_transaction_unlock(struct super_block *sb) 322static void nilfs_transaction_unlock(struct super_block *sb)
322{ 323{
323 struct nilfs_transaction_info *ti = current->journal_info; 324 struct nilfs_transaction_info *ti = current->journal_info;
324 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 325 struct the_nilfs *nilfs = sb->s_fs_info;
325 326
326 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC); 327 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC);
327 BUG_ON(ti->ti_count > 0); 328 BUG_ON(ti->ti_count > 0);
@@ -770,7 +771,7 @@ static int nilfs_segctor_clean(struct nilfs_sc_info *sci)
770 771
771static int nilfs_segctor_confirm(struct nilfs_sc_info *sci) 772static int nilfs_segctor_confirm(struct nilfs_sc_info *sci)
772{ 773{
773 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 774 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
774 int ret = 0; 775 int ret = 0;
775 776
776 if (nilfs_test_metadata_dirty(nilfs, sci->sc_root)) 777 if (nilfs_test_metadata_dirty(nilfs, sci->sc_root))
@@ -786,7 +787,7 @@ static int nilfs_segctor_confirm(struct nilfs_sc_info *sci)
786 787
787static void nilfs_segctor_clear_metadata_dirty(struct nilfs_sc_info *sci) 788static void nilfs_segctor_clear_metadata_dirty(struct nilfs_sc_info *sci)
788{ 789{
789 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 790 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
790 791
791 nilfs_mdt_clear_dirty(sci->sc_root->ifile); 792 nilfs_mdt_clear_dirty(sci->sc_root->ifile);
792 nilfs_mdt_clear_dirty(nilfs->ns_cpfile); 793 nilfs_mdt_clear_dirty(nilfs->ns_cpfile);
@@ -796,7 +797,7 @@ static void nilfs_segctor_clear_metadata_dirty(struct nilfs_sc_info *sci)
796 797
797static int nilfs_segctor_create_checkpoint(struct nilfs_sc_info *sci) 798static int nilfs_segctor_create_checkpoint(struct nilfs_sc_info *sci)
798{ 799{
799 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 800 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
800 struct buffer_head *bh_cp; 801 struct buffer_head *bh_cp;
801 struct nilfs_checkpoint *raw_cp; 802 struct nilfs_checkpoint *raw_cp;
802 int err; 803 int err;
@@ -820,7 +821,7 @@ static int nilfs_segctor_create_checkpoint(struct nilfs_sc_info *sci)
820 821
821static int nilfs_segctor_fill_in_checkpoint(struct nilfs_sc_info *sci) 822static int nilfs_segctor_fill_in_checkpoint(struct nilfs_sc_info *sci)
822{ 823{
823 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 824 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
824 struct buffer_head *bh_cp; 825 struct buffer_head *bh_cp;
825 struct nilfs_checkpoint *raw_cp; 826 struct nilfs_checkpoint *raw_cp;
826 int err; 827 int err;
@@ -1044,7 +1045,7 @@ static int nilfs_segctor_scan_file_dsync(struct nilfs_sc_info *sci,
1044 1045
1045static int nilfs_segctor_collect_blocks(struct nilfs_sc_info *sci, int mode) 1046static int nilfs_segctor_collect_blocks(struct nilfs_sc_info *sci, int mode)
1046{ 1047{
1047 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 1048 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
1048 struct list_head *head; 1049 struct list_head *head;
1049 struct nilfs_inode_info *ii; 1050 struct nilfs_inode_info *ii;
1050 size_t ndone; 1051 size_t ndone;
@@ -1853,7 +1854,7 @@ static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci)
1853{ 1854{
1854 struct nilfs_segment_buffer *segbuf; 1855 struct nilfs_segment_buffer *segbuf;
1855 struct page *bd_page = NULL, *fs_page = NULL; 1856 struct page *bd_page = NULL, *fs_page = NULL;
1856 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 1857 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
1857 int update_sr = false; 1858 int update_sr = false;
1858 1859
1859 list_for_each_entry(segbuf, &sci->sc_write_logs, sb_list) { 1860 list_for_each_entry(segbuf, &sci->sc_write_logs, sb_list) {
@@ -2024,7 +2025,7 @@ static void nilfs_segctor_drop_written_files(struct nilfs_sc_info *sci,
2024 */ 2025 */
2025static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode) 2026static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode)
2026{ 2027{
2027 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 2028 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
2028 struct page *failed_page; 2029 struct page *failed_page;
2029 int err; 2030 int err;
2030 2031
@@ -2162,7 +2163,7 @@ static void nilfs_segctor_do_flush(struct nilfs_sc_info *sci, int bn)
2162 */ 2163 */
2163void nilfs_flush_segment(struct super_block *sb, ino_t ino) 2164void nilfs_flush_segment(struct super_block *sb, ino_t ino)
2164{ 2165{
2165 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 2166 struct the_nilfs *nilfs = sb->s_fs_info;
2166 struct nilfs_sc_info *sci = nilfs->ns_writer; 2167 struct nilfs_sc_info *sci = nilfs->ns_writer;
2167 2168
2168 if (!sci || nilfs_doing_construction()) 2169 if (!sci || nilfs_doing_construction())
@@ -2252,7 +2253,7 @@ static void nilfs_segctor_wakeup(struct nilfs_sc_info *sci, int err)
2252 */ 2253 */
2253int nilfs_construct_segment(struct super_block *sb) 2254int nilfs_construct_segment(struct super_block *sb)
2254{ 2255{
2255 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 2256 struct the_nilfs *nilfs = sb->s_fs_info;
2256 struct nilfs_sc_info *sci = nilfs->ns_writer; 2257 struct nilfs_sc_info *sci = nilfs->ns_writer;
2257 struct nilfs_transaction_info *ti; 2258 struct nilfs_transaction_info *ti;
2258 int err; 2259 int err;
@@ -2290,7 +2291,7 @@ int nilfs_construct_segment(struct super_block *sb)
2290int nilfs_construct_dsync_segment(struct super_block *sb, struct inode *inode, 2291int nilfs_construct_dsync_segment(struct super_block *sb, struct inode *inode,
2291 loff_t start, loff_t end) 2292 loff_t start, loff_t end)
2292{ 2293{
2293 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 2294 struct the_nilfs *nilfs = sb->s_fs_info;
2294 struct nilfs_sc_info *sci = nilfs->ns_writer; 2295 struct nilfs_sc_info *sci = nilfs->ns_writer;
2295 struct nilfs_inode_info *ii; 2296 struct nilfs_inode_info *ii;
2296 struct nilfs_transaction_info ti; 2297 struct nilfs_transaction_info ti;
@@ -2381,7 +2382,7 @@ static void nilfs_segctor_notify(struct nilfs_sc_info *sci, int mode, int err)
2381 */ 2382 */
2382static int nilfs_segctor_construct(struct nilfs_sc_info *sci, int mode) 2383static int nilfs_segctor_construct(struct nilfs_sc_info *sci, int mode)
2383{ 2384{
2384 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 2385 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
2385 struct nilfs_super_block **sbp; 2386 struct nilfs_super_block **sbp;
2386 int err = 0; 2387 int err = 0;
2387 2388
@@ -2436,7 +2437,7 @@ nilfs_remove_written_gcinodes(struct the_nilfs *nilfs, struct list_head *head)
2436int nilfs_clean_segments(struct super_block *sb, struct nilfs_argv *argv, 2437int nilfs_clean_segments(struct super_block *sb, struct nilfs_argv *argv,
2437 void **kbufs) 2438 void **kbufs)
2438{ 2439{
2439 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 2440 struct the_nilfs *nilfs = sb->s_fs_info;
2440 struct nilfs_sc_info *sci = nilfs->ns_writer; 2441 struct nilfs_sc_info *sci = nilfs->ns_writer;
2441 struct nilfs_transaction_info ti; 2442 struct nilfs_transaction_info ti;
2442 int err; 2443 int err;
@@ -2552,7 +2553,7 @@ static int nilfs_segctor_flush_mode(struct nilfs_sc_info *sci)
2552static int nilfs_segctor_thread(void *arg) 2553static int nilfs_segctor_thread(void *arg)
2553{ 2554{
2554 struct nilfs_sc_info *sci = (struct nilfs_sc_info *)arg; 2555 struct nilfs_sc_info *sci = (struct nilfs_sc_info *)arg;
2555 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 2556 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
2556 int timeout = 0; 2557 int timeout = 0;
2557 2558
2558 sci->sc_timer.data = (unsigned long)current; 2559 sci->sc_timer.data = (unsigned long)current;
@@ -2666,7 +2667,7 @@ static void nilfs_segctor_kill_thread(struct nilfs_sc_info *sci)
2666static struct nilfs_sc_info *nilfs_segctor_new(struct super_block *sb, 2667static struct nilfs_sc_info *nilfs_segctor_new(struct super_block *sb,
2667 struct nilfs_root *root) 2668 struct nilfs_root *root)
2668{ 2669{
2669 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 2670 struct the_nilfs *nilfs = sb->s_fs_info;
2670 struct nilfs_sc_info *sci; 2671 struct nilfs_sc_info *sci;
2671 2672
2672 sci = kzalloc(sizeof(*sci), GFP_KERNEL); 2673 sci = kzalloc(sizeof(*sci), GFP_KERNEL);
@@ -2726,7 +2727,7 @@ static void nilfs_segctor_write_out(struct nilfs_sc_info *sci)
2726 */ 2727 */
2727static void nilfs_segctor_destroy(struct nilfs_sc_info *sci) 2728static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
2728{ 2729{
2729 struct the_nilfs *nilfs = NILFS_SB(sci->sc_super)->s_nilfs; 2730 struct the_nilfs *nilfs = sci->sc_super->s_fs_info;
2730 int flag; 2731 int flag;
2731 2732
2732 up_write(&nilfs->ns_segctor_sem); 2733 up_write(&nilfs->ns_segctor_sem);
@@ -2774,7 +2775,7 @@ static void nilfs_segctor_destroy(struct nilfs_sc_info *sci)
2774 */ 2775 */
2775int nilfs_attach_log_writer(struct super_block *sb, struct nilfs_root *root) 2776int nilfs_attach_log_writer(struct super_block *sb, struct nilfs_root *root)
2776{ 2777{
2777 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 2778 struct the_nilfs *nilfs = sb->s_fs_info;
2778 int err; 2779 int err;
2779 2780
2780 if (nilfs->ns_writer) { 2781 if (nilfs->ns_writer) {
@@ -2807,7 +2808,7 @@ int nilfs_attach_log_writer(struct super_block *sb, struct nilfs_root *root)
2807 */ 2808 */
2808void nilfs_detach_log_writer(struct super_block *sb) 2809void nilfs_detach_log_writer(struct super_block *sb)
2809{ 2810{
2810 struct the_nilfs *nilfs = NILFS_SB(sb)->s_nilfs; 2811 struct the_nilfs *nilfs = sb->s_fs_info;
2811 LIST_HEAD(garbage_list); 2812 LIST_HEAD(garbage_list);
2812 2813
2813 down_write(&nilfs->ns_segctor_sem); 2814 down_write(&nilfs->ns_segctor_sem);