1 /* 2 * segment.c - NILFS segment constructor. 3 * 4 * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19 * 20 * Written by Ryusuke Konishi <ryusuke@osrg.net> 21 * 22 */ 23 24 #include <linux/pagemap.h> 25 #include <linux/buffer_head.h> 26 #include <linux/writeback.h> 27 #include <linux/bio.h> 28 #include <linux/completion.h> 29 #include <linux/blkdev.h> 30 #include <linux/backing-dev.h> 31 #include <linux/freezer.h> 32 #include <linux/kthread.h> 33 #include <linux/crc32.h> 34 #include <linux/pagevec.h> 35 #include "nilfs.h" 36 #include "btnode.h" 37 #include "page.h" 38 #include "segment.h" 39 #include "sufile.h" 40 #include "cpfile.h" 41 #include "ifile.h" 42 #include "seglist.h" 43 #include "segbuf.h" 44 45 46 /* 47 * Segment constructor 48 */ 49 #define SC_N_INODEVEC 16 /* Size of locally allocated inode vector */ 50 51 #define SC_MAX_SEGDELTA 64 /* Upper limit of the number of segments 52 appended in collection retry loop */ 53 54 /* Construction mode */ 55 enum { 56 SC_LSEG_SR = 1, /* Make a logical segment having a super root */ 57 SC_LSEG_DSYNC, /* Flush data blocks of a given file and make 58 a logical segment without a super root */ 59 SC_FLUSH_FILE, /* Flush data files, leads to segment writes without 60 creating a checkpoint */ 61 SC_FLUSH_DAT, /* Flush DAT file. This also creates segments without 62 a checkpoint */ 63 }; 64 65 /* Stage numbers of dirty block collection */ 66 enum { 67 NILFS_ST_INIT = 0, 68 NILFS_ST_GC, /* Collecting dirty blocks for GC */ 69 NILFS_ST_FILE, 70 NILFS_ST_IFILE, 71 NILFS_ST_CPFILE, 72 NILFS_ST_SUFILE, 73 NILFS_ST_DAT, 74 NILFS_ST_SR, /* Super root */ 75 NILFS_ST_DSYNC, /* Data sync blocks */ 76 NILFS_ST_DONE, 77 }; 78 79 /* State flags of collection */ 80 #define NILFS_CF_NODE 0x0001 /* Collecting node blocks */ 81 #define NILFS_CF_IFILE_STARTED 0x0002 /* IFILE stage has started */ 82 #define NILFS_CF_HISTORY_MASK (NILFS_CF_IFILE_STARTED) 83 84 /* Operations depending on the construction mode and file type */ 85 struct nilfs_sc_operations { 86 int (*collect_data)(struct nilfs_sc_info *, struct buffer_head *, 87 struct inode *); 88 int (*collect_node)(struct nilfs_sc_info *, struct buffer_head *, 89 struct inode *); 90 int (*collect_bmap)(struct nilfs_sc_info *, struct buffer_head *, 91 struct inode *); 92 void (*write_data_binfo)(struct nilfs_sc_info *, 93 struct nilfs_segsum_pointer *, 94 union nilfs_binfo *); 95 void (*write_node_binfo)(struct nilfs_sc_info *, 96 struct nilfs_segsum_pointer *, 97 union nilfs_binfo *); 98 }; 99 100 /* 101 * Other definitions 102 */ 103 static void nilfs_segctor_start_timer(struct nilfs_sc_info *); 104 static void nilfs_segctor_do_flush(struct nilfs_sc_info *, int); 105 static void nilfs_segctor_do_immediate_flush(struct nilfs_sc_info *); 106 static void nilfs_dispose_list(struct nilfs_sb_info *, struct list_head *, 107 int); 108 109 #define nilfs_cnt32_gt(a, b) \ 110 (typecheck(__u32, a) && typecheck(__u32, b) && \ 111 ((__s32)(b) - (__s32)(a) < 0)) 112 #define nilfs_cnt32_ge(a, b) \ 113 (typecheck(__u32, a) && typecheck(__u32, b) && \ 114 ((__s32)(a) - (__s32)(b) >= 0)) 115 #define nilfs_cnt32_lt(a, b) nilfs_cnt32_gt(b, a) 116 #define nilfs_cnt32_le(a, b) nilfs_cnt32_ge(b, a) 117 118 /* 119 * Transaction 120 */ 121 static struct kmem_cache *nilfs_transaction_cachep; 122 123 /** 124 * nilfs_init_transaction_cache - create a cache for nilfs_transaction_info 125 * 126 * nilfs_init_transaction_cache() creates a slab cache for the struct 127 * nilfs_transaction_info. 128 * 129 * Return Value: On success, it returns 0. On error, one of the following 130 * negative error code is returned. 131 * 132 * %-ENOMEM - Insufficient memory available. 133 */ 134 int nilfs_init_transaction_cache(void) 135 { 136 nilfs_transaction_cachep = 137 kmem_cache_create("nilfs2_transaction_cache", 138 sizeof(struct nilfs_transaction_info), 139 0, SLAB_RECLAIM_ACCOUNT, NULL); 140 return (nilfs_transaction_cachep == NULL) ? -ENOMEM : 0; 141 } 142 143 /** 144 * nilfs_detroy_transaction_cache - destroy the cache for transaction info 145 * 146 * nilfs_destroy_transaction_cache() frees the slab cache for the struct 147 * nilfs_transaction_info. 148 */ 149 void nilfs_destroy_transaction_cache(void) 150 { 151 kmem_cache_destroy(nilfs_transaction_cachep); 152 } 153 154 static int nilfs_prepare_segment_lock(struct nilfs_transaction_info *ti) 155 { 156 struct nilfs_transaction_info *cur_ti = current->journal_info; 157 void *save = NULL; 158 159 if (cur_ti) { 160 if (cur_ti->ti_magic == NILFS_TI_MAGIC) 161 return ++cur_ti->ti_count; 162 else { 163 /* 164 * If journal_info field is occupied by other FS, 165 * it is saved and will be restored on 166 * nilfs_transaction_commit(). 167 */ 168 printk(KERN_WARNING 169 "NILFS warning: journal info from a different " 170 "FS\n"); 171 save = current->journal_info; 172 } 173 } 174 if (!ti) { 175 ti = kmem_cache_alloc(nilfs_transaction_cachep, GFP_NOFS); 176 if (!ti) 177 return -ENOMEM; 178 ti->ti_flags = NILFS_TI_DYNAMIC_ALLOC; 179 } else { 180 ti->ti_flags = 0; 181 } 182 ti->ti_count = 0; 183 ti->ti_save = save; 184 ti->ti_magic = NILFS_TI_MAGIC; 185 current->journal_info = ti; 186 return 0; 187 } 188 189 /** 190 * nilfs_transaction_begin - start indivisible file operations. 191 * @sb: super block 192 * @ti: nilfs_transaction_info 193 * @vacancy_check: flags for vacancy rate checks 194 * 195 * nilfs_transaction_begin() acquires a reader/writer semaphore, called 196 * the segment semaphore, to make a segment construction and write tasks 197 * exclusive. The function is used with nilfs_transaction_commit() in pairs. 198 * The region enclosed by these two functions can be nested. To avoid a 199 * deadlock, the semaphore is only acquired or released in the outermost call. 200 * 201 * This function allocates a nilfs_transaction_info struct to keep context 202 * information on it. It is initialized and hooked onto the current task in 203 * the outermost call. If a pre-allocated struct is given to @ti, it is used 204 * instead; othewise a new struct is assigned from a slab. 205 * 206 * When @vacancy_check flag is set, this function will check the amount of 207 * free space, and will wait for the GC to reclaim disk space if low capacity. 208 * 209 * Return Value: On success, 0 is returned. On error, one of the following 210 * negative error code is returned. 211 * 212 * %-ENOMEM - Insufficient memory available. 213 * 214 * %-ENOSPC - No space left on device 215 */ 216 int nilfs_transaction_begin(struct super_block *sb, 217 struct nilfs_transaction_info *ti, 218 int vacancy_check) 219 { 220 struct nilfs_sb_info *sbi; 221 struct the_nilfs *nilfs; 222 int ret = nilfs_prepare_segment_lock(ti); 223 224 if (unlikely(ret < 0)) 225 return ret; 226 if (ret > 0) 227 return 0; 228 229 sbi = NILFS_SB(sb); 230 nilfs = sbi->s_nilfs; 231 down_read(&nilfs->ns_segctor_sem); 232 if (vacancy_check && nilfs_near_disk_full(nilfs)) { 233 up_read(&nilfs->ns_segctor_sem); 234 ret = -ENOSPC; 235 goto failed; 236 } 237 return 0; 238 239 failed: 240 ti = current->journal_info; 241 current->journal_info = ti->ti_save; 242 if (ti->ti_flags & NILFS_TI_DYNAMIC_ALLOC) 243 kmem_cache_free(nilfs_transaction_cachep, ti); 244 return ret; 245 } 246 247 /** 248 * nilfs_transaction_commit - commit indivisible file operations. 249 * @sb: super block 250 * 251 * nilfs_transaction_commit() releases the read semaphore which is 252 * acquired by nilfs_transaction_begin(). This is only performed 253 * in outermost call of this function. If a commit flag is set, 254 * nilfs_transaction_commit() sets a timer to start the segment 255 * constructor. If a sync flag is set, it starts construction 256 * directly. 257 */ 258 int nilfs_transaction_commit(struct super_block *sb) 259 { 260 struct nilfs_transaction_info *ti = current->journal_info; 261 struct nilfs_sb_info *sbi; 262 struct nilfs_sc_info *sci; 263 int err = 0; 264 265 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC); 266 ti->ti_flags |= NILFS_TI_COMMIT; 267 if (ti->ti_count > 0) { 268 ti->ti_count--; 269 return 0; 270 } 271 sbi = NILFS_SB(sb); 272 sci = NILFS_SC(sbi); 273 if (sci != NULL) { 274 if (ti->ti_flags & NILFS_TI_COMMIT) 275 nilfs_segctor_start_timer(sci); 276 if (atomic_read(&sbi->s_nilfs->ns_ndirtyblks) > 277 sci->sc_watermark) 278 nilfs_segctor_do_flush(sci, 0); 279 } 280 up_read(&sbi->s_nilfs->ns_segctor_sem); 281 current->journal_info = ti->ti_save; 282 283 if (ti->ti_flags & NILFS_TI_SYNC) 284 err = nilfs_construct_segment(sb); 285 if (ti->ti_flags & NILFS_TI_DYNAMIC_ALLOC) 286 kmem_cache_free(nilfs_transaction_cachep, ti); 287 return err; 288 } 289 290 void nilfs_transaction_abort(struct super_block *sb) 291 { 292 struct nilfs_transaction_info *ti = current->journal_info; 293 294 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC); 295 if (ti->ti_count > 0) { 296 ti->ti_count--; 297 return; 298 } 299 up_read(&NILFS_SB(sb)->s_nilfs->ns_segctor_sem); 300 301 current->journal_info = ti->ti_save; 302 if (ti->ti_flags & NILFS_TI_DYNAMIC_ALLOC) 303 kmem_cache_free(nilfs_transaction_cachep, ti); 304 } 305 306 void nilfs_relax_pressure_in_lock(struct super_block *sb) 307 { 308 struct nilfs_sb_info *sbi = NILFS_SB(sb); 309 struct nilfs_sc_info *sci = NILFS_SC(sbi); 310 struct the_nilfs *nilfs = sbi->s_nilfs; 311 312 if (!sci || !sci->sc_flush_request) 313 return; 314 315 set_bit(NILFS_SC_PRIOR_FLUSH, &sci->sc_flags); 316 up_read(&nilfs->ns_segctor_sem); 317 318 down_write(&nilfs->ns_segctor_sem); 319 if (sci->sc_flush_request && 320 test_bit(NILFS_SC_PRIOR_FLUSH, &sci->sc_flags)) { 321 struct nilfs_transaction_info *ti = current->journal_info; 322 323 ti->ti_flags |= NILFS_TI_WRITER; 324 nilfs_segctor_do_immediate_flush(sci); 325 ti->ti_flags &= ~NILFS_TI_WRITER; 326 } 327 downgrade_write(&nilfs->ns_segctor_sem); 328 } 329 330 static void nilfs_transaction_lock(struct nilfs_sb_info *sbi, 331 struct nilfs_transaction_info *ti, 332 int gcflag) 333 { 334 struct nilfs_transaction_info *cur_ti = current->journal_info; 335 336 WARN_ON(cur_ti); 337 ti->ti_flags = NILFS_TI_WRITER; 338 ti->ti_count = 0; 339 ti->ti_save = cur_ti; 340 ti->ti_magic = NILFS_TI_MAGIC; 341 INIT_LIST_HEAD(&ti->ti_garbage); 342 current->journal_info = ti; 343 344 for (;;) { 345 down_write(&sbi->s_nilfs->ns_segctor_sem); 346 if (!test_bit(NILFS_SC_PRIOR_FLUSH, &NILFS_SC(sbi)->sc_flags)) 347 break; 348 349 nilfs_segctor_do_immediate_flush(NILFS_SC(sbi)); 350 351 up_write(&sbi->s_nilfs->ns_segctor_sem); 352 yield(); 353 } 354 if (gcflag) 355 ti->ti_flags |= NILFS_TI_GC; 356 } 357 358 static void nilfs_transaction_unlock(struct nilfs_sb_info *sbi) 359 { 360 struct nilfs_transaction_info *ti = current->journal_info; 361 362 BUG_ON(ti == NULL || ti->ti_magic != NILFS_TI_MAGIC); 363 BUG_ON(ti->ti_count > 0); 364 365 up_write(&sbi->s_nilfs->ns_segctor_sem); 366 current->journal_info = ti->ti_save; 367 if (!list_empty(&ti->ti_garbage)) 368 nilfs_dispose_list(sbi, &ti->ti_garbage, 0); 369 } 370 371 static void *nilfs_segctor_map_segsum_entry(struct nilfs_sc_info *sci, 372 struct nilfs_segsum_pointer *ssp, 373 unsigned bytes) 374 { 375 struct nilfs_segment_buffer *segbuf = sci->sc_curseg; 376 unsigned blocksize = sci->sc_super->s_blocksize; 377 void *p; 378 379 if (unlikely(ssp->offset + bytes > blocksize)) { 380 ssp->offset = 0; 381 BUG_ON(NILFS_SEGBUF_BH_IS_LAST(ssp->bh, 382 &segbuf->sb_segsum_buffers)); 383 ssp->bh = NILFS_SEGBUF_NEXT_BH(ssp->bh); 384 } 385 p = ssp->bh->b_data + ssp->offset; 386 ssp->offset += bytes; 387 return p; 388 } 389 390 /** 391 * nilfs_segctor_reset_segment_buffer - reset the current segment buffer 392 * @sci: nilfs_sc_info 393 */ 394 static int nilfs_segctor_reset_segment_buffer(struct nilfs_sc_info *sci) 395 { 396 struct nilfs_segment_buffer *segbuf = sci->sc_curseg; 397 struct buffer_head *sumbh; 398 unsigned sumbytes; 399 unsigned flags = 0; 400 int err; 401 402 if (nilfs_doing_gc()) 403 flags = NILFS_SS_GC; 404 err = nilfs_segbuf_reset(segbuf, flags, sci->sc_seg_ctime); 405 if (unlikely(err)) 406 return err; 407 408 sumbh = NILFS_SEGBUF_FIRST_BH(&segbuf->sb_segsum_buffers); 409 sumbytes = segbuf->sb_sum.sumbytes; 410 sci->sc_finfo_ptr.bh = sumbh; sci->sc_finfo_ptr.offset = sumbytes; 411 sci->sc_binfo_ptr.bh = sumbh; sci->sc_binfo_ptr.offset = sumbytes; 412 sci->sc_blk_cnt = sci->sc_datablk_cnt = 0; 413 return 0; 414 } 415 416 static int nilfs_segctor_feed_segment(struct nilfs_sc_info *sci) 417 { 418 sci->sc_nblk_this_inc += sci->sc_curseg->sb_sum.nblocks; 419 if (NILFS_SEGBUF_IS_LAST(sci->sc_curseg, &sci->sc_segbufs)) 420 return -E2BIG; /* The current segment is filled up 421 (internal code) */ 422 sci->sc_curseg = NILFS_NEXT_SEGBUF(sci->sc_curseg); 423 return nilfs_segctor_reset_segment_buffer(sci); 424 } 425 426 static int nilfs_segctor_add_super_root(struct nilfs_sc_info *sci) 427 { 428 struct nilfs_segment_buffer *segbuf = sci->sc_curseg; 429 int err; 430 431 if (segbuf->sb_sum.nblocks >= segbuf->sb_rest_blocks) { 432 err = nilfs_segctor_feed_segment(sci); 433 if (err) 434 return err; 435 segbuf = sci->sc_curseg; 436 } 437 err = nilfs_segbuf_extend_payload(segbuf, &sci->sc_super_root); 438 if (likely(!err)) 439 segbuf->sb_sum.flags |= NILFS_SS_SR; 440 return err; 441 } 442 443 /* 444 * Functions for making segment summary and payloads 445 */ 446 static int nilfs_segctor_segsum_block_required( 447 struct nilfs_sc_info *sci, const struct nilfs_segsum_pointer *ssp, 448 unsigned binfo_size) 449 { 450 unsigned blocksize = sci->sc_super->s_blocksize; 451 /* Size of finfo and binfo is enough small against blocksize */ 452 453 return ssp->offset + binfo_size + 454 (!sci->sc_blk_cnt ? sizeof(struct nilfs_finfo) : 0) > 455 blocksize; 456 } 457 458 static void nilfs_segctor_begin_finfo(struct nilfs_sc_info *sci, 459 struct inode *inode) 460 { 461 sci->sc_curseg->sb_sum.nfinfo++; 462 sci->sc_binfo_ptr = sci->sc_finfo_ptr; 463 nilfs_segctor_map_segsum_entry( 464 sci, &sci->sc_binfo_ptr, sizeof(struct nilfs_finfo)); 465 466 if (inode->i_sb && !test_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags)) 467 set_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags); 468 /* skip finfo */ 469 } 470 471 static void nilfs_segctor_end_finfo(struct nilfs_sc_info *sci, 472 struct inode *inode) 473 { 474 struct nilfs_finfo *finfo; 475 struct nilfs_inode_info *ii; 476 struct nilfs_segment_buffer *segbuf; 477 478 if (sci->sc_blk_cnt == 0) 479 return; 480 481 ii = NILFS_I(inode); 482 finfo = nilfs_segctor_map_segsum_entry(sci, &sci->sc_finfo_ptr, 483 sizeof(*finfo)); 484 finfo->fi_ino = cpu_to_le64(inode->i_ino); 485 finfo->fi_nblocks = cpu_to_le32(sci->sc_blk_cnt); 486 finfo->fi_ndatablk = cpu_to_le32(sci->sc_datablk_cnt); 487 finfo->fi_cno = cpu_to_le64(ii->i_cno); 488 489 segbuf = sci->sc_curseg; 490 segbuf->sb_sum.sumbytes = sci->sc_binfo_ptr.offset + 491 sci->sc_super->s_blocksize * (segbuf->sb_sum.nsumblk - 1); 492 sci->sc_finfo_ptr = sci->sc_binfo_ptr; 493 sci->sc_blk_cnt = sci->sc_datablk_cnt = 0; 494 } 495 496 static int nilfs_segctor_add_file_block(struct nilfs_sc_info *sci, 497 struct buffer_head *bh, 498 struct inode *inode, 499 unsigned binfo_size) 500 { 501 struct nilfs_segment_buffer *segbuf; 502 int required, err = 0; 503 504 retry: 505 segbuf = sci->sc_curseg; 506 required = nilfs_segctor_segsum_block_required( 507 sci, &sci->sc_binfo_ptr, binfo_size); 508 if (segbuf->sb_sum.nblocks + required + 1 > segbuf->sb_rest_blocks) { 509 nilfs_segctor_end_finfo(sci, inode); 510 err = nilfs_segctor_feed_segment(sci); 511 if (err) 512 return err; 513 goto retry; 514 } 515 if (unlikely(required)) { 516 err = nilfs_segbuf_extend_segsum(segbuf); 517 if (unlikely(err)) 518 goto failed; 519 } 520 if (sci->sc_blk_cnt == 0) 521 nilfs_segctor_begin_finfo(sci, inode); 522 523 nilfs_segctor_map_segsum_entry(sci, &sci->sc_binfo_ptr, binfo_size); 524 /* Substitution to vblocknr is delayed until update_blocknr() */ 525 nilfs_segbuf_add_file_buffer(segbuf, bh); 526 sci->sc_blk_cnt++; 527 failed: 528 return err; 529 } 530 531 static int nilfs_handle_bmap_error(int err, const char *fname, 532 struct inode *inode, struct super_block *sb) 533 { 534 if (err == -EINVAL) { 535 nilfs_error(sb, fname, "broken bmap (inode=%lu)\n", 536 inode->i_ino); 537 err = -EIO; 538 } 539 return err; 540 } 541 542 /* 543 * Callback functions that enumerate, mark, and collect dirty blocks 544 */ 545 static int nilfs_collect_file_data(struct nilfs_sc_info *sci, 546 struct buffer_head *bh, struct inode *inode) 547 { 548 int err; 549 550 err = nilfs_bmap_propagate(NILFS_I(inode)->i_bmap, bh); 551 if (unlikely(err < 0)) 552 return nilfs_handle_bmap_error(err, __func__, inode, 553 sci->sc_super); 554 555 err = nilfs_segctor_add_file_block(sci, bh, inode, 556 sizeof(struct nilfs_binfo_v)); 557 if (!err) 558 sci->sc_datablk_cnt++; 559 return err; 560 } 561 562 static int nilfs_collect_file_node(struct nilfs_sc_info *sci, 563 struct buffer_head *bh, 564 struct inode *inode) 565 { 566 int err; 567 568 err = nilfs_bmap_propagate(NILFS_I(inode)->i_bmap, bh); 569 if (unlikely(err < 0)) 570 return nilfs_handle_bmap_error(err, __func__, inode, 571 sci->sc_super); 572 return 0; 573 } 574 575 static int nilfs_collect_file_bmap(struct nilfs_sc_info *sci, 576 struct buffer_head *bh, 577 struct inode *inode) 578 { 579 WARN_ON(!buffer_dirty(bh)); 580 return nilfs_segctor_add_file_block(sci, bh, inode, sizeof(__le64)); 581 } 582 583 static void nilfs_write_file_data_binfo(struct nilfs_sc_info *sci, 584 struct nilfs_segsum_pointer *ssp, 585 union nilfs_binfo *binfo) 586 { 587 struct nilfs_binfo_v *binfo_v = nilfs_segctor_map_segsum_entry( 588 sci, ssp, sizeof(*binfo_v)); 589 *binfo_v = binfo->bi_v; 590 } 591 592 static void nilfs_write_file_node_binfo(struct nilfs_sc_info *sci, 593 struct nilfs_segsum_pointer *ssp, 594 union nilfs_binfo *binfo) 595 { 596 __le64 *vblocknr = nilfs_segctor_map_segsum_entry( 597 sci, ssp, sizeof(*vblocknr)); 598 *vblocknr = binfo->bi_v.bi_vblocknr; 599 } 600 601 struct nilfs_sc_operations nilfs_sc_file_ops = { 602 .collect_data = nilfs_collect_file_data, 603 .collect_node = nilfs_collect_file_node, 604 .collect_bmap = nilfs_collect_file_bmap, 605 .write_data_binfo = nilfs_write_file_data_binfo, 606 .write_node_binfo = nilfs_write_file_node_binfo, 607 }; 608 609 static int nilfs_collect_dat_data(struct nilfs_sc_info *sci, 610 struct buffer_head *bh, struct inode *inode) 611 { 612 int err; 613 614 err = nilfs_bmap_propagate(NILFS_I(inode)->i_bmap, bh); 615 if (unlikely(err < 0)) 616 return nilfs_handle_bmap_error(err, __func__, inode, 617 sci->sc_super); 618 619 err = nilfs_segctor_add_file_block(sci, bh, inode, sizeof(__le64)); 620 if (!err) 621 sci->sc_datablk_cnt++; 622 return err; 623 } 624 625 static int nilfs_collect_dat_bmap(struct nilfs_sc_info *sci, 626 struct buffer_head *bh, struct inode *inode) 627 { 628 WARN_ON(!buffer_dirty(bh)); 629 return nilfs_segctor_add_file_block(sci, bh, inode, 630 sizeof(struct nilfs_binfo_dat)); 631 } 632 633 static void nilfs_write_dat_data_binfo(struct nilfs_sc_info *sci, 634 struct nilfs_segsum_pointer *ssp, 635 union nilfs_binfo *binfo) 636 { 637 __le64 *blkoff = nilfs_segctor_map_segsum_entry(sci, ssp, 638 sizeof(*blkoff)); 639 *blkoff = binfo->bi_dat.bi_blkoff; 640 } 641 642 static void nilfs_write_dat_node_binfo(struct nilfs_sc_info *sci, 643 struct nilfs_segsum_pointer *ssp, 644 union nilfs_binfo *binfo) 645 { 646 struct nilfs_binfo_dat *binfo_dat = 647 nilfs_segctor_map_segsum_entry(sci, ssp, sizeof(*binfo_dat)); 648 *binfo_dat = binfo->bi_dat; 649 } 650 651 struct nilfs_sc_operations nilfs_sc_dat_ops = { 652 .collect_data = nilfs_collect_dat_data, 653 .collect_node = nilfs_collect_file_node, 654 .collect_bmap = nilfs_collect_dat_bmap, 655 .write_data_binfo = nilfs_write_dat_data_binfo, 656 .write_node_binfo = nilfs_write_dat_node_binfo, 657 }; 658 659 struct nilfs_sc_operations nilfs_sc_dsync_ops = { 660 .collect_data = nilfs_collect_file_data, 661 .collect_node = NULL, 662 .collect_bmap = NULL, 663 .write_data_binfo = nilfs_write_file_data_binfo, 664 .write_node_binfo = NULL, 665 }; 666 667 static size_t nilfs_lookup_dirty_data_buffers(struct inode *inode, 668 struct list_head *listp, 669 size_t nlimit, 670 loff_t start, loff_t end) 671 { 672 struct address_space *mapping = inode->i_mapping; 673 struct pagevec pvec; 674 pgoff_t index = 0, last = ULONG_MAX; 675 size_t ndirties = 0; 676 int i; 677 678 if (unlikely(start != 0 || end != LLONG_MAX)) { 679 /* 680 * A valid range is given for sync-ing data pages. The 681 * range is rounded to per-page; extra dirty buffers 682 * may be included if blocksize < pagesize. 683 */ 684 index = start >> PAGE_SHIFT; 685 last = end >> PAGE_SHIFT; 686 } 687 pagevec_init(&pvec, 0); 688 repeat: 689 if (unlikely(index > last) || 690 !pagevec_lookup_tag(&pvec, mapping, &index, PAGECACHE_TAG_DIRTY, 691 min_t(pgoff_t, last - index, 692 PAGEVEC_SIZE - 1) + 1)) 693 return ndirties; 694 695 for (i = 0; i < pagevec_count(&pvec); i++) { 696 struct buffer_head *bh, *head; 697 struct page *page = pvec.pages[i]; 698 699 if (unlikely(page->index > last)) 700 break; 701 702 if (mapping->host) { 703 lock_page(page); 704 if (!page_has_buffers(page)) 705 create_empty_buffers(page, 706 1 << inode->i_blkbits, 0); 707 unlock_page(page); 708 } 709 710 bh = head = page_buffers(page); 711 do { 712 if (!buffer_dirty(bh)) 713 continue; 714 get_bh(bh); 715 list_add_tail(&bh->b_assoc_buffers, listp); 716 ndirties++; 717 if (unlikely(ndirties >= nlimit)) { 718 pagevec_release(&pvec); 719 cond_resched(); 720 return ndirties; 721 } 722 } while (bh = bh->b_this_page, bh != head); 723 } 724 pagevec_release(&pvec); 725 cond_resched(); 726 goto repeat; 727 } 728 729 static void nilfs_lookup_dirty_node_buffers(struct inode *inode, 730 struct list_head *listp) 731 { 732 struct nilfs_inode_info *ii = NILFS_I(inode); 733 struct address_space *mapping = &ii->i_btnode_cache; 734 struct pagevec pvec; 735 struct buffer_head *bh, *head; 736 unsigned int i; 737 pgoff_t index = 0; 738 739 pagevec_init(&pvec, 0); 740 741 while (pagevec_lookup_tag(&pvec, mapping, &index, PAGECACHE_TAG_DIRTY, 742 PAGEVEC_SIZE)) { 743 for (i = 0; i < pagevec_count(&pvec); i++) { 744 bh = head = page_buffers(pvec.pages[i]); 745 do { 746 if (buffer_dirty(bh)) { 747 get_bh(bh); 748 list_add_tail(&bh->b_assoc_buffers, 749 listp); 750 } 751 bh = bh->b_this_page; 752 } while (bh != head); 753 } 754 pagevec_release(&pvec); 755 cond_resched(); 756 } 757 } 758 759 static void nilfs_dispose_list(struct nilfs_sb_info *sbi, 760 struct list_head *head, int force) 761 { 762 struct nilfs_inode_info *ii, *n; 763 struct nilfs_inode_info *ivec[SC_N_INODEVEC], **pii; 764 unsigned nv = 0; 765 766 while (!list_empty(head)) { 767 spin_lock(&sbi->s_inode_lock); 768 list_for_each_entry_safe(ii, n, head, i_dirty) { 769 list_del_init(&ii->i_dirty); 770 if (force) { 771 if (unlikely(ii->i_bh)) { 772 brelse(ii->i_bh); 773 ii->i_bh = NULL; 774 } 775 } else if (test_bit(NILFS_I_DIRTY, &ii->i_state)) { 776 set_bit(NILFS_I_QUEUED, &ii->i_state); 777 list_add_tail(&ii->i_dirty, 778 &sbi->s_dirty_files); 779 continue; 780 } 781 ivec[nv++] = ii; 782 if (nv == SC_N_INODEVEC) 783 break; 784 } 785 spin_unlock(&sbi->s_inode_lock); 786 787 for (pii = ivec; nv > 0; pii++, nv--) 788 iput(&(*pii)->vfs_inode); 789 } 790 } 791 792 static int nilfs_test_metadata_dirty(struct nilfs_sb_info *sbi) 793 { 794 struct the_nilfs *nilfs = sbi->s_nilfs; 795 int ret = 0; 796 797 if (nilfs_mdt_fetch_dirty(sbi->s_ifile)) 798 ret++; 799 if (nilfs_mdt_fetch_dirty(nilfs->ns_cpfile)) 800 ret++; 801 if (nilfs_mdt_fetch_dirty(nilfs->ns_sufile)) 802 ret++; 803 if (ret || nilfs_doing_gc()) 804 if (nilfs_mdt_fetch_dirty(nilfs_dat_inode(nilfs))) 805 ret++; 806 return ret; 807 } 808 809 static int nilfs_segctor_clean(struct nilfs_sc_info *sci) 810 { 811 return list_empty(&sci->sc_dirty_files) && 812 !test_bit(NILFS_SC_DIRTY, &sci->sc_flags) && 813 list_empty(&sci->sc_cleaning_segments) && 814 (!nilfs_doing_gc() || list_empty(&sci->sc_gc_inodes)); 815 } 816 817 static int nilfs_segctor_confirm(struct nilfs_sc_info *sci) 818 { 819 struct nilfs_sb_info *sbi = sci->sc_sbi; 820 int ret = 0; 821 822 if (nilfs_test_metadata_dirty(sbi)) 823 set_bit(NILFS_SC_DIRTY, &sci->sc_flags); 824 825 spin_lock(&sbi->s_inode_lock); 826 if (list_empty(&sbi->s_dirty_files) && nilfs_segctor_clean(sci)) 827 ret++; 828 829 spin_unlock(&sbi->s_inode_lock); 830 return ret; 831 } 832 833 static void nilfs_segctor_clear_metadata_dirty(struct nilfs_sc_info *sci) 834 { 835 struct nilfs_sb_info *sbi = sci->sc_sbi; 836 struct the_nilfs *nilfs = sbi->s_nilfs; 837 838 nilfs_mdt_clear_dirty(sbi->s_ifile); 839 nilfs_mdt_clear_dirty(nilfs->ns_cpfile); 840 nilfs_mdt_clear_dirty(nilfs->ns_sufile); 841 nilfs_mdt_clear_dirty(nilfs_dat_inode(nilfs)); 842 } 843 844 static int nilfs_segctor_create_checkpoint(struct nilfs_sc_info *sci) 845 { 846 struct the_nilfs *nilfs = sci->sc_sbi->s_nilfs; 847 struct buffer_head *bh_cp; 848 struct nilfs_checkpoint *raw_cp; 849 int err; 850 851 /* XXX: this interface will be changed */ 852 err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, 1, 853 &raw_cp, &bh_cp); 854 if (likely(!err)) { 855 /* The following code is duplicated with cpfile. But, it is 856 needed to collect the checkpoint even if it was not newly 857 created */ 858 nilfs_mdt_mark_buffer_dirty(bh_cp); 859 nilfs_mdt_mark_dirty(nilfs->ns_cpfile); 860 nilfs_cpfile_put_checkpoint( 861 nilfs->ns_cpfile, nilfs->ns_cno, bh_cp); 862 } else 863 WARN_ON(err == -EINVAL || err == -ENOENT); 864 865 return err; 866 } 867 868 static int nilfs_segctor_fill_in_checkpoint(struct nilfs_sc_info *sci) 869 { 870 struct nilfs_sb_info *sbi = sci->sc_sbi; 871 struct the_nilfs *nilfs = sbi->s_nilfs; 872 struct buffer_head *bh_cp; 873 struct nilfs_checkpoint *raw_cp; 874 int err; 875 876 err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, 0, 877 &raw_cp, &bh_cp); 878 if (unlikely(err)) { 879 WARN_ON(err == -EINVAL || err == -ENOENT); 880 goto failed_ibh; 881 } 882 raw_cp->cp_snapshot_list.ssl_next = 0; 883 raw_cp->cp_snapshot_list.ssl_prev = 0; 884 raw_cp->cp_inodes_count = 885 cpu_to_le64(atomic_read(&sbi->s_inodes_count)); 886 raw_cp->cp_blocks_count = 887 cpu_to_le64(atomic_read(&sbi->s_blocks_count)); 888 raw_cp->cp_nblk_inc = 889 cpu_to_le64(sci->sc_nblk_inc + sci->sc_nblk_this_inc); 890 raw_cp->cp_create = cpu_to_le64(sci->sc_seg_ctime); 891 raw_cp->cp_cno = cpu_to_le64(nilfs->ns_cno); 892 893 if (test_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags)) 894 nilfs_checkpoint_clear_minor(raw_cp); 895 else 896 nilfs_checkpoint_set_minor(raw_cp); 897 898 nilfs_write_inode_common(sbi->s_ifile, &raw_cp->cp_ifile_inode, 1); 899 nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, nilfs->ns_cno, bh_cp); 900 return 0; 901 902 failed_ibh: 903 return err; 904 } 905 906 static void nilfs_fill_in_file_bmap(struct inode *ifile, 907 struct nilfs_inode_info *ii) 908 909 { 910 struct buffer_head *ibh; 911 struct nilfs_inode *raw_inode; 912 913 if (test_bit(NILFS_I_BMAP, &ii->i_state)) { 914 ibh = ii->i_bh; 915 BUG_ON(!ibh); 916 raw_inode = nilfs_ifile_map_inode(ifile, ii->vfs_inode.i_ino, 917 ibh); 918 nilfs_bmap_write(ii->i_bmap, raw_inode); 919 nilfs_ifile_unmap_inode(ifile, ii->vfs_inode.i_ino, ibh); 920 } 921 } 922 923 static void nilfs_segctor_fill_in_file_bmap(struct nilfs_sc_info *sci, 924 struct inode *ifile) 925 { 926 struct nilfs_inode_info *ii; 927 928 list_for_each_entry(ii, &sci->sc_dirty_files, i_dirty) { 929 nilfs_fill_in_file_bmap(ifile, ii); 930 set_bit(NILFS_I_COLLECTED, &ii->i_state); 931 } 932 } 933 934 /* 935 * CRC calculation routines 936 */ 937 static void nilfs_fill_in_super_root_crc(struct buffer_head *bh_sr, u32 seed) 938 { 939 struct nilfs_super_root *raw_sr = 940 (struct nilfs_super_root *)bh_sr->b_data; 941 u32 crc; 942 943 crc = crc32_le(seed, 944 (unsigned char *)raw_sr + sizeof(raw_sr->sr_sum), 945 NILFS_SR_BYTES - sizeof(raw_sr->sr_sum)); 946 raw_sr->sr_sum = cpu_to_le32(crc); 947 } 948 949 static void nilfs_segctor_fill_in_checksums(struct nilfs_sc_info *sci, 950 u32 seed) 951 { 952 struct nilfs_segment_buffer *segbuf; 953 954 if (sci->sc_super_root) 955 nilfs_fill_in_super_root_crc(sci->sc_super_root, seed); 956 957 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) { 958 nilfs_segbuf_fill_in_segsum_crc(segbuf, seed); 959 nilfs_segbuf_fill_in_data_crc(segbuf, seed); 960 } 961 } 962 963 static void nilfs_segctor_fill_in_super_root(struct nilfs_sc_info *sci, 964 struct the_nilfs *nilfs) 965 { 966 struct buffer_head *bh_sr = sci->sc_super_root; 967 struct nilfs_super_root *raw_sr = 968 (struct nilfs_super_root *)bh_sr->b_data; 969 unsigned isz = nilfs->ns_inode_size; 970 971 raw_sr->sr_bytes = cpu_to_le16(NILFS_SR_BYTES); 972 raw_sr->sr_nongc_ctime 973 = cpu_to_le64(nilfs_doing_gc() ? 974 nilfs->ns_nongc_ctime : sci->sc_seg_ctime); 975 raw_sr->sr_flags = 0; 976 977 nilfs_mdt_write_inode_direct( 978 nilfs_dat_inode(nilfs), bh_sr, NILFS_SR_DAT_OFFSET(isz)); 979 nilfs_mdt_write_inode_direct( 980 nilfs->ns_cpfile, bh_sr, NILFS_SR_CPFILE_OFFSET(isz)); 981 nilfs_mdt_write_inode_direct( 982 nilfs->ns_sufile, bh_sr, NILFS_SR_SUFILE_OFFSET(isz)); 983 } 984 985 static void nilfs_redirty_inodes(struct list_head *head) 986 { 987 struct nilfs_inode_info *ii; 988 989 list_for_each_entry(ii, head, i_dirty) { 990 if (test_bit(NILFS_I_COLLECTED, &ii->i_state)) 991 clear_bit(NILFS_I_COLLECTED, &ii->i_state); 992 } 993 } 994 995 static void nilfs_drop_collected_inodes(struct list_head *head) 996 { 997 struct nilfs_inode_info *ii; 998 999 list_for_each_entry(ii, head, i_dirty) { 1000 if (!test_and_clear_bit(NILFS_I_COLLECTED, &ii->i_state)) 1001 continue; 1002 1003 clear_bit(NILFS_I_INODE_DIRTY, &ii->i_state); 1004 set_bit(NILFS_I_UPDATED, &ii->i_state); 1005 } 1006 } 1007 1008 static void nilfs_segctor_cancel_free_segments(struct nilfs_sc_info *sci, 1009 struct inode *sufile) 1010 1011 { 1012 struct list_head *head = &sci->sc_cleaning_segments; 1013 struct nilfs_segment_entry *ent; 1014 int err; 1015 1016 list_for_each_entry(ent, head, list) { 1017 if (!(ent->flags & NILFS_SLH_FREED)) 1018 break; 1019 err = nilfs_sufile_cancel_free(sufile, ent->segnum); 1020 WARN_ON(err); /* do not happen */ 1021 ent->flags &= ~NILFS_SLH_FREED; 1022 } 1023 } 1024 1025 static int nilfs_segctor_prepare_free_segments(struct nilfs_sc_info *sci, 1026 struct inode *sufile) 1027 { 1028 struct list_head *head = &sci->sc_cleaning_segments; 1029 struct nilfs_segment_entry *ent; 1030 int err; 1031 1032 list_for_each_entry(ent, head, list) { 1033 err = nilfs_sufile_free(sufile, ent->segnum); 1034 if (unlikely(err)) 1035 return err; 1036 ent->flags |= NILFS_SLH_FREED; 1037 } 1038 return 0; 1039 } 1040 1041 static void nilfs_segctor_commit_free_segments(struct nilfs_sc_info *sci) 1042 { 1043 nilfs_dispose_segment_list(&sci->sc_cleaning_segments); 1044 } 1045 1046 static int nilfs_segctor_apply_buffers(struct nilfs_sc_info *sci, 1047 struct inode *inode, 1048 struct list_head *listp, 1049 int (*collect)(struct nilfs_sc_info *, 1050 struct buffer_head *, 1051 struct inode *)) 1052 { 1053 struct buffer_head *bh, *n; 1054 int err = 0; 1055 1056 if (collect) { 1057 list_for_each_entry_safe(bh, n, listp, b_assoc_buffers) { 1058 list_del_init(&bh->b_assoc_buffers); 1059 err = collect(sci, bh, inode); 1060 brelse(bh); 1061 if (unlikely(err)) 1062 goto dispose_buffers; 1063 } 1064 return 0; 1065 } 1066 1067 dispose_buffers: 1068 while (!list_empty(listp)) { 1069 bh = list_entry(listp->next, struct buffer_head, 1070 b_assoc_buffers); 1071 list_del_init(&bh->b_assoc_buffers); 1072 brelse(bh); 1073 } 1074 return err; 1075 } 1076 1077 static size_t nilfs_segctor_buffer_rest(struct nilfs_sc_info *sci) 1078 { 1079 /* Remaining number of blocks within segment buffer */ 1080 return sci->sc_segbuf_nblocks - 1081 (sci->sc_nblk_this_inc + sci->sc_curseg->sb_sum.nblocks); 1082 } 1083 1084 static int nilfs_segctor_scan_file(struct nilfs_sc_info *sci, 1085 struct inode *inode, 1086 struct nilfs_sc_operations *sc_ops) 1087 { 1088 LIST_HEAD(data_buffers); 1089 LIST_HEAD(node_buffers); 1090 int err; 1091 1092 if (!(sci->sc_stage.flags & NILFS_CF_NODE)) { 1093 size_t n, rest = nilfs_segctor_buffer_rest(sci); 1094 1095 n = nilfs_lookup_dirty_data_buffers( 1096 inode, &data_buffers, rest + 1, 0, LLONG_MAX); 1097 if (n > rest) { 1098 err = nilfs_segctor_apply_buffers( 1099 sci, inode, &data_buffers, 1100 sc_ops->collect_data); 1101 BUG_ON(!err); /* always receive -E2BIG or true error */ 1102 goto break_or_fail; 1103 } 1104 } 1105 nilfs_lookup_dirty_node_buffers(inode, &node_buffers); 1106 1107 if (!(sci->sc_stage.flags & NILFS_CF_NODE)) { 1108 err = nilfs_segctor_apply_buffers( 1109 sci, inode, &data_buffers, sc_ops->collect_data); 1110 if (unlikely(err)) { 1111 /* dispose node list */ 1112 nilfs_segctor_apply_buffers( 1113 sci, inode, &node_buffers, NULL); 1114 goto break_or_fail; 1115 } 1116 sci->sc_stage.flags |= NILFS_CF_NODE; 1117 } 1118 /* Collect node */ 1119 err = nilfs_segctor_apply_buffers( 1120 sci, inode, &node_buffers, sc_ops->collect_node); 1121 if (unlikely(err)) 1122 goto break_or_fail; 1123 1124 nilfs_bmap_lookup_dirty_buffers(NILFS_I(inode)->i_bmap, &node_buffers); 1125 err = nilfs_segctor_apply_buffers( 1126 sci, inode, &node_buffers, sc_ops->collect_bmap); 1127 if (unlikely(err)) 1128 goto break_or_fail; 1129 1130 nilfs_segctor_end_finfo(sci, inode); 1131 sci->sc_stage.flags &= ~NILFS_CF_NODE; 1132 1133 break_or_fail: 1134 return err; 1135 } 1136 1137 static int nilfs_segctor_scan_file_dsync(struct nilfs_sc_info *sci, 1138 struct inode *inode) 1139 { 1140 LIST_HEAD(data_buffers); 1141 size_t n, rest = nilfs_segctor_buffer_rest(sci); 1142 int err; 1143 1144 n = nilfs_lookup_dirty_data_buffers(inode, &data_buffers, rest + 1, 1145 sci->sc_dsync_start, 1146 sci->sc_dsync_end); 1147 1148 err = nilfs_segctor_apply_buffers(sci, inode, &data_buffers, 1149 nilfs_collect_file_data); 1150 if (!err) { 1151 nilfs_segctor_end_finfo(sci, inode); 1152 BUG_ON(n > rest); 1153 /* always receive -E2BIG or true error if n > rest */ 1154 } 1155 return err; 1156 } 1157 1158 static int nilfs_segctor_collect_blocks(struct nilfs_sc_info *sci, int mode) 1159 { 1160 struct nilfs_sb_info *sbi = sci->sc_sbi; 1161 struct the_nilfs *nilfs = sbi->s_nilfs; 1162 struct list_head *head; 1163 struct nilfs_inode_info *ii; 1164 int err = 0; 1165 1166 switch (sci->sc_stage.scnt) { 1167 case NILFS_ST_INIT: 1168 /* Pre-processes */ 1169 sci->sc_stage.flags = 0; 1170 1171 if (!test_bit(NILFS_SC_UNCLOSED, &sci->sc_flags)) { 1172 sci->sc_nblk_inc = 0; 1173 sci->sc_curseg->sb_sum.flags = NILFS_SS_LOGBGN; 1174 if (mode == SC_LSEG_DSYNC) { 1175 sci->sc_stage.scnt = NILFS_ST_DSYNC; 1176 goto dsync_mode; 1177 } 1178 } 1179 1180 sci->sc_stage.dirty_file_ptr = NULL; 1181 sci->sc_stage.gc_inode_ptr = NULL; 1182 if (mode == SC_FLUSH_DAT) { 1183 sci->sc_stage.scnt = NILFS_ST_DAT; 1184 goto dat_stage; 1185 } 1186 sci->sc_stage.scnt++; /* Fall through */ 1187 case NILFS_ST_GC: 1188 if (nilfs_doing_gc()) { 1189 head = &sci->sc_gc_inodes; 1190 ii = list_prepare_entry(sci->sc_stage.gc_inode_ptr, 1191 head, i_dirty); 1192 list_for_each_entry_continue(ii, head, i_dirty) { 1193 err = nilfs_segctor_scan_file( 1194 sci, &ii->vfs_inode, 1195 &nilfs_sc_file_ops); 1196 if (unlikely(err)) { 1197 sci->sc_stage.gc_inode_ptr = list_entry( 1198 ii->i_dirty.prev, 1199 struct nilfs_inode_info, 1200 i_dirty); 1201 goto break_or_fail; 1202 } 1203 set_bit(NILFS_I_COLLECTED, &ii->i_state); 1204 } 1205 sci->sc_stage.gc_inode_ptr = NULL; 1206 } 1207 sci->sc_stage.scnt++; /* Fall through */ 1208 case NILFS_ST_FILE: 1209 head = &sci->sc_dirty_files; 1210 ii = list_prepare_entry(sci->sc_stage.dirty_file_ptr, head, 1211 i_dirty); 1212 list_for_each_entry_continue(ii, head, i_dirty) { 1213 clear_bit(NILFS_I_DIRTY, &ii->i_state); 1214 1215 err = nilfs_segctor_scan_file(sci, &ii->vfs_inode, 1216 &nilfs_sc_file_ops); 1217 if (unlikely(err)) { 1218 sci->sc_stage.dirty_file_ptr = 1219 list_entry(ii->i_dirty.prev, 1220 struct nilfs_inode_info, 1221 i_dirty); 1222 goto break_or_fail; 1223 } 1224 /* sci->sc_stage.dirty_file_ptr = NILFS_I(inode); */ 1225 /* XXX: required ? */ 1226 } 1227 sci->sc_stage.dirty_file_ptr = NULL; 1228 if (mode == SC_FLUSH_FILE) { 1229 sci->sc_stage.scnt = NILFS_ST_DONE; 1230 return 0; 1231 } 1232 sci->sc_stage.scnt++; 1233 sci->sc_stage.flags |= NILFS_CF_IFILE_STARTED; 1234 /* Fall through */ 1235 case NILFS_ST_IFILE: 1236 err = nilfs_segctor_scan_file(sci, sbi->s_ifile, 1237 &nilfs_sc_file_ops); 1238 if (unlikely(err)) 1239 break; 1240 sci->sc_stage.scnt++; 1241 /* Creating a checkpoint */ 1242 err = nilfs_segctor_create_checkpoint(sci); 1243 if (unlikely(err)) 1244 break; 1245 /* Fall through */ 1246 case NILFS_ST_CPFILE: 1247 err = nilfs_segctor_scan_file(sci, nilfs->ns_cpfile, 1248 &nilfs_sc_file_ops); 1249 if (unlikely(err)) 1250 break; 1251 sci->sc_stage.scnt++; /* Fall through */ 1252 case NILFS_ST_SUFILE: 1253 err = nilfs_segctor_prepare_free_segments(sci, 1254 nilfs->ns_sufile); 1255 if (unlikely(err)) 1256 break; 1257 err = nilfs_segctor_scan_file(sci, nilfs->ns_sufile, 1258 &nilfs_sc_file_ops); 1259 if (unlikely(err)) 1260 break; 1261 sci->sc_stage.scnt++; /* Fall through */ 1262 case NILFS_ST_DAT: 1263 dat_stage: 1264 err = nilfs_segctor_scan_file(sci, nilfs_dat_inode(nilfs), 1265 &nilfs_sc_dat_ops); 1266 if (unlikely(err)) 1267 break; 1268 if (mode == SC_FLUSH_DAT) { 1269 sci->sc_stage.scnt = NILFS_ST_DONE; 1270 return 0; 1271 } 1272 sci->sc_stage.scnt++; /* Fall through */ 1273 case NILFS_ST_SR: 1274 if (mode == SC_LSEG_SR) { 1275 /* Appending a super root */ 1276 err = nilfs_segctor_add_super_root(sci); 1277 if (unlikely(err)) 1278 break; 1279 } 1280 /* End of a logical segment */ 1281 sci->sc_curseg->sb_sum.flags |= NILFS_SS_LOGEND; 1282 sci->sc_stage.scnt = NILFS_ST_DONE; 1283 return 0; 1284 case NILFS_ST_DSYNC: 1285 dsync_mode: 1286 sci->sc_curseg->sb_sum.flags |= NILFS_SS_SYNDT; 1287 ii = sci->sc_dsync_inode; 1288 if (!test_bit(NILFS_I_BUSY, &ii->i_state)) 1289 break; 1290 1291 err = nilfs_segctor_scan_file_dsync(sci, &ii->vfs_inode); 1292 if (unlikely(err)) 1293 break; 1294 sci->sc_curseg->sb_sum.flags |= NILFS_SS_LOGEND; 1295 sci->sc_stage.scnt = NILFS_ST_DONE; 1296 return 0; 1297 case NILFS_ST_DONE: 1298 return 0; 1299 default: 1300 BUG(); 1301 } 1302 1303 break_or_fail: 1304 return err; 1305 } 1306 1307 static int nilfs_touch_segusage(struct inode *sufile, __u64 segnum) 1308 { 1309 struct buffer_head *bh_su; 1310 struct nilfs_segment_usage *raw_su; 1311 int err; 1312 1313 err = nilfs_sufile_get_segment_usage(sufile, segnum, &raw_su, &bh_su); 1314 if (unlikely(err)) 1315 return err; 1316 nilfs_mdt_mark_buffer_dirty(bh_su); 1317 nilfs_mdt_mark_dirty(sufile); 1318 nilfs_sufile_put_segment_usage(sufile, segnum, bh_su); 1319 return 0; 1320 } 1321 1322 static int nilfs_segctor_begin_construction(struct nilfs_sc_info *sci, 1323 struct the_nilfs *nilfs) 1324 { 1325 struct nilfs_segment_buffer *segbuf, *n; 1326 __u64 nextnum; 1327 int err; 1328 1329 if (list_empty(&sci->sc_segbufs)) { 1330 segbuf = nilfs_segbuf_new(sci->sc_super); 1331 if (unlikely(!segbuf)) 1332 return -ENOMEM; 1333 list_add(&segbuf->sb_list, &sci->sc_segbufs); 1334 } else 1335 segbuf = NILFS_FIRST_SEGBUF(&sci->sc_segbufs); 1336 1337 nilfs_segbuf_map(segbuf, nilfs->ns_segnum, nilfs->ns_pseg_offset, 1338 nilfs); 1339 1340 if (segbuf->sb_rest_blocks < NILFS_PSEG_MIN_BLOCKS) { 1341 nilfs_shift_to_next_segment(nilfs); 1342 nilfs_segbuf_map(segbuf, nilfs->ns_segnum, 0, nilfs); 1343 } 1344 sci->sc_segbuf_nblocks = segbuf->sb_rest_blocks; 1345 1346 err = nilfs_touch_segusage(nilfs->ns_sufile, segbuf->sb_segnum); 1347 if (unlikely(err)) 1348 return err; 1349 1350 if (nilfs->ns_segnum == nilfs->ns_nextnum) { 1351 /* Start from the head of a new full segment */ 1352 err = nilfs_sufile_alloc(nilfs->ns_sufile, &nextnum); 1353 if (unlikely(err)) 1354 return err; 1355 } else 1356 nextnum = nilfs->ns_nextnum; 1357 1358 segbuf->sb_sum.seg_seq = nilfs->ns_seg_seq; 1359 nilfs_segbuf_set_next_segnum(segbuf, nextnum, nilfs); 1360 1361 /* truncating segment buffers */ 1362 list_for_each_entry_safe_continue(segbuf, n, &sci->sc_segbufs, 1363 sb_list) { 1364 list_del_init(&segbuf->sb_list); 1365 nilfs_segbuf_free(segbuf); 1366 } 1367 return 0; 1368 } 1369 1370 static int nilfs_segctor_extend_segments(struct nilfs_sc_info *sci, 1371 struct the_nilfs *nilfs, int nadd) 1372 { 1373 struct nilfs_segment_buffer *segbuf, *prev, *n; 1374 struct inode *sufile = nilfs->ns_sufile; 1375 __u64 nextnextnum; 1376 LIST_HEAD(list); 1377 int err, ret, i; 1378 1379 prev = NILFS_LAST_SEGBUF(&sci->sc_segbufs); 1380 /* 1381 * Since the segment specified with nextnum might be allocated during 1382 * the previous construction, the buffer including its segusage may 1383 * not be dirty. The following call ensures that the buffer is dirty 1384 * and will pin the buffer on memory until the sufile is written. 1385 */ 1386 err = nilfs_touch_segusage(sufile, prev->sb_nextnum); 1387 if (unlikely(err)) 1388 return err; 1389 1390 for (i = 0; i < nadd; i++) { 1391 /* extend segment info */ 1392 err = -ENOMEM; 1393 segbuf = nilfs_segbuf_new(sci->sc_super); 1394 if (unlikely(!segbuf)) 1395 goto failed; 1396 1397 /* map this buffer to region of segment on-disk */ 1398 nilfs_segbuf_map(segbuf, prev->sb_nextnum, 0, nilfs); 1399 sci->sc_segbuf_nblocks += segbuf->sb_rest_blocks; 1400 1401 /* allocate the next next full segment */ 1402 err = nilfs_sufile_alloc(sufile, &nextnextnum); 1403 if (unlikely(err)) 1404 goto failed_segbuf; 1405 1406 segbuf->sb_sum.seg_seq = prev->sb_sum.seg_seq + 1; 1407 nilfs_segbuf_set_next_segnum(segbuf, nextnextnum, nilfs); 1408 1409 list_add_tail(&segbuf->sb_list, &list); 1410 prev = segbuf; 1411 } 1412 list_splice(&list, sci->sc_segbufs.prev); 1413 return 0; 1414 1415 failed_segbuf: 1416 nilfs_segbuf_free(segbuf); 1417 failed: 1418 list_for_each_entry_safe(segbuf, n, &list, sb_list) { 1419 ret = nilfs_sufile_free(sufile, segbuf->sb_nextnum); 1420 WARN_ON(ret); /* never fails */ 1421 list_del_init(&segbuf->sb_list); 1422 nilfs_segbuf_free(segbuf); 1423 } 1424 return err; 1425 } 1426 1427 static void nilfs_segctor_free_incomplete_segments(struct nilfs_sc_info *sci, 1428 struct the_nilfs *nilfs) 1429 { 1430 struct nilfs_segment_buffer *segbuf; 1431 int ret, done = 0; 1432 1433 segbuf = NILFS_FIRST_SEGBUF(&sci->sc_segbufs); 1434 if (nilfs->ns_nextnum != segbuf->sb_nextnum) { 1435 ret = nilfs_sufile_free(nilfs->ns_sufile, segbuf->sb_nextnum); 1436 WARN_ON(ret); /* never fails */ 1437 } 1438 if (segbuf->sb_io_error) { 1439 /* Case 1: The first segment failed */ 1440 if (segbuf->sb_pseg_start != segbuf->sb_fseg_start) 1441 /* Case 1a: Partial segment appended into an existing 1442 segment */ 1443 nilfs_terminate_segment(nilfs, segbuf->sb_fseg_start, 1444 segbuf->sb_fseg_end); 1445 else /* Case 1b: New full segment */ 1446 set_nilfs_discontinued(nilfs); 1447 done++; 1448 } 1449 1450 list_for_each_entry_continue(segbuf, &sci->sc_segbufs, sb_list) { 1451 ret = nilfs_sufile_free(nilfs->ns_sufile, segbuf->sb_nextnum); 1452 WARN_ON(ret); /* never fails */ 1453 if (!done && segbuf->sb_io_error) { 1454 if (segbuf->sb_segnum != nilfs->ns_nextnum) 1455 /* Case 2: extended segment (!= next) failed */ 1456 nilfs_sufile_set_error(nilfs->ns_sufile, 1457 segbuf->sb_segnum); 1458 done++; 1459 } 1460 } 1461 } 1462 1463 static void nilfs_segctor_clear_segment_buffers(struct nilfs_sc_info *sci) 1464 { 1465 struct nilfs_segment_buffer *segbuf; 1466 1467 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) 1468 nilfs_segbuf_clear(segbuf); 1469 sci->sc_super_root = NULL; 1470 } 1471 1472 static void nilfs_segctor_destroy_segment_buffers(struct nilfs_sc_info *sci) 1473 { 1474 struct nilfs_segment_buffer *segbuf; 1475 1476 while (!list_empty(&sci->sc_segbufs)) { 1477 segbuf = NILFS_FIRST_SEGBUF(&sci->sc_segbufs); 1478 list_del_init(&segbuf->sb_list); 1479 nilfs_segbuf_free(segbuf); 1480 } 1481 /* sci->sc_curseg = NULL; */ 1482 } 1483 1484 static void nilfs_segctor_end_construction(struct nilfs_sc_info *sci, 1485 struct the_nilfs *nilfs, int err) 1486 { 1487 if (unlikely(err)) { 1488 nilfs_segctor_free_incomplete_segments(sci, nilfs); 1489 nilfs_segctor_cancel_free_segments(sci, nilfs->ns_sufile); 1490 } 1491 nilfs_segctor_clear_segment_buffers(sci); 1492 } 1493 1494 static void nilfs_segctor_update_segusage(struct nilfs_sc_info *sci, 1495 struct inode *sufile) 1496 { 1497 struct nilfs_segment_buffer *segbuf; 1498 struct buffer_head *bh_su; 1499 struct nilfs_segment_usage *raw_su; 1500 unsigned long live_blocks; 1501 int ret; 1502 1503 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) { 1504 ret = nilfs_sufile_get_segment_usage(sufile, segbuf->sb_segnum, 1505 &raw_su, &bh_su); 1506 WARN_ON(ret); /* always succeed because bh_su is dirty */ 1507 live_blocks = segbuf->sb_sum.nblocks + 1508 (segbuf->sb_pseg_start - segbuf->sb_fseg_start); 1509 raw_su->su_lastmod = cpu_to_le64(sci->sc_seg_ctime); 1510 raw_su->su_nblocks = cpu_to_le32(live_blocks); 1511 nilfs_sufile_put_segment_usage(sufile, segbuf->sb_segnum, 1512 bh_su); 1513 } 1514 } 1515 1516 static void nilfs_segctor_cancel_segusage(struct nilfs_sc_info *sci, 1517 struct inode *sufile) 1518 { 1519 struct nilfs_segment_buffer *segbuf; 1520 struct buffer_head *bh_su; 1521 struct nilfs_segment_usage *raw_su; 1522 int ret; 1523 1524 segbuf = NILFS_FIRST_SEGBUF(&sci->sc_segbufs); 1525 ret = nilfs_sufile_get_segment_usage(sufile, segbuf->sb_segnum, 1526 &raw_su, &bh_su); 1527 WARN_ON(ret); /* always succeed because bh_su is dirty */ 1528 raw_su->su_nblocks = cpu_to_le32(segbuf->sb_pseg_start - 1529 segbuf->sb_fseg_start); 1530 nilfs_sufile_put_segment_usage(sufile, segbuf->sb_segnum, bh_su); 1531 1532 list_for_each_entry_continue(segbuf, &sci->sc_segbufs, sb_list) { 1533 ret = nilfs_sufile_get_segment_usage(sufile, segbuf->sb_segnum, 1534 &raw_su, &bh_su); 1535 WARN_ON(ret); /* always succeed */ 1536 raw_su->su_nblocks = 0; 1537 nilfs_sufile_put_segment_usage(sufile, segbuf->sb_segnum, 1538 bh_su); 1539 } 1540 } 1541 1542 static void nilfs_segctor_truncate_segments(struct nilfs_sc_info *sci, 1543 struct nilfs_segment_buffer *last, 1544 struct inode *sufile) 1545 { 1546 struct nilfs_segment_buffer *segbuf = last, *n; 1547 int ret; 1548 1549 list_for_each_entry_safe_continue(segbuf, n, &sci->sc_segbufs, 1550 sb_list) { 1551 list_del_init(&segbuf->sb_list); 1552 sci->sc_segbuf_nblocks -= segbuf->sb_rest_blocks; 1553 ret = nilfs_sufile_free(sufile, segbuf->sb_nextnum); 1554 WARN_ON(ret); 1555 nilfs_segbuf_free(segbuf); 1556 } 1557 } 1558 1559 1560 static int nilfs_segctor_collect(struct nilfs_sc_info *sci, 1561 struct the_nilfs *nilfs, int mode) 1562 { 1563 struct nilfs_cstage prev_stage = sci->sc_stage; 1564 int err, nadd = 1; 1565 1566 /* Collection retry loop */ 1567 for (;;) { 1568 sci->sc_super_root = NULL; 1569 sci->sc_nblk_this_inc = 0; 1570 sci->sc_curseg = NILFS_FIRST_SEGBUF(&sci->sc_segbufs); 1571 1572 err = nilfs_segctor_reset_segment_buffer(sci); 1573 if (unlikely(err)) 1574 goto failed; 1575 1576 err = nilfs_segctor_collect_blocks(sci, mode); 1577 sci->sc_nblk_this_inc += sci->sc_curseg->sb_sum.nblocks; 1578 if (!err) 1579 break; 1580 1581 if (unlikely(err != -E2BIG)) 1582 goto failed; 1583 1584 /* The current segment is filled up */ 1585 if (mode != SC_LSEG_SR || sci->sc_stage.scnt < NILFS_ST_CPFILE) 1586 break; 1587 1588 nilfs_segctor_cancel_free_segments(sci, nilfs->ns_sufile); 1589 nilfs_segctor_clear_segment_buffers(sci); 1590 1591 err = nilfs_segctor_extend_segments(sci, nilfs, nadd); 1592 if (unlikely(err)) 1593 return err; 1594 1595 nadd = min_t(int, nadd << 1, SC_MAX_SEGDELTA); 1596 sci->sc_stage = prev_stage; 1597 } 1598 nilfs_segctor_truncate_segments(sci, sci->sc_curseg, nilfs->ns_sufile); 1599 return 0; 1600 1601 failed: 1602 return err; 1603 } 1604 1605 static void nilfs_list_replace_buffer(struct buffer_head *old_bh, 1606 struct buffer_head *new_bh) 1607 { 1608 BUG_ON(!list_empty(&new_bh->b_assoc_buffers)); 1609 1610 list_replace_init(&old_bh->b_assoc_buffers, &new_bh->b_assoc_buffers); 1611 /* The caller must release old_bh */ 1612 } 1613 1614 static int 1615 nilfs_segctor_update_payload_blocknr(struct nilfs_sc_info *sci, 1616 struct nilfs_segment_buffer *segbuf, 1617 int mode) 1618 { 1619 struct inode *inode = NULL; 1620 sector_t blocknr; 1621 unsigned long nfinfo = segbuf->sb_sum.nfinfo; 1622 unsigned long nblocks = 0, ndatablk = 0; 1623 struct nilfs_sc_operations *sc_op = NULL; 1624 struct nilfs_segsum_pointer ssp; 1625 struct nilfs_finfo *finfo = NULL; 1626 union nilfs_binfo binfo; 1627 struct buffer_head *bh, *bh_org; 1628 ino_t ino = 0; 1629 int err = 0; 1630 1631 if (!nfinfo) 1632 goto out; 1633 1634 blocknr = segbuf->sb_pseg_start + segbuf->sb_sum.nsumblk; 1635 ssp.bh = NILFS_SEGBUF_FIRST_BH(&segbuf->sb_segsum_buffers); 1636 ssp.offset = sizeof(struct nilfs_segment_summary); 1637 1638 list_for_each_entry(bh, &segbuf->sb_payload_buffers, b_assoc_buffers) { 1639 if (bh == sci->sc_super_root) 1640 break; 1641 if (!finfo) { 1642 finfo = nilfs_segctor_map_segsum_entry( 1643 sci, &ssp, sizeof(*finfo)); 1644 ino = le64_to_cpu(finfo->fi_ino); 1645 nblocks = le32_to_cpu(finfo->fi_nblocks); 1646 ndatablk = le32_to_cpu(finfo->fi_ndatablk); 1647 1648 if (buffer_nilfs_node(bh)) 1649 inode = NILFS_BTNC_I(bh->b_page->mapping); 1650 else 1651 inode = NILFS_AS_I(bh->b_page->mapping); 1652 1653 if (mode == SC_LSEG_DSYNC) 1654 sc_op = &nilfs_sc_dsync_ops; 1655 else if (ino == NILFS_DAT_INO) 1656 sc_op = &nilfs_sc_dat_ops; 1657 else /* file blocks */ 1658 sc_op = &nilfs_sc_file_ops; 1659 } 1660 bh_org = bh; 1661 get_bh(bh_org); 1662 err = nilfs_bmap_assign(NILFS_I(inode)->i_bmap, &bh, blocknr, 1663 &binfo); 1664 if (bh != bh_org) 1665 nilfs_list_replace_buffer(bh_org, bh); 1666 brelse(bh_org); 1667 if (unlikely(err)) 1668 goto failed_bmap; 1669 1670 if (ndatablk > 0) 1671 sc_op->write_data_binfo(sci, &ssp, &binfo); 1672 else 1673 sc_op->write_node_binfo(sci, &ssp, &binfo); 1674 1675 blocknr++; 1676 if (--nblocks == 0) { 1677 finfo = NULL; 1678 if (--nfinfo == 0) 1679 break; 1680 } else if (ndatablk > 0) 1681 ndatablk--; 1682 } 1683 out: 1684 return 0; 1685 1686 failed_bmap: 1687 err = nilfs_handle_bmap_error(err, __func__, inode, sci->sc_super); 1688 return err; 1689 } 1690 1691 static int nilfs_segctor_assign(struct nilfs_sc_info *sci, int mode) 1692 { 1693 struct nilfs_segment_buffer *segbuf; 1694 int err; 1695 1696 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) { 1697 err = nilfs_segctor_update_payload_blocknr(sci, segbuf, mode); 1698 if (unlikely(err)) 1699 return err; 1700 nilfs_segbuf_fill_in_segsum(segbuf); 1701 } 1702 return 0; 1703 } 1704 1705 static int 1706 nilfs_copy_replace_page_buffers(struct page *page, struct list_head *out) 1707 { 1708 struct page *clone_page; 1709 struct buffer_head *bh, *head, *bh2; 1710 void *kaddr; 1711 1712 bh = head = page_buffers(page); 1713 1714 clone_page = nilfs_alloc_private_page(bh->b_bdev, bh->b_size, 0); 1715 if (unlikely(!clone_page)) 1716 return -ENOMEM; 1717 1718 bh2 = page_buffers(clone_page); 1719 kaddr = kmap_atomic(page, KM_USER0); 1720 do { 1721 if (list_empty(&bh->b_assoc_buffers)) 1722 continue; 1723 get_bh(bh2); 1724 page_cache_get(clone_page); /* for each bh */ 1725 memcpy(bh2->b_data, kaddr + bh_offset(bh), bh2->b_size); 1726 bh2->b_blocknr = bh->b_blocknr; 1727 list_replace(&bh->b_assoc_buffers, &bh2->b_assoc_buffers); 1728 list_add_tail(&bh->b_assoc_buffers, out); 1729 } while (bh = bh->b_this_page, bh2 = bh2->b_this_page, bh != head); 1730 kunmap_atomic(kaddr, KM_USER0); 1731 1732 if (!TestSetPageWriteback(clone_page)) 1733 inc_zone_page_state(clone_page, NR_WRITEBACK); 1734 unlock_page(clone_page); 1735 1736 return 0; 1737 } 1738 1739 static int nilfs_test_page_to_be_frozen(struct page *page) 1740 { 1741 struct address_space *mapping = page->mapping; 1742 1743 if (!mapping || !mapping->host || S_ISDIR(mapping->host->i_mode)) 1744 return 0; 1745 1746 if (page_mapped(page)) { 1747 ClearPageChecked(page); 1748 return 1; 1749 } 1750 return PageChecked(page); 1751 } 1752 1753 static int nilfs_begin_page_io(struct page *page, struct list_head *out) 1754 { 1755 if (!page || PageWriteback(page)) 1756 /* For split b-tree node pages, this function may be called 1757 twice. We ignore the 2nd or later calls by this check. */ 1758 return 0; 1759 1760 lock_page(page); 1761 clear_page_dirty_for_io(page); 1762 set_page_writeback(page); 1763 unlock_page(page); 1764 1765 if (nilfs_test_page_to_be_frozen(page)) { 1766 int err = nilfs_copy_replace_page_buffers(page, out); 1767 if (unlikely(err)) 1768 return err; 1769 } 1770 return 0; 1771 } 1772 1773 static int nilfs_segctor_prepare_write(struct nilfs_sc_info *sci, 1774 struct page **failed_page) 1775 { 1776 struct nilfs_segment_buffer *segbuf; 1777 struct page *bd_page = NULL, *fs_page = NULL; 1778 struct list_head *list = &sci->sc_copied_buffers; 1779 int err; 1780 1781 *failed_page = NULL; 1782 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) { 1783 struct buffer_head *bh; 1784 1785 list_for_each_entry(bh, &segbuf->sb_segsum_buffers, 1786 b_assoc_buffers) { 1787 if (bh->b_page != bd_page) { 1788 if (bd_page) { 1789 lock_page(bd_page); 1790 clear_page_dirty_for_io(bd_page); 1791 set_page_writeback(bd_page); 1792 unlock_page(bd_page); 1793 } 1794 bd_page = bh->b_page; 1795 } 1796 } 1797 1798 list_for_each_entry(bh, &segbuf->sb_payload_buffers, 1799 b_assoc_buffers) { 1800 if (bh == sci->sc_super_root) { 1801 if (bh->b_page != bd_page) { 1802 lock_page(bd_page); 1803 clear_page_dirty_for_io(bd_page); 1804 set_page_writeback(bd_page); 1805 unlock_page(bd_page); 1806 bd_page = bh->b_page; 1807 } 1808 break; 1809 } 1810 if (bh->b_page != fs_page) { 1811 err = nilfs_begin_page_io(fs_page, list); 1812 if (unlikely(err)) { 1813 *failed_page = fs_page; 1814 goto out; 1815 } 1816 fs_page = bh->b_page; 1817 } 1818 } 1819 } 1820 if (bd_page) { 1821 lock_page(bd_page); 1822 clear_page_dirty_for_io(bd_page); 1823 set_page_writeback(bd_page); 1824 unlock_page(bd_page); 1825 } 1826 err = nilfs_begin_page_io(fs_page, list); 1827 if (unlikely(err)) 1828 *failed_page = fs_page; 1829 out: 1830 return err; 1831 } 1832 1833 static int nilfs_segctor_write(struct nilfs_sc_info *sci, 1834 struct backing_dev_info *bdi) 1835 { 1836 struct nilfs_segment_buffer *segbuf; 1837 struct nilfs_write_info wi; 1838 int err, res; 1839 1840 wi.sb = sci->sc_super; 1841 wi.bh_sr = sci->sc_super_root; 1842 wi.bdi = bdi; 1843 1844 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) { 1845 nilfs_segbuf_prepare_write(segbuf, &wi); 1846 err = nilfs_segbuf_write(segbuf, &wi); 1847 1848 res = nilfs_segbuf_wait(segbuf, &wi); 1849 err = unlikely(err) ? : res; 1850 if (unlikely(err)) 1851 return err; 1852 } 1853 return 0; 1854 } 1855 1856 static int nilfs_page_has_uncleared_buffer(struct page *page) 1857 { 1858 struct buffer_head *head, *bh; 1859 1860 head = bh = page_buffers(page); 1861 do { 1862 if (buffer_dirty(bh) && !list_empty(&bh->b_assoc_buffers)) 1863 return 1; 1864 bh = bh->b_this_page; 1865 } while (bh != head); 1866 return 0; 1867 } 1868 1869 static void __nilfs_end_page_io(struct page *page, int err) 1870 { 1871 if (!err) { 1872 if (!nilfs_page_buffers_clean(page)) 1873 __set_page_dirty_nobuffers(page); 1874 ClearPageError(page); 1875 } else { 1876 __set_page_dirty_nobuffers(page); 1877 SetPageError(page); 1878 } 1879 1880 if (buffer_nilfs_allocated(page_buffers(page))) { 1881 if (TestClearPageWriteback(page)) 1882 dec_zone_page_state(page, NR_WRITEBACK); 1883 } else 1884 end_page_writeback(page); 1885 } 1886 1887 static void nilfs_end_page_io(struct page *page, int err) 1888 { 1889 if (!page) 1890 return; 1891 1892 if (buffer_nilfs_node(page_buffers(page)) && 1893 nilfs_page_has_uncleared_buffer(page)) 1894 /* For b-tree node pages, this function may be called twice 1895 or more because they might be split in a segment. 1896 This check assures that cleanup has been done for all 1897 buffers in a split btnode page. */ 1898 return; 1899 1900 __nilfs_end_page_io(page, err); 1901 } 1902 1903 static void nilfs_clear_copied_buffers(struct list_head *list, int err) 1904 { 1905 struct buffer_head *bh, *head; 1906 struct page *page; 1907 1908 while (!list_empty(list)) { 1909 bh = list_entry(list->next, struct buffer_head, 1910 b_assoc_buffers); 1911 page = bh->b_page; 1912 page_cache_get(page); 1913 head = bh = page_buffers(page); 1914 do { 1915 if (!list_empty(&bh->b_assoc_buffers)) { 1916 list_del_init(&bh->b_assoc_buffers); 1917 if (!err) { 1918 set_buffer_uptodate(bh); 1919 clear_buffer_dirty(bh); 1920 clear_buffer_nilfs_volatile(bh); 1921 } 1922 brelse(bh); /* for b_assoc_buffers */ 1923 } 1924 } while ((bh = bh->b_this_page) != head); 1925 1926 __nilfs_end_page_io(page, err); 1927 page_cache_release(page); 1928 } 1929 } 1930 1931 static void nilfs_segctor_abort_write(struct nilfs_sc_info *sci, 1932 struct page *failed_page, int err) 1933 { 1934 struct nilfs_segment_buffer *segbuf; 1935 struct page *bd_page = NULL, *fs_page = NULL; 1936 1937 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) { 1938 struct buffer_head *bh; 1939 1940 list_for_each_entry(bh, &segbuf->sb_segsum_buffers, 1941 b_assoc_buffers) { 1942 if (bh->b_page != bd_page) { 1943 if (bd_page) 1944 end_page_writeback(bd_page); 1945 bd_page = bh->b_page; 1946 } 1947 } 1948 1949 list_for_each_entry(bh, &segbuf->sb_payload_buffers, 1950 b_assoc_buffers) { 1951 if (bh == sci->sc_super_root) { 1952 if (bh->b_page != bd_page) { 1953 end_page_writeback(bd_page); 1954 bd_page = bh->b_page; 1955 } 1956 break; 1957 } 1958 if (bh->b_page != fs_page) { 1959 nilfs_end_page_io(fs_page, err); 1960 if (unlikely(fs_page == failed_page)) 1961 goto done; 1962 fs_page = bh->b_page; 1963 } 1964 } 1965 } 1966 if (bd_page) 1967 end_page_writeback(bd_page); 1968 1969 nilfs_end_page_io(fs_page, err); 1970 done: 1971 nilfs_clear_copied_buffers(&sci->sc_copied_buffers, err); 1972 } 1973 1974 static void nilfs_set_next_segment(struct the_nilfs *nilfs, 1975 struct nilfs_segment_buffer *segbuf) 1976 { 1977 nilfs->ns_segnum = segbuf->sb_segnum; 1978 nilfs->ns_nextnum = segbuf->sb_nextnum; 1979 nilfs->ns_pseg_offset = segbuf->sb_pseg_start - segbuf->sb_fseg_start 1980 + segbuf->sb_sum.nblocks; 1981 nilfs->ns_seg_seq = segbuf->sb_sum.seg_seq; 1982 nilfs->ns_ctime = segbuf->sb_sum.ctime; 1983 } 1984 1985 static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci) 1986 { 1987 struct nilfs_segment_buffer *segbuf; 1988 struct page *bd_page = NULL, *fs_page = NULL; 1989 struct nilfs_sb_info *sbi = sci->sc_sbi; 1990 struct the_nilfs *nilfs = sbi->s_nilfs; 1991 int update_sr = (sci->sc_super_root != NULL); 1992 1993 list_for_each_entry(segbuf, &sci->sc_segbufs, sb_list) { 1994 struct buffer_head *bh; 1995 1996 list_for_each_entry(bh, &segbuf->sb_segsum_buffers, 1997 b_assoc_buffers) { 1998 set_buffer_uptodate(bh); 1999 clear_buffer_dirty(bh); 2000 if (bh->b_page != bd_page) { 2001 if (bd_page) 2002 end_page_writeback(bd_page); 2003 bd_page = bh->b_page; 2004 } 2005 } 2006 /* 2007 * We assume that the buffers which belong to the same page 2008 * continue over the buffer list. 2009 * Under this assumption, the last BHs of pages is 2010 * identifiable by the discontinuity of bh->b_page 2011 * (page != fs_page). 2012 * 2013 * For B-tree node blocks, however, this assumption is not 2014 * guaranteed. The cleanup code of B-tree node pages needs 2015 * special care. 2016 */ 2017 list_for_each_entry(bh, &segbuf->sb_payload_buffers, 2018 b_assoc_buffers) { 2019 set_buffer_uptodate(bh); 2020 clear_buffer_dirty(bh); 2021 clear_buffer_nilfs_volatile(bh); 2022 if (bh == sci->sc_super_root) { 2023 if (bh->b_page != bd_page) { 2024 end_page_writeback(bd_page); 2025 bd_page = bh->b_page; 2026 } 2027 break; 2028 } 2029 if (bh->b_page != fs_page) { 2030 nilfs_end_page_io(fs_page, 0); 2031 fs_page = bh->b_page; 2032 } 2033 } 2034 2035 if (!NILFS_SEG_SIMPLEX(&segbuf->sb_sum)) { 2036 if (NILFS_SEG_LOGBGN(&segbuf->sb_sum)) { 2037 set_bit(NILFS_SC_UNCLOSED, &sci->sc_flags); 2038 sci->sc_lseg_stime = jiffies; 2039 } 2040 if (NILFS_SEG_LOGEND(&segbuf->sb_sum)) 2041 clear_bit(NILFS_SC_UNCLOSED, &sci->sc_flags); 2042 } 2043 } 2044 /* 2045 * Since pages may continue over multiple segment buffers, 2046 * end of the last page must be checked outside of the loop. 2047 */ 2048 if (bd_page) 2049 end_page_writeback(bd_page); 2050 2051 nilfs_end_page_io(fs_page, 0); 2052 2053 nilfs_clear_copied_buffers(&sci->sc_copied_buffers, 0); 2054 2055 nilfs_drop_collected_inodes(&sci->sc_dirty_files); 2056 2057 if (nilfs_doing_gc()) { 2058 nilfs_drop_collected_inodes(&sci->sc_gc_inodes); 2059 if (update_sr) 2060 nilfs_commit_gcdat_inode(nilfs); 2061 } else 2062 nilfs->ns_nongc_ctime = sci->sc_seg_ctime; 2063 2064 sci->sc_nblk_inc += sci->sc_nblk_this_inc; 2065 2066 segbuf = NILFS_LAST_SEGBUF(&sci->sc_segbufs); 2067 nilfs_set_next_segment(nilfs, segbuf); 2068 2069 if (update_sr) { 2070 nilfs_set_last_segment(nilfs, segbuf->sb_pseg_start, 2071 segbuf->sb_sum.seg_seq, nilfs->ns_cno++); 2072 sbi->s_super->s_dirt = 1; 2073 2074 clear_bit(NILFS_SC_HAVE_DELTA, &sci->sc_flags); 2075 clear_bit(NILFS_SC_DIRTY, &sci->sc_flags); 2076 set_bit(NILFS_SC_SUPER_ROOT, &sci->sc_flags); 2077 } else 2078 clear_bit(NILFS_SC_SUPER_ROOT, &sci->sc_flags); 2079 } 2080 2081 static int nilfs_segctor_check_in_files(struct nilfs_sc_info *sci, 2082 struct nilfs_sb_info *sbi) 2083 { 2084 struct nilfs_inode_info *ii, *n; 2085 __u64 cno = sbi->s_nilfs->ns_cno; 2086 2087 spin_lock(&sbi->s_inode_lock); 2088 retry: 2089 list_for_each_entry_safe(ii, n, &sbi->s_dirty_files, i_dirty) { 2090 if (!ii->i_bh) { 2091 struct buffer_head *ibh; 2092 int err; 2093 2094 spin_unlock(&sbi->s_inode_lock); 2095 err = nilfs_ifile_get_inode_block( 2096 sbi->s_ifile, ii->vfs_inode.i_ino, &ibh); 2097 if (unlikely(err)) { 2098 nilfs_warning(sbi->s_super, __func__, 2099 "failed to get inode block.\n"); 2100 return err; 2101 } 2102 nilfs_mdt_mark_buffer_dirty(ibh); 2103 nilfs_mdt_mark_dirty(sbi->s_ifile); 2104 spin_lock(&sbi->s_inode_lock); 2105 if (likely(!ii->i_bh)) 2106 ii->i_bh = ibh; 2107 else 2108 brelse(ibh); 2109 goto retry; 2110 } 2111 ii->i_cno = cno; 2112 2113 clear_bit(NILFS_I_QUEUED, &ii->i_state); 2114 set_bit(NILFS_I_BUSY, &ii->i_state); 2115 list_del(&ii->i_dirty); 2116 list_add_tail(&ii->i_dirty, &sci->sc_dirty_files); 2117 } 2118 spin_unlock(&sbi->s_inode_lock); 2119 2120 NILFS_I(sbi->s_ifile)->i_cno = cno; 2121 2122 return 0; 2123 } 2124 2125 static void nilfs_segctor_check_out_files(struct nilfs_sc_info *sci, 2126 struct nilfs_sb_info *sbi) 2127 { 2128 struct nilfs_transaction_info *ti = current->journal_info; 2129 struct nilfs_inode_info *ii, *n; 2130 __u64 cno = sbi->s_nilfs->ns_cno; 2131 2132 spin_lock(&sbi->s_inode_lock); 2133 list_for_each_entry_safe(ii, n, &sci->sc_dirty_files, i_dirty) { 2134 if (!test_and_clear_bit(NILFS_I_UPDATED, &ii->i_state) || 2135 test_bit(NILFS_I_DIRTY, &ii->i_state)) { 2136 /* The current checkpoint number (=nilfs->ns_cno) is 2137 changed between check-in and check-out only if the 2138 super root is written out. So, we can update i_cno 2139 for the inodes that remain in the dirty list. */ 2140 ii->i_cno = cno; 2141 continue; 2142 } 2143 clear_bit(NILFS_I_BUSY, &ii->i_state); 2144 brelse(ii->i_bh); 2145 ii->i_bh = NULL; 2146 list_del(&ii->i_dirty); 2147 list_add_tail(&ii->i_dirty, &ti->ti_garbage); 2148 } 2149 spin_unlock(&sbi->s_inode_lock); 2150 } 2151 2152 /* 2153 * Main procedure of segment constructor 2154 */ 2155 static int nilfs_segctor_do_construct(struct nilfs_sc_info *sci, int mode) 2156 { 2157 struct nilfs_sb_info *sbi = sci->sc_sbi; 2158 struct the_nilfs *nilfs = sbi->s_nilfs; 2159 struct page *failed_page; 2160 int err, has_sr = 0; 2161 2162 sci->sc_stage.scnt = NILFS_ST_INIT; 2163 2164 err = nilfs_segctor_check_in_files(sci, sbi); 2165 if (unlikely(err)) 2166 goto out; 2167 2168 if (nilfs_test_metadata_dirty(sbi)) 2169 set_bit(NILFS_SC_DIRTY, &sci->sc_flags); 2170 2171 if (nilfs_segctor_clean(sci)) 2172 goto out; 2173 2174 do { 2175 sci->sc_stage.flags &= ~NILFS_CF_HISTORY_MASK; 2176 2177 err = nilfs_segctor_begin_construction(sci, nilfs); 2178 if (unlikely(err)) 2179 goto out; 2180 2181 /* Update time stamp */ 2182 sci->sc_seg_ctime = get_seconds(); 2183 2184 err = nilfs_segctor_collect(sci, nilfs, mode); 2185 if (unlikely(err)) 2186 goto failed; 2187 2188 has_sr = (sci->sc_super_root != NULL); 2189 2190 /* Avoid empty segment */ 2191 if (sci->sc_stage.scnt == NILFS_ST_DONE && 2192 NILFS_SEG_EMPTY(&sci->sc_curseg->sb_sum)) { 2193 nilfs_segctor_end_construction(sci, nilfs, 1); 2194 goto out; 2195 } 2196 2197 err = nilfs_segctor_assign(sci, mode); 2198 if (unlikely(err)) 2199 goto failed; 2200 2201 if (sci->sc_stage.flags & NILFS_CF_IFILE_STARTED) 2202 nilfs_segctor_fill_in_file_bmap(sci, sbi->s_ifile); 2203 2204 if (has_sr) { 2205 err = nilfs_segctor_fill_in_checkpoint(sci); 2206 if (unlikely(err)) 2207 goto failed_to_make_up; 2208 2209 nilfs_segctor_fill_in_super_root(sci, nilfs); 2210 } 2211 nilfs_segctor_update_segusage(sci, nilfs->ns_sufile); 2212 2213 /* Write partial segments */ 2214 err = nilfs_segctor_prepare_write(sci, &failed_page); 2215 if (unlikely(err)) 2216 goto failed_to_write; 2217 2218 nilfs_segctor_fill_in_checksums(sci, nilfs->ns_crc_seed); 2219 2220 err = nilfs_segctor_write(sci, nilfs->ns_bdi); 2221 if (unlikely(err)) 2222 goto failed_to_write; 2223 2224 nilfs_segctor_complete_write(sci); 2225 2226 /* Commit segments */ 2227 if (has_sr) { 2228 nilfs_segctor_commit_free_segments(sci); 2229 nilfs_segctor_clear_metadata_dirty(sci); 2230 } 2231 2232 nilfs_segctor_end_construction(sci, nilfs, 0); 2233 2234 } while (sci->sc_stage.scnt != NILFS_ST_DONE); 2235 2236 out: 2237 nilfs_segctor_destroy_segment_buffers(sci); 2238 nilfs_segctor_check_out_files(sci, sbi); 2239 return err; 2240 2241 failed_to_write: 2242 nilfs_segctor_abort_write(sci, failed_page, err); 2243 nilfs_segctor_cancel_segusage(sci, nilfs->ns_sufile); 2244 2245 failed_to_make_up: 2246 if (sci->sc_stage.flags & NILFS_CF_IFILE_STARTED) 2247 nilfs_redirty_inodes(&sci->sc_dirty_files); 2248 2249 failed: 2250 if (nilfs_doing_gc()) 2251 nilfs_redirty_inodes(&sci->sc_gc_inodes); 2252 nilfs_segctor_end_construction(sci, nilfs, err); 2253 goto out; 2254 } 2255 2256 /** 2257 * nilfs_secgtor_start_timer - set timer of background write 2258 * @sci: nilfs_sc_info 2259 * 2260 * If the timer has already been set, it ignores the new request. 2261 * This function MUST be called within a section locking the segment 2262 * semaphore. 2263 */ 2264 static void nilfs_segctor_start_timer(struct nilfs_sc_info *sci) 2265 { 2266 spin_lock(&sci->sc_state_lock); 2267 if (sci->sc_timer && !(sci->sc_state & NILFS_SEGCTOR_COMMIT)) { 2268 sci->sc_timer->expires = jiffies + sci->sc_interval; 2269 add_timer(sci->sc_timer); 2270 sci->sc_state |= NILFS_SEGCTOR_COMMIT; 2271 } 2272 spin_unlock(&sci->sc_state_lock); 2273 } 2274 2275 static void nilfs_segctor_do_flush(struct nilfs_sc_info *sci, int bn) 2276 { 2277 spin_lock(&sci->sc_state_lock); 2278 if (!(sci->sc_flush_request & (1 << bn))) { 2279 unsigned long prev_req = sci->sc_flush_request; 2280 2281 sci->sc_flush_request |= (1 << bn); 2282 if (!prev_req) 2283 wake_up(&sci->sc_wait_daemon); 2284 } 2285 spin_unlock(&sci->sc_state_lock); 2286 } 2287 2288 /** 2289 * nilfs_flush_segment - trigger a segment construction for resource control 2290 * @sb: super block 2291 * @ino: inode number of the file to be flushed out. 2292 */ 2293 void nilfs_flush_segment(struct super_block *sb, ino_t ino) 2294 { 2295 struct nilfs_sb_info *sbi = NILFS_SB(sb); 2296 struct nilfs_sc_info *sci = NILFS_SC(sbi); 2297 2298 if (!sci || nilfs_doing_construction()) 2299 return; 2300 nilfs_segctor_do_flush(sci, NILFS_MDT_INODE(sb, ino) ? ino : 0); 2301 /* assign bit 0 to data files */ 2302 } 2303 2304 int nilfs_segctor_add_segments_to_be_freed(struct nilfs_sc_info *sci, 2305 __u64 *segnum, size_t nsegs) 2306 { 2307 struct nilfs_segment_entry *ent; 2308 struct the_nilfs *nilfs = sci->sc_sbi->s_nilfs; 2309 struct inode *sufile = nilfs->ns_sufile; 2310 LIST_HEAD(list); 2311 __u64 *pnum; 2312 size_t i; 2313 int err; 2314 2315 for (pnum = segnum, i = 0; i < nsegs; pnum++, i++) { 2316 ent = nilfs_alloc_segment_entry(*pnum); 2317 if (unlikely(!ent)) { 2318 err = -ENOMEM; 2319 goto failed; 2320 } 2321 list_add_tail(&ent->list, &list); 2322 2323 err = nilfs_open_segment_entry(ent, sufile); 2324 if (unlikely(err)) 2325 goto failed; 2326 2327 if (unlikely(!nilfs_segment_usage_dirty(ent->raw_su))) 2328 printk(KERN_WARNING "NILFS: unused segment is " 2329 "requested to be cleaned (segnum=%llu)\n", 2330 (unsigned long long)ent->segnum); 2331 nilfs_close_segment_entry(ent, sufile); 2332 } 2333 list_splice(&list, sci->sc_cleaning_segments.prev); 2334 return 0; 2335 2336 failed: 2337 nilfs_dispose_segment_list(&list); 2338 return err; 2339 } 2340 2341 void nilfs_segctor_clear_segments_to_be_freed(struct nilfs_sc_info *sci) 2342 { 2343 nilfs_dispose_segment_list(&sci->sc_cleaning_segments); 2344 } 2345 2346 struct nilfs_segctor_wait_request { 2347 wait_queue_t wq; 2348 __u32 seq; 2349 int err; 2350 atomic_t done; 2351 }; 2352 2353 static int nilfs_segctor_sync(struct nilfs_sc_info *sci) 2354 { 2355 struct nilfs_segctor_wait_request wait_req; 2356 int err = 0; 2357 2358 spin_lock(&sci->sc_state_lock); 2359 init_wait(&wait_req.wq); 2360 wait_req.err = 0; 2361 atomic_set(&wait_req.done, 0); 2362 wait_req.seq = ++sci->sc_seq_request; 2363 spin_unlock(&sci->sc_state_lock); 2364 2365 init_waitqueue_entry(&wait_req.wq, current); 2366 add_wait_queue(&sci->sc_wait_request, &wait_req.wq); 2367 set_current_state(TASK_INTERRUPTIBLE); 2368 wake_up(&sci->sc_wait_daemon); 2369 2370 for (;;) { 2371 if (atomic_read(&wait_req.done)) { 2372 err = wait_req.err; 2373 break; 2374 } 2375 if (!signal_pending(current)) { 2376 schedule(); 2377 continue; 2378 } 2379 err = -ERESTARTSYS; 2380 break; 2381 } 2382 finish_wait(&sci->sc_wait_request, &wait_req.wq); 2383 return err; 2384 } 2385 2386 static void nilfs_segctor_wakeup(struct nilfs_sc_info *sci, int err) 2387 { 2388 struct nilfs_segctor_wait_request *wrq, *n; 2389 unsigned long flags; 2390 2391 spin_lock_irqsave(&sci->sc_wait_request.lock, flags); 2392 list_for_each_entry_safe(wrq, n, &sci->sc_wait_request.task_list, 2393 wq.task_list) { 2394 if (!atomic_read(&wrq->done) && 2395 nilfs_cnt32_ge(sci->sc_seq_done, wrq->seq)) { 2396 wrq->err = err; 2397 atomic_set(&wrq->done, 1); 2398 } 2399 if (atomic_read(&wrq->done)) { 2400 wrq->wq.func(&wrq->wq, 2401 TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 2402 0, NULL); 2403 } 2404 } 2405 spin_unlock_irqrestore(&sci->sc_wait_request.lock, flags); 2406 } 2407 2408 /** 2409 * nilfs_construct_segment - construct a logical segment 2410 * @sb: super block 2411 * 2412 * Return Value: On success, 0 is retured. On errors, one of the following 2413 * negative error code is returned. 2414 * 2415 * %-EROFS - Read only filesystem. 2416 * 2417 * %-EIO - I/O error 2418 * 2419 * %-ENOSPC - No space left on device (only in a panic state). 2420 * 2421 * %-ERESTARTSYS - Interrupted. 2422 * 2423 * %-ENOMEM - Insufficient memory available. 2424 */ 2425 int nilfs_construct_segment(struct super_block *sb) 2426 { 2427 struct nilfs_sb_info *sbi = NILFS_SB(sb); 2428 struct nilfs_sc_info *sci = NILFS_SC(sbi); 2429 struct nilfs_transaction_info *ti; 2430 int err; 2431 2432 if (!sci) 2433 return -EROFS; 2434 2435 /* A call inside transactions causes a deadlock. */ 2436 BUG_ON((ti = current->journal_info) && ti->ti_magic == NILFS_TI_MAGIC); 2437 2438 err = nilfs_segctor_sync(sci); 2439 return err; 2440 } 2441 2442 /** 2443 * nilfs_construct_dsync_segment - construct a data-only logical segment 2444 * @sb: super block 2445 * @inode: inode whose data blocks should be written out 2446 * @start: start byte offset 2447 * @end: end byte offset (inclusive) 2448 * 2449 * Return Value: On success, 0 is retured. On errors, one of the following 2450 * negative error code is returned. 2451 * 2452 * %-EROFS - Read only filesystem. 2453 * 2454 * %-EIO - I/O error 2455 * 2456 * %-ENOSPC - No space left on device (only in a panic state). 2457 * 2458 * %-ERESTARTSYS - Interrupted. 2459 * 2460 * %-ENOMEM - Insufficient memory available. 2461 */ 2462 int nilfs_construct_dsync_segment(struct super_block *sb, struct inode *inode, 2463 loff_t start, loff_t end) 2464 { 2465 struct nilfs_sb_info *sbi = NILFS_SB(sb); 2466 struct nilfs_sc_info *sci = NILFS_SC(sbi); 2467 struct nilfs_inode_info *ii; 2468 struct nilfs_transaction_info ti; 2469 int err = 0; 2470 2471 if (!sci) 2472 return -EROFS; 2473 2474 nilfs_transaction_lock(sbi, &ti, 0); 2475 2476 ii = NILFS_I(inode); 2477 if (test_bit(NILFS_I_INODE_DIRTY, &ii->i_state) || 2478 nilfs_test_opt(sbi, STRICT_ORDER) || 2479 test_bit(NILFS_SC_UNCLOSED, &sci->sc_flags) || 2480 nilfs_discontinued(sbi->s_nilfs)) { 2481 nilfs_transaction_unlock(sbi); 2482 err = nilfs_segctor_sync(sci); 2483 return err; 2484 } 2485 2486 spin_lock(&sbi->s_inode_lock); 2487 if (!test_bit(NILFS_I_QUEUED, &ii->i_state) && 2488 !test_bit(NILFS_I_BUSY, &ii->i_state)) { 2489 spin_unlock(&sbi->s_inode_lock); 2490 nilfs_transaction_unlock(sbi); 2491 return 0; 2492 } 2493 spin_unlock(&sbi->s_inode_lock); 2494 sci->sc_dsync_inode = ii; 2495 sci->sc_dsync_start = start; 2496 sci->sc_dsync_end = end; 2497 2498 err = nilfs_segctor_do_construct(sci, SC_LSEG_DSYNC); 2499 2500 nilfs_transaction_unlock(sbi); 2501 return err; 2502 } 2503 2504 struct nilfs_segctor_req { 2505 int mode; 2506 __u32 seq_accepted; 2507 int sc_err; /* construction failure */ 2508 int sb_err; /* super block writeback failure */ 2509 }; 2510 2511 #define FLUSH_FILE_BIT (0x1) /* data file only */ 2512 #define FLUSH_DAT_BIT (1 << NILFS_DAT_INO) /* DAT only */ 2513 2514 static void nilfs_segctor_accept(struct nilfs_sc_info *sci, 2515 struct nilfs_segctor_req *req) 2516 { 2517 req->sc_err = req->sb_err = 0; 2518 spin_lock(&sci->sc_state_lock); 2519 req->seq_accepted = sci->sc_seq_request; 2520 spin_unlock(&sci->sc_state_lock); 2521 2522 if (sci->sc_timer) 2523 del_timer_sync(sci->sc_timer); 2524 } 2525 2526 static void nilfs_segctor_notify(struct nilfs_sc_info *sci, 2527 struct nilfs_segctor_req *req) 2528 { 2529 /* Clear requests (even when the construction failed) */ 2530 spin_lock(&sci->sc_state_lock); 2531 2532 sci->sc_state &= ~NILFS_SEGCTOR_COMMIT; 2533 2534 if (req->mode == SC_LSEG_SR) { 2535 sci->sc_seq_done = req->seq_accepted; 2536 nilfs_segctor_wakeup(sci, req->sc_err ? : req->sb_err); 2537 sci->sc_flush_request = 0; 2538 } else if (req->mode == SC_FLUSH_FILE) 2539 sci->sc_flush_request &= ~FLUSH_FILE_BIT; 2540 else if (req->mode == SC_FLUSH_DAT) 2541 sci->sc_flush_request &= ~FLUSH_DAT_BIT; 2542 2543 spin_unlock(&sci->sc_state_lock); 2544 } 2545 2546 static int nilfs_segctor_construct(struct nilfs_sc_info *sci, 2547 struct nilfs_segctor_req *req) 2548 { 2549 struct nilfs_sb_info *sbi = sci->sc_sbi; 2550 struct the_nilfs *nilfs = sbi->s_nilfs; 2551 int err = 0; 2552 2553 if (nilfs_discontinued(nilfs)) 2554 req->mode = SC_LSEG_SR; 2555 if (!nilfs_segctor_confirm(sci)) { 2556 err = nilfs_segctor_do_construct(sci, req->mode); 2557 req->sc_err = err; 2558 } 2559 if (likely(!err)) { 2560 if (req->mode != SC_FLUSH_DAT) 2561 atomic_set(&nilfs->ns_ndirtyblks, 0); 2562 if (test_bit(NILFS_SC_SUPER_ROOT, &sci->sc_flags) && 2563 nilfs_discontinued(nilfs)) { 2564 down_write(&nilfs->ns_sem); 2565 req->sb_err = nilfs_commit_super(sbi, 0); 2566 up_write(&nilfs->ns_sem); 2567 } 2568 } 2569 return err; 2570 } 2571 2572 static void nilfs_construction_timeout(unsigned long data) 2573 { 2574 struct task_struct *p = (struct task_struct *)data; 2575 wake_up_process(p); 2576 } 2577 2578 static void 2579 nilfs_remove_written_gcinodes(struct the_nilfs *nilfs, struct list_head *head) 2580 { 2581 struct nilfs_inode_info *ii, *n; 2582 2583 list_for_each_entry_safe(ii, n, head, i_dirty) { 2584 if (!test_bit(NILFS_I_UPDATED, &ii->i_state)) 2585 continue; 2586 hlist_del_init(&ii->vfs_inode.i_hash); 2587 list_del_init(&ii->i_dirty); 2588 nilfs_clear_gcinode(&ii->vfs_inode); 2589 } 2590 } 2591 2592 int nilfs_clean_segments(struct super_block *sb, struct nilfs_argv *argv, 2593 void **kbufs) 2594 { 2595 struct nilfs_sb_info *sbi = NILFS_SB(sb); 2596 struct nilfs_sc_info *sci = NILFS_SC(sbi); 2597 struct the_nilfs *nilfs = sbi->s_nilfs; 2598 struct nilfs_transaction_info ti; 2599 struct nilfs_segctor_req req = { .mode = SC_LSEG_SR }; 2600 int err; 2601 2602 if (unlikely(!sci)) 2603 return -EROFS; 2604 2605 nilfs_transaction_lock(sbi, &ti, 1); 2606 2607 err = nilfs_init_gcdat_inode(nilfs); 2608 if (unlikely(err)) 2609 goto out_unlock; 2610 err = nilfs_ioctl_prepare_clean_segments(nilfs, argv, kbufs); 2611 if (unlikely(err)) 2612 goto out_unlock; 2613 2614 list_splice_init(&nilfs->ns_gc_inodes, sci->sc_gc_inodes.prev); 2615 2616 for (;;) { 2617 nilfs_segctor_accept(sci, &req); 2618 err = nilfs_segctor_construct(sci, &req); 2619 nilfs_remove_written_gcinodes(nilfs, &sci->sc_gc_inodes); 2620 nilfs_segctor_notify(sci, &req); 2621 2622 if (likely(!err)) 2623 break; 2624 2625 nilfs_warning(sb, __func__, 2626 "segment construction failed. (err=%d)", err); 2627 set_current_state(TASK_INTERRUPTIBLE); 2628 schedule_timeout(sci->sc_interval); 2629 } 2630 2631 out_unlock: 2632 nilfs_clear_gcdat_inode(nilfs); 2633 nilfs_transaction_unlock(sbi); 2634 return err; 2635 } 2636 2637 static void nilfs_segctor_thread_construct(struct nilfs_sc_info *sci, int mode) 2638 { 2639 struct nilfs_sb_info *sbi = sci->sc_sbi; 2640 struct nilfs_transaction_info ti; 2641 struct nilfs_segctor_req req = { .mode = mode }; 2642 2643 nilfs_transaction_lock(sbi, &ti, 0); 2644 2645 nilfs_segctor_accept(sci, &req); 2646 nilfs_segctor_construct(sci, &req); 2647 nilfs_segctor_notify(sci, &req); 2648 2649 /* 2650 * Unclosed segment should be retried. We do this using sc_timer. 2651 * Timeout of sc_timer will invoke complete construction which leads 2652 * to close the current logical segment. 2653 */ 2654 if (test_bit(NILFS_SC_UNCLOSED, &sci->sc_flags)) 2655 nilfs_segctor_start_timer(sci); 2656 2657 nilfs_transaction_unlock(sbi); 2658 } 2659 2660 static void nilfs_segctor_do_immediate_flush(struct nilfs_sc_info *sci) 2661 { 2662 int mode = 0; 2663 int err; 2664 2665 spin_lock(&sci->sc_state_lock); 2666 mode = (sci->sc_flush_request & FLUSH_DAT_BIT) ? 2667 SC_FLUSH_DAT : SC_FLUSH_FILE; 2668 spin_unlock(&sci->sc_state_lock); 2669 2670 if (mode) { 2671 err = nilfs_segctor_do_construct(sci, mode); 2672 2673 spin_lock(&sci->sc_state_lock); 2674 sci->sc_flush_request &= (mode == SC_FLUSH_FILE) ? 2675 ~FLUSH_FILE_BIT : ~FLUSH_DAT_BIT; 2676 spin_unlock(&sci->sc_state_lock); 2677 } 2678 clear_bit(NILFS_SC_PRIOR_FLUSH, &sci->sc_flags); 2679 } 2680 2681 static int nilfs_segctor_flush_mode(struct nilfs_sc_info *sci) 2682 { 2683 if (!test_bit(NILFS_SC_UNCLOSED, &sci->sc_flags) || 2684 time_before(jiffies, sci->sc_lseg_stime + sci->sc_mjcp_freq)) { 2685 if (!(sci->sc_flush_request & ~FLUSH_FILE_BIT)) 2686 return SC_FLUSH_FILE; 2687 else if (!(sci->sc_flush_request & ~FLUSH_DAT_BIT)) 2688 return SC_FLUSH_DAT; 2689 } 2690 return SC_LSEG_SR; 2691 } 2692 2693 /** 2694 * nilfs_segctor_thread - main loop of the segment constructor thread. 2695 * @arg: pointer to a struct nilfs_sc_info. 2696 * 2697 * nilfs_segctor_thread() initializes a timer and serves as a daemon 2698 * to execute segment constructions. 2699 */ 2700 static int nilfs_segctor_thread(void *arg) 2701 { 2702 struct nilfs_sc_info *sci = (struct nilfs_sc_info *)arg; 2703 struct timer_list timer; 2704 int timeout = 0; 2705 2706 init_timer(&timer); 2707 timer.data = (unsigned long)current; 2708 timer.function = nilfs_construction_timeout; 2709 sci->sc_timer = &timer; 2710 2711 /* start sync. */ 2712 sci->sc_task = current; 2713 wake_up(&sci->sc_wait_task); /* for nilfs_segctor_start_thread() */ 2714 printk(KERN_INFO 2715 "segctord starting. Construction interval = %lu seconds, " 2716 "CP frequency < %lu seconds\n", 2717 sci->sc_interval / HZ, sci->sc_mjcp_freq / HZ); 2718 2719 spin_lock(&sci->sc_state_lock); 2720 loop: 2721 for (;;) { 2722 int mode; 2723 2724 if (sci->sc_state & NILFS_SEGCTOR_QUIT) 2725 goto end_thread; 2726 2727 if (timeout || sci->sc_seq_request != sci->sc_seq_done) 2728 mode = SC_LSEG_SR; 2729 else if (!sci->sc_flush_request) 2730 break; 2731 else 2732 mode = nilfs_segctor_flush_mode(sci); 2733 2734 spin_unlock(&sci->sc_state_lock); 2735 nilfs_segctor_thread_construct(sci, mode); 2736 spin_lock(&sci->sc_state_lock); 2737 timeout = 0; 2738 } 2739 2740 2741 if (freezing(current)) { 2742 spin_unlock(&sci->sc_state_lock); 2743 refrigerator(); 2744 spin_lock(&sci->sc_state_lock); 2745 } else { 2746 DEFINE_WAIT(wait); 2747 int should_sleep = 1; 2748 2749 prepare_to_wait(&sci->sc_wait_daemon, &wait, 2750 TASK_INTERRUPTIBLE); 2751 2752 if (sci->sc_seq_request != sci->sc_seq_done) 2753 should_sleep = 0; 2754 else if (sci->sc_flush_request) 2755 should_sleep = 0; 2756 else if (sci->sc_state & NILFS_SEGCTOR_COMMIT) 2757 should_sleep = time_before(jiffies, 2758 sci->sc_timer->expires); 2759 2760 if (should_sleep) { 2761 spin_unlock(&sci->sc_state_lock); 2762 schedule(); 2763 spin_lock(&sci->sc_state_lock); 2764 } 2765 finish_wait(&sci->sc_wait_daemon, &wait); 2766 timeout = ((sci->sc_state & NILFS_SEGCTOR_COMMIT) && 2767 time_after_eq(jiffies, sci->sc_timer->expires)); 2768 } 2769 goto loop; 2770 2771 end_thread: 2772 spin_unlock(&sci->sc_state_lock); 2773 del_timer_sync(sci->sc_timer); 2774 sci->sc_timer = NULL; 2775 2776 /* end sync. */ 2777 sci->sc_task = NULL; 2778 wake_up(&sci->sc_wait_task); /* for nilfs_segctor_kill_thread() */ 2779 return 0; 2780 } 2781 2782 static int nilfs_segctor_start_thread(struct nilfs_sc_info *sci) 2783 { 2784 struct task_struct *t; 2785 2786 t = kthread_run(nilfs_segctor_thread, sci, "segctord"); 2787 if (IS_ERR(t)) { 2788 int err = PTR_ERR(t); 2789 2790 printk(KERN_ERR "NILFS: error %d creating segctord thread\n", 2791 err); 2792 return err; 2793 } 2794 wait_event(sci->sc_wait_task, sci->sc_task != NULL); 2795 return 0; 2796 } 2797 2798 static void nilfs_segctor_kill_thread(struct nilfs_sc_info *sci) 2799 { 2800 sci->sc_state |= NILFS_SEGCTOR_QUIT; 2801 2802 while (sci->sc_task) { 2803 wake_up(&sci->sc_wait_daemon); 2804 spin_unlock(&sci->sc_state_lock); 2805 wait_event(sci->sc_wait_task, sci->sc_task == NULL); 2806 spin_lock(&sci->sc_state_lock); 2807 } 2808 } 2809 2810 static int nilfs_segctor_init(struct nilfs_sc_info *sci) 2811 { 2812 sci->sc_seq_done = sci->sc_seq_request; 2813 2814 return nilfs_segctor_start_thread(sci); 2815 } 2816 2817 /* 2818 * Setup & clean-up functions 2819 */ 2820 static struct nilfs_sc_info *nilfs_segctor_new(struct nilfs_sb_info *sbi) 2821 { 2822 struct nilfs_sc_info *sci; 2823 2824 sci = kzalloc(sizeof(*sci), GFP_KERNEL); 2825 if (!sci) 2826 return NULL; 2827 2828 sci->sc_sbi = sbi; 2829 sci->sc_super = sbi->s_super; 2830 2831 init_waitqueue_head(&sci->sc_wait_request); 2832 init_waitqueue_head(&sci->sc_wait_daemon); 2833 init_waitqueue_head(&sci->sc_wait_task); 2834 spin_lock_init(&sci->sc_state_lock); 2835 INIT_LIST_HEAD(&sci->sc_dirty_files); 2836 INIT_LIST_HEAD(&sci->sc_segbufs); 2837 INIT_LIST_HEAD(&sci->sc_gc_inodes); 2838 INIT_LIST_HEAD(&sci->sc_cleaning_segments); 2839 INIT_LIST_HEAD(&sci->sc_copied_buffers); 2840 2841 sci->sc_interval = HZ * NILFS_SC_DEFAULT_TIMEOUT; 2842 sci->sc_mjcp_freq = HZ * NILFS_SC_DEFAULT_SR_FREQ; 2843 sci->sc_watermark = NILFS_SC_DEFAULT_WATERMARK; 2844 2845 if (sbi->s_interval) 2846 sci->sc_interval = sbi->s_interval; 2847 if (sbi->s_watermark) 2848 sci->sc_watermark = sbi->s_watermark; 2849 return sci; 2850 } 2851 2852 static void nilfs_segctor_write_out(struct nilfs_sc_info *sci) 2853 { 2854 int ret, retrycount = NILFS_SC_CLEANUP_RETRY; 2855 2856 /* The segctord thread was stopped and its timer was removed. 2857 But some tasks remain. */ 2858 do { 2859 struct nilfs_sb_info *sbi = sci->sc_sbi; 2860 struct nilfs_transaction_info ti; 2861 struct nilfs_segctor_req req = { .mode = SC_LSEG_SR }; 2862 2863 nilfs_transaction_lock(sbi, &ti, 0); 2864 nilfs_segctor_accept(sci, &req); 2865 ret = nilfs_segctor_construct(sci, &req); 2866 nilfs_segctor_notify(sci, &req); 2867 nilfs_transaction_unlock(sbi); 2868 2869 } while (ret && retrycount-- > 0); 2870 } 2871 2872 /** 2873 * nilfs_segctor_destroy - destroy the segment constructor. 2874 * @sci: nilfs_sc_info 2875 * 2876 * nilfs_segctor_destroy() kills the segctord thread and frees 2877 * the nilfs_sc_info struct. 2878 * Caller must hold the segment semaphore. 2879 */ 2880 static void nilfs_segctor_destroy(struct nilfs_sc_info *sci) 2881 { 2882 struct nilfs_sb_info *sbi = sci->sc_sbi; 2883 int flag; 2884 2885 up_write(&sbi->s_nilfs->ns_segctor_sem); 2886 2887 spin_lock(&sci->sc_state_lock); 2888 nilfs_segctor_kill_thread(sci); 2889 flag = ((sci->sc_state & NILFS_SEGCTOR_COMMIT) || sci->sc_flush_request 2890 || sci->sc_seq_request != sci->sc_seq_done); 2891 spin_unlock(&sci->sc_state_lock); 2892 2893 if (flag || nilfs_segctor_confirm(sci)) 2894 nilfs_segctor_write_out(sci); 2895 2896 WARN_ON(!list_empty(&sci->sc_copied_buffers)); 2897 2898 if (!list_empty(&sci->sc_dirty_files)) { 2899 nilfs_warning(sbi->s_super, __func__, 2900 "dirty file(s) after the final construction\n"); 2901 nilfs_dispose_list(sbi, &sci->sc_dirty_files, 1); 2902 } 2903 2904 if (!list_empty(&sci->sc_cleaning_segments)) 2905 nilfs_dispose_segment_list(&sci->sc_cleaning_segments); 2906 2907 WARN_ON(!list_empty(&sci->sc_segbufs)); 2908 2909 down_write(&sbi->s_nilfs->ns_segctor_sem); 2910 2911 kfree(sci); 2912 } 2913 2914 /** 2915 * nilfs_attach_segment_constructor - attach a segment constructor 2916 * @sbi: nilfs_sb_info 2917 * 2918 * nilfs_attach_segment_constructor() allocates a struct nilfs_sc_info, 2919 * initilizes it, and starts the segment constructor. 2920 * 2921 * Return Value: On success, 0 is returned. On error, one of the following 2922 * negative error code is returned. 2923 * 2924 * %-ENOMEM - Insufficient memory available. 2925 */ 2926 int nilfs_attach_segment_constructor(struct nilfs_sb_info *sbi) 2927 { 2928 struct the_nilfs *nilfs = sbi->s_nilfs; 2929 int err; 2930 2931 /* Each field of nilfs_segctor is cleared through the initialization 2932 of super-block info */ 2933 sbi->s_sc_info = nilfs_segctor_new(sbi); 2934 if (!sbi->s_sc_info) 2935 return -ENOMEM; 2936 2937 nilfs_attach_writer(nilfs, sbi); 2938 err = nilfs_segctor_init(NILFS_SC(sbi)); 2939 if (err) { 2940 nilfs_detach_writer(nilfs, sbi); 2941 kfree(sbi->s_sc_info); 2942 sbi->s_sc_info = NULL; 2943 } 2944 return err; 2945 } 2946 2947 /** 2948 * nilfs_detach_segment_constructor - destroy the segment constructor 2949 * @sbi: nilfs_sb_info 2950 * 2951 * nilfs_detach_segment_constructor() kills the segment constructor daemon, 2952 * frees the struct nilfs_sc_info, and destroy the dirty file list. 2953 */ 2954 void nilfs_detach_segment_constructor(struct nilfs_sb_info *sbi) 2955 { 2956 struct the_nilfs *nilfs = sbi->s_nilfs; 2957 LIST_HEAD(garbage_list); 2958 2959 down_write(&nilfs->ns_segctor_sem); 2960 if (NILFS_SC(sbi)) { 2961 nilfs_segctor_destroy(NILFS_SC(sbi)); 2962 sbi->s_sc_info = NULL; 2963 } 2964 2965 /* Force to free the list of dirty files */ 2966 spin_lock(&sbi->s_inode_lock); 2967 if (!list_empty(&sbi->s_dirty_files)) { 2968 list_splice_init(&sbi->s_dirty_files, &garbage_list); 2969 nilfs_warning(sbi->s_super, __func__, 2970 "Non empty dirty list after the last " 2971 "segment construction\n"); 2972 } 2973 spin_unlock(&sbi->s_inode_lock); 2974 up_write(&nilfs->ns_segctor_sem); 2975 2976 nilfs_dispose_list(sbi, &garbage_list, 1); 2977 nilfs_detach_writer(nilfs, sbi); 2978 } 2979