1 /* 2 * the_nilfs.c - the_nilfs shared structure. 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/buffer_head.h> 25 #include <linux/slab.h> 26 #include <linux/blkdev.h> 27 #include <linux/backing-dev.h> 28 #include <linux/crc32.h> 29 #include "nilfs.h" 30 #include "segment.h" 31 #include "alloc.h" 32 #include "cpfile.h" 33 #include "sufile.h" 34 #include "dat.h" 35 #include "segbuf.h" 36 37 38 static LIST_HEAD(nilfs_objects); 39 static DEFINE_SPINLOCK(nilfs_lock); 40 41 static int nilfs_valid_sb(struct nilfs_super_block *sbp); 42 43 void nilfs_set_last_segment(struct the_nilfs *nilfs, 44 sector_t start_blocknr, u64 seq, __u64 cno) 45 { 46 spin_lock(&nilfs->ns_last_segment_lock); 47 nilfs->ns_last_pseg = start_blocknr; 48 nilfs->ns_last_seq = seq; 49 nilfs->ns_last_cno = cno; 50 51 if (!nilfs_sb_dirty(nilfs)) { 52 if (nilfs->ns_prev_seq == nilfs->ns_last_seq) 53 goto stay_cursor; 54 55 set_nilfs_sb_dirty(nilfs); 56 } 57 nilfs->ns_prev_seq = nilfs->ns_last_seq; 58 59 stay_cursor: 60 spin_unlock(&nilfs->ns_last_segment_lock); 61 } 62 63 /** 64 * alloc_nilfs - allocate the_nilfs structure 65 * @bdev: block device to which the_nilfs is related 66 * 67 * alloc_nilfs() allocates memory for the_nilfs and 68 * initializes its reference count and locks. 69 * 70 * Return Value: On success, pointer to the_nilfs is returned. 71 * On error, NULL is returned. 72 */ 73 static struct the_nilfs *alloc_nilfs(struct block_device *bdev) 74 { 75 struct the_nilfs *nilfs; 76 77 nilfs = kzalloc(sizeof(*nilfs), GFP_KERNEL); 78 if (!nilfs) 79 return NULL; 80 81 nilfs->ns_bdev = bdev; 82 atomic_set(&nilfs->ns_count, 1); 83 atomic_set(&nilfs->ns_ndirtyblks, 0); 84 init_rwsem(&nilfs->ns_sem); 85 init_rwsem(&nilfs->ns_super_sem); 86 mutex_init(&nilfs->ns_mount_mutex); 87 init_rwsem(&nilfs->ns_writer_sem); 88 INIT_LIST_HEAD(&nilfs->ns_list); 89 INIT_LIST_HEAD(&nilfs->ns_supers); 90 spin_lock_init(&nilfs->ns_last_segment_lock); 91 nilfs->ns_gc_inodes_h = NULL; 92 init_rwsem(&nilfs->ns_segctor_sem); 93 94 return nilfs; 95 } 96 97 /** 98 * find_or_create_nilfs - find or create nilfs object 99 * @bdev: block device to which the_nilfs is related 100 * 101 * find_nilfs() looks up an existent nilfs object created on the 102 * device and gets the reference count of the object. If no nilfs object 103 * is found on the device, a new nilfs object is allocated. 104 * 105 * Return Value: On success, pointer to the nilfs object is returned. 106 * On error, NULL is returned. 107 */ 108 struct the_nilfs *find_or_create_nilfs(struct block_device *bdev) 109 { 110 struct the_nilfs *nilfs, *new = NULL; 111 112 retry: 113 spin_lock(&nilfs_lock); 114 list_for_each_entry(nilfs, &nilfs_objects, ns_list) { 115 if (nilfs->ns_bdev == bdev) { 116 get_nilfs(nilfs); 117 spin_unlock(&nilfs_lock); 118 if (new) 119 put_nilfs(new); 120 return nilfs; /* existing object */ 121 } 122 } 123 if (new) { 124 list_add_tail(&new->ns_list, &nilfs_objects); 125 spin_unlock(&nilfs_lock); 126 return new; /* new object */ 127 } 128 spin_unlock(&nilfs_lock); 129 130 new = alloc_nilfs(bdev); 131 if (new) 132 goto retry; 133 return NULL; /* insufficient memory */ 134 } 135 136 /** 137 * put_nilfs - release a reference to the_nilfs 138 * @nilfs: the_nilfs structure to be released 139 * 140 * put_nilfs() decrements a reference counter of the_nilfs. 141 * If the reference count reaches zero, the_nilfs is freed. 142 */ 143 void put_nilfs(struct the_nilfs *nilfs) 144 { 145 spin_lock(&nilfs_lock); 146 if (!atomic_dec_and_test(&nilfs->ns_count)) { 147 spin_unlock(&nilfs_lock); 148 return; 149 } 150 list_del_init(&nilfs->ns_list); 151 spin_unlock(&nilfs_lock); 152 153 /* 154 * Increment of ns_count never occurs below because the caller 155 * of get_nilfs() holds at least one reference to the_nilfs. 156 * Thus its exclusion control is not required here. 157 */ 158 159 might_sleep(); 160 if (nilfs_loaded(nilfs)) { 161 nilfs_mdt_destroy(nilfs->ns_sufile); 162 nilfs_mdt_destroy(nilfs->ns_cpfile); 163 nilfs_mdt_destroy(nilfs->ns_dat); 164 nilfs_mdt_destroy(nilfs->ns_gc_dat); 165 } 166 if (nilfs_init(nilfs)) { 167 nilfs_destroy_gccache(nilfs); 168 brelse(nilfs->ns_sbh[0]); 169 brelse(nilfs->ns_sbh[1]); 170 } 171 kfree(nilfs); 172 } 173 174 static int nilfs_load_super_root(struct the_nilfs *nilfs, sector_t sr_block) 175 { 176 struct buffer_head *bh_sr; 177 struct nilfs_super_root *raw_sr; 178 struct nilfs_super_block **sbp = nilfs->ns_sbp; 179 unsigned dat_entry_size, segment_usage_size, checkpoint_size; 180 unsigned inode_size; 181 int err; 182 183 err = nilfs_read_super_root_block(nilfs, sr_block, &bh_sr, 1); 184 if (unlikely(err)) 185 return err; 186 187 down_read(&nilfs->ns_sem); 188 dat_entry_size = le16_to_cpu(sbp[0]->s_dat_entry_size); 189 checkpoint_size = le16_to_cpu(sbp[0]->s_checkpoint_size); 190 segment_usage_size = le16_to_cpu(sbp[0]->s_segment_usage_size); 191 up_read(&nilfs->ns_sem); 192 193 inode_size = nilfs->ns_inode_size; 194 195 err = -ENOMEM; 196 nilfs->ns_dat = nilfs_dat_new(nilfs, dat_entry_size); 197 if (unlikely(!nilfs->ns_dat)) 198 goto failed; 199 200 nilfs->ns_gc_dat = nilfs_dat_new(nilfs, dat_entry_size); 201 if (unlikely(!nilfs->ns_gc_dat)) 202 goto failed_dat; 203 204 nilfs->ns_cpfile = nilfs_cpfile_new(nilfs, checkpoint_size); 205 if (unlikely(!nilfs->ns_cpfile)) 206 goto failed_gc_dat; 207 208 nilfs->ns_sufile = nilfs_sufile_new(nilfs, segment_usage_size); 209 if (unlikely(!nilfs->ns_sufile)) 210 goto failed_cpfile; 211 212 nilfs_mdt_set_shadow(nilfs->ns_dat, nilfs->ns_gc_dat); 213 214 err = nilfs_dat_read(nilfs->ns_dat, (void *)bh_sr->b_data + 215 NILFS_SR_DAT_OFFSET(inode_size)); 216 if (unlikely(err)) 217 goto failed_sufile; 218 219 err = nilfs_cpfile_read(nilfs->ns_cpfile, (void *)bh_sr->b_data + 220 NILFS_SR_CPFILE_OFFSET(inode_size)); 221 if (unlikely(err)) 222 goto failed_sufile; 223 224 err = nilfs_sufile_read(nilfs->ns_sufile, (void *)bh_sr->b_data + 225 NILFS_SR_SUFILE_OFFSET(inode_size)); 226 if (unlikely(err)) 227 goto failed_sufile; 228 229 raw_sr = (struct nilfs_super_root *)bh_sr->b_data; 230 nilfs->ns_nongc_ctime = le64_to_cpu(raw_sr->sr_nongc_ctime); 231 232 failed: 233 brelse(bh_sr); 234 return err; 235 236 failed_sufile: 237 nilfs_mdt_destroy(nilfs->ns_sufile); 238 239 failed_cpfile: 240 nilfs_mdt_destroy(nilfs->ns_cpfile); 241 242 failed_gc_dat: 243 nilfs_mdt_destroy(nilfs->ns_gc_dat); 244 245 failed_dat: 246 nilfs_mdt_destroy(nilfs->ns_dat); 247 goto failed; 248 } 249 250 static void nilfs_init_recovery_info(struct nilfs_recovery_info *ri) 251 { 252 memset(ri, 0, sizeof(*ri)); 253 INIT_LIST_HEAD(&ri->ri_used_segments); 254 } 255 256 static void nilfs_clear_recovery_info(struct nilfs_recovery_info *ri) 257 { 258 nilfs_dispose_segment_list(&ri->ri_used_segments); 259 } 260 261 /** 262 * nilfs_store_log_cursor - load log cursor from a super block 263 * @nilfs: nilfs object 264 * @sbp: buffer storing super block to be read 265 * 266 * nilfs_store_log_cursor() reads the last position of the log 267 * containing a super root from a given super block, and initializes 268 * relevant information on the nilfs object preparatory for log 269 * scanning and recovery. 270 */ 271 static int nilfs_store_log_cursor(struct the_nilfs *nilfs, 272 struct nilfs_super_block *sbp) 273 { 274 int ret = 0; 275 276 nilfs->ns_last_pseg = le64_to_cpu(sbp->s_last_pseg); 277 nilfs->ns_last_cno = le64_to_cpu(sbp->s_last_cno); 278 nilfs->ns_last_seq = le64_to_cpu(sbp->s_last_seq); 279 280 nilfs->ns_prev_seq = nilfs->ns_last_seq; 281 nilfs->ns_seg_seq = nilfs->ns_last_seq; 282 nilfs->ns_segnum = 283 nilfs_get_segnum_of_block(nilfs, nilfs->ns_last_pseg); 284 nilfs->ns_cno = nilfs->ns_last_cno + 1; 285 if (nilfs->ns_segnum >= nilfs->ns_nsegments) { 286 printk(KERN_ERR "NILFS invalid last segment number.\n"); 287 ret = -EINVAL; 288 } 289 return ret; 290 } 291 292 /** 293 * load_nilfs - load and recover the nilfs 294 * @nilfs: the_nilfs structure to be released 295 * @sbi: nilfs_sb_info used to recover past segment 296 * 297 * load_nilfs() searches and load the latest super root, 298 * attaches the last segment, and does recovery if needed. 299 * The caller must call this exclusively for simultaneous mounts. 300 */ 301 int load_nilfs(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi) 302 { 303 struct nilfs_recovery_info ri; 304 unsigned int s_flags = sbi->s_super->s_flags; 305 int really_read_only = bdev_read_only(nilfs->ns_bdev); 306 int valid_fs = nilfs_valid_fs(nilfs); 307 int err; 308 309 if (nilfs_loaded(nilfs)) { 310 if (valid_fs || 311 ((s_flags & MS_RDONLY) && nilfs_test_opt(sbi, NORECOVERY))) 312 return 0; 313 printk(KERN_ERR "NILFS: the filesystem is in an incomplete " 314 "recovery state.\n"); 315 return -EINVAL; 316 } 317 318 if (!valid_fs) { 319 printk(KERN_WARNING "NILFS warning: mounting unchecked fs\n"); 320 if (s_flags & MS_RDONLY) { 321 printk(KERN_INFO "NILFS: INFO: recovery " 322 "required for readonly filesystem.\n"); 323 printk(KERN_INFO "NILFS: write access will " 324 "be enabled during recovery.\n"); 325 } 326 } 327 328 nilfs_init_recovery_info(&ri); 329 330 err = nilfs_search_super_root(nilfs, &ri); 331 if (unlikely(err)) { 332 struct nilfs_super_block **sbp = nilfs->ns_sbp; 333 int blocksize; 334 335 if (err != -EINVAL) 336 goto scan_error; 337 338 if (!nilfs_valid_sb(sbp[1])) { 339 printk(KERN_WARNING 340 "NILFS warning: unable to fall back to spare" 341 "super block\n"); 342 goto scan_error; 343 } 344 printk(KERN_INFO 345 "NILFS: try rollback from an earlier position\n"); 346 347 /* 348 * restore super block with its spare and reconfigure 349 * relevant states of the nilfs object. 350 */ 351 memcpy(sbp[0], sbp[1], nilfs->ns_sbsize); 352 nilfs->ns_crc_seed = le32_to_cpu(sbp[0]->s_crc_seed); 353 nilfs->ns_sbwtime = le64_to_cpu(sbp[0]->s_wtime); 354 355 /* verify consistency between two super blocks */ 356 blocksize = BLOCK_SIZE << le32_to_cpu(sbp[0]->s_log_block_size); 357 if (blocksize != nilfs->ns_blocksize) { 358 printk(KERN_WARNING 359 "NILFS warning: blocksize differs between " 360 "two super blocks (%d != %d)\n", 361 blocksize, nilfs->ns_blocksize); 362 goto scan_error; 363 } 364 365 err = nilfs_store_log_cursor(nilfs, sbp[0]); 366 if (err) 367 goto scan_error; 368 369 /* drop clean flag to allow roll-forward and recovery */ 370 nilfs->ns_mount_state &= ~NILFS_VALID_FS; 371 valid_fs = 0; 372 373 err = nilfs_search_super_root(nilfs, &ri); 374 if (err) 375 goto scan_error; 376 } 377 378 err = nilfs_load_super_root(nilfs, ri.ri_super_root); 379 if (unlikely(err)) { 380 printk(KERN_ERR "NILFS: error loading super root.\n"); 381 goto failed; 382 } 383 384 if (valid_fs) 385 goto skip_recovery; 386 387 if (s_flags & MS_RDONLY) { 388 __u64 features; 389 390 if (nilfs_test_opt(sbi, NORECOVERY)) { 391 printk(KERN_INFO "NILFS: norecovery option specified. " 392 "skipping roll-forward recovery\n"); 393 goto skip_recovery; 394 } 395 features = le64_to_cpu(nilfs->ns_sbp[0]->s_feature_compat_ro) & 396 ~NILFS_FEATURE_COMPAT_RO_SUPP; 397 if (features) { 398 printk(KERN_ERR "NILFS: couldn't proceed with " 399 "recovery because of unsupported optional " 400 "features (%llx)\n", 401 (unsigned long long)features); 402 err = -EROFS; 403 goto failed_unload; 404 } 405 if (really_read_only) { 406 printk(KERN_ERR "NILFS: write access " 407 "unavailable, cannot proceed.\n"); 408 err = -EROFS; 409 goto failed_unload; 410 } 411 sbi->s_super->s_flags &= ~MS_RDONLY; 412 } else if (nilfs_test_opt(sbi, NORECOVERY)) { 413 printk(KERN_ERR "NILFS: recovery cancelled because norecovery " 414 "option was specified for a read/write mount\n"); 415 err = -EINVAL; 416 goto failed_unload; 417 } 418 419 err = nilfs_salvage_orphan_logs(nilfs, sbi, &ri); 420 if (err) 421 goto failed_unload; 422 423 down_write(&nilfs->ns_sem); 424 nilfs->ns_mount_state |= NILFS_VALID_FS; /* set "clean" flag */ 425 err = nilfs_cleanup_super(sbi); 426 up_write(&nilfs->ns_sem); 427 428 if (err) { 429 printk(KERN_ERR "NILFS: failed to update super block. " 430 "recovery unfinished.\n"); 431 goto failed_unload; 432 } 433 printk(KERN_INFO "NILFS: recovery complete.\n"); 434 435 skip_recovery: 436 set_nilfs_loaded(nilfs); 437 nilfs_clear_recovery_info(&ri); 438 sbi->s_super->s_flags = s_flags; 439 return 0; 440 441 scan_error: 442 printk(KERN_ERR "NILFS: error searching super root.\n"); 443 goto failed; 444 445 failed_unload: 446 nilfs_mdt_destroy(nilfs->ns_cpfile); 447 nilfs_mdt_destroy(nilfs->ns_sufile); 448 nilfs_mdt_destroy(nilfs->ns_dat); 449 450 failed: 451 nilfs_clear_recovery_info(&ri); 452 sbi->s_super->s_flags = s_flags; 453 return err; 454 } 455 456 static unsigned long long nilfs_max_size(unsigned int blkbits) 457 { 458 unsigned int max_bits; 459 unsigned long long res = MAX_LFS_FILESIZE; /* page cache limit */ 460 461 max_bits = blkbits + NILFS_BMAP_KEY_BIT; /* bmap size limit */ 462 if (max_bits < 64) 463 res = min_t(unsigned long long, res, (1ULL << max_bits) - 1); 464 return res; 465 } 466 467 static int nilfs_store_disk_layout(struct the_nilfs *nilfs, 468 struct nilfs_super_block *sbp) 469 { 470 if (le32_to_cpu(sbp->s_rev_level) != NILFS_CURRENT_REV) { 471 printk(KERN_ERR "NILFS: revision mismatch " 472 "(superblock rev.=%d.%d, current rev.=%d.%d). " 473 "Please check the version of mkfs.nilfs.\n", 474 le32_to_cpu(sbp->s_rev_level), 475 le16_to_cpu(sbp->s_minor_rev_level), 476 NILFS_CURRENT_REV, NILFS_MINOR_REV); 477 return -EINVAL; 478 } 479 nilfs->ns_sbsize = le16_to_cpu(sbp->s_bytes); 480 if (nilfs->ns_sbsize > BLOCK_SIZE) 481 return -EINVAL; 482 483 nilfs->ns_inode_size = le16_to_cpu(sbp->s_inode_size); 484 nilfs->ns_first_ino = le32_to_cpu(sbp->s_first_ino); 485 486 nilfs->ns_blocks_per_segment = le32_to_cpu(sbp->s_blocks_per_segment); 487 if (nilfs->ns_blocks_per_segment < NILFS_SEG_MIN_BLOCKS) { 488 printk(KERN_ERR "NILFS: too short segment.\n"); 489 return -EINVAL; 490 } 491 492 nilfs->ns_first_data_block = le64_to_cpu(sbp->s_first_data_block); 493 nilfs->ns_nsegments = le64_to_cpu(sbp->s_nsegments); 494 nilfs->ns_r_segments_percentage = 495 le32_to_cpu(sbp->s_r_segments_percentage); 496 nilfs->ns_nrsvsegs = 497 max_t(unsigned long, NILFS_MIN_NRSVSEGS, 498 DIV_ROUND_UP(nilfs->ns_nsegments * 499 nilfs->ns_r_segments_percentage, 100)); 500 nilfs->ns_crc_seed = le32_to_cpu(sbp->s_crc_seed); 501 return 0; 502 } 503 504 static int nilfs_valid_sb(struct nilfs_super_block *sbp) 505 { 506 static unsigned char sum[4]; 507 const int sumoff = offsetof(struct nilfs_super_block, s_sum); 508 size_t bytes; 509 u32 crc; 510 511 if (!sbp || le16_to_cpu(sbp->s_magic) != NILFS_SUPER_MAGIC) 512 return 0; 513 bytes = le16_to_cpu(sbp->s_bytes); 514 if (bytes > BLOCK_SIZE) 515 return 0; 516 crc = crc32_le(le32_to_cpu(sbp->s_crc_seed), (unsigned char *)sbp, 517 sumoff); 518 crc = crc32_le(crc, sum, 4); 519 crc = crc32_le(crc, (unsigned char *)sbp + sumoff + 4, 520 bytes - sumoff - 4); 521 return crc == le32_to_cpu(sbp->s_sum); 522 } 523 524 static int nilfs_sb2_bad_offset(struct nilfs_super_block *sbp, u64 offset) 525 { 526 return offset < ((le64_to_cpu(sbp->s_nsegments) * 527 le32_to_cpu(sbp->s_blocks_per_segment)) << 528 (le32_to_cpu(sbp->s_log_block_size) + 10)); 529 } 530 531 static void nilfs_release_super_block(struct the_nilfs *nilfs) 532 { 533 int i; 534 535 for (i = 0; i < 2; i++) { 536 if (nilfs->ns_sbp[i]) { 537 brelse(nilfs->ns_sbh[i]); 538 nilfs->ns_sbh[i] = NULL; 539 nilfs->ns_sbp[i] = NULL; 540 } 541 } 542 } 543 544 void nilfs_fall_back_super_block(struct the_nilfs *nilfs) 545 { 546 brelse(nilfs->ns_sbh[0]); 547 nilfs->ns_sbh[0] = nilfs->ns_sbh[1]; 548 nilfs->ns_sbp[0] = nilfs->ns_sbp[1]; 549 nilfs->ns_sbh[1] = NULL; 550 nilfs->ns_sbp[1] = NULL; 551 } 552 553 void nilfs_swap_super_block(struct the_nilfs *nilfs) 554 { 555 struct buffer_head *tsbh = nilfs->ns_sbh[0]; 556 struct nilfs_super_block *tsbp = nilfs->ns_sbp[0]; 557 558 nilfs->ns_sbh[0] = nilfs->ns_sbh[1]; 559 nilfs->ns_sbp[0] = nilfs->ns_sbp[1]; 560 nilfs->ns_sbh[1] = tsbh; 561 nilfs->ns_sbp[1] = tsbp; 562 } 563 564 static int nilfs_load_super_block(struct the_nilfs *nilfs, 565 struct super_block *sb, int blocksize, 566 struct nilfs_super_block **sbpp) 567 { 568 struct nilfs_super_block **sbp = nilfs->ns_sbp; 569 struct buffer_head **sbh = nilfs->ns_sbh; 570 u64 sb2off = NILFS_SB2_OFFSET_BYTES(nilfs->ns_bdev->bd_inode->i_size); 571 int valid[2], swp = 0; 572 573 sbp[0] = nilfs_read_super_block(sb, NILFS_SB_OFFSET_BYTES, blocksize, 574 &sbh[0]); 575 sbp[1] = nilfs_read_super_block(sb, sb2off, blocksize, &sbh[1]); 576 577 if (!sbp[0]) { 578 if (!sbp[1]) { 579 printk(KERN_ERR "NILFS: unable to read superblock\n"); 580 return -EIO; 581 } 582 printk(KERN_WARNING 583 "NILFS warning: unable to read primary superblock\n"); 584 } else if (!sbp[1]) 585 printk(KERN_WARNING 586 "NILFS warning: unable to read secondary superblock\n"); 587 588 /* 589 * Compare two super blocks and set 1 in swp if the secondary 590 * super block is valid and newer. Otherwise, set 0 in swp. 591 */ 592 valid[0] = nilfs_valid_sb(sbp[0]); 593 valid[1] = nilfs_valid_sb(sbp[1]); 594 swp = valid[1] && (!valid[0] || 595 le64_to_cpu(sbp[1]->s_last_cno) > 596 le64_to_cpu(sbp[0]->s_last_cno)); 597 598 if (valid[swp] && nilfs_sb2_bad_offset(sbp[swp], sb2off)) { 599 brelse(sbh[1]); 600 sbh[1] = NULL; 601 sbp[1] = NULL; 602 swp = 0; 603 } 604 if (!valid[swp]) { 605 nilfs_release_super_block(nilfs); 606 printk(KERN_ERR "NILFS: Can't find nilfs on dev %s.\n", 607 sb->s_id); 608 return -EINVAL; 609 } 610 611 if (!valid[!swp]) 612 printk(KERN_WARNING "NILFS warning: broken superblock. " 613 "using spare superblock.\n"); 614 if (swp) 615 nilfs_swap_super_block(nilfs); 616 617 nilfs->ns_sbwcount = 0; 618 nilfs->ns_sbwtime = le64_to_cpu(sbp[0]->s_wtime); 619 nilfs->ns_prot_seq = le64_to_cpu(sbp[valid[1] & !swp]->s_last_seq); 620 *sbpp = sbp[0]; 621 return 0; 622 } 623 624 /** 625 * init_nilfs - initialize a NILFS instance. 626 * @nilfs: the_nilfs structure 627 * @sbi: nilfs_sb_info 628 * @sb: super block 629 * @data: mount options 630 * 631 * init_nilfs() performs common initialization per block device (e.g. 632 * reading the super block, getting disk layout information, initializing 633 * shared fields in the_nilfs). It takes on some portion of the jobs 634 * typically done by a fill_super() routine. This division arises from 635 * the nature that multiple NILFS instances may be simultaneously 636 * mounted on a device. 637 * For multiple mounts on the same device, only the first mount 638 * invokes these tasks. 639 * 640 * Return Value: On success, 0 is returned. On error, a negative error 641 * code is returned. 642 */ 643 int init_nilfs(struct the_nilfs *nilfs, struct nilfs_sb_info *sbi, char *data) 644 { 645 struct super_block *sb = sbi->s_super; 646 struct nilfs_super_block *sbp; 647 struct backing_dev_info *bdi; 648 int blocksize; 649 int err; 650 651 down_write(&nilfs->ns_sem); 652 if (nilfs_init(nilfs)) { 653 /* Load values from existing the_nilfs */ 654 sbp = nilfs->ns_sbp[0]; 655 err = nilfs_store_magic_and_option(sb, sbp, data); 656 if (err) 657 goto out; 658 659 err = nilfs_check_feature_compatibility(sb, sbp); 660 if (err) 661 goto out; 662 663 blocksize = BLOCK_SIZE << le32_to_cpu(sbp->s_log_block_size); 664 if (sb->s_blocksize != blocksize && 665 !sb_set_blocksize(sb, blocksize)) { 666 printk(KERN_ERR "NILFS: blocksize %d unfit to device\n", 667 blocksize); 668 err = -EINVAL; 669 } 670 sb->s_maxbytes = nilfs_max_size(sb->s_blocksize_bits); 671 goto out; 672 } 673 674 blocksize = sb_min_blocksize(sb, NILFS_MIN_BLOCK_SIZE); 675 if (!blocksize) { 676 printk(KERN_ERR "NILFS: unable to set blocksize\n"); 677 err = -EINVAL; 678 goto out; 679 } 680 err = nilfs_load_super_block(nilfs, sb, blocksize, &sbp); 681 if (err) 682 goto out; 683 684 err = nilfs_store_magic_and_option(sb, sbp, data); 685 if (err) 686 goto failed_sbh; 687 688 err = nilfs_check_feature_compatibility(sb, sbp); 689 if (err) 690 goto failed_sbh; 691 692 blocksize = BLOCK_SIZE << le32_to_cpu(sbp->s_log_block_size); 693 if (blocksize < NILFS_MIN_BLOCK_SIZE || 694 blocksize > NILFS_MAX_BLOCK_SIZE) { 695 printk(KERN_ERR "NILFS: couldn't mount because of unsupported " 696 "filesystem blocksize %d\n", blocksize); 697 err = -EINVAL; 698 goto failed_sbh; 699 } 700 if (sb->s_blocksize != blocksize) { 701 int hw_blocksize = bdev_logical_block_size(sb->s_bdev); 702 703 if (blocksize < hw_blocksize) { 704 printk(KERN_ERR 705 "NILFS: blocksize %d too small for device " 706 "(sector-size = %d).\n", 707 blocksize, hw_blocksize); 708 err = -EINVAL; 709 goto failed_sbh; 710 } 711 nilfs_release_super_block(nilfs); 712 sb_set_blocksize(sb, blocksize); 713 714 err = nilfs_load_super_block(nilfs, sb, blocksize, &sbp); 715 if (err) 716 goto out; 717 /* not failed_sbh; sbh is released automatically 718 when reloading fails. */ 719 } 720 nilfs->ns_blocksize_bits = sb->s_blocksize_bits; 721 nilfs->ns_blocksize = blocksize; 722 723 err = nilfs_store_disk_layout(nilfs, sbp); 724 if (err) 725 goto failed_sbh; 726 727 sb->s_maxbytes = nilfs_max_size(sb->s_blocksize_bits); 728 729 nilfs->ns_mount_state = le16_to_cpu(sbp->s_state); 730 731 bdi = nilfs->ns_bdev->bd_inode->i_mapping->backing_dev_info; 732 nilfs->ns_bdi = bdi ? : &default_backing_dev_info; 733 734 err = nilfs_store_log_cursor(nilfs, sbp); 735 if (err) 736 goto failed_sbh; 737 738 /* Initialize gcinode cache */ 739 err = nilfs_init_gccache(nilfs); 740 if (err) 741 goto failed_sbh; 742 743 set_nilfs_init(nilfs); 744 err = 0; 745 out: 746 up_write(&nilfs->ns_sem); 747 return err; 748 749 failed_sbh: 750 nilfs_release_super_block(nilfs); 751 goto out; 752 } 753 754 int nilfs_discard_segments(struct the_nilfs *nilfs, __u64 *segnump, 755 size_t nsegs) 756 { 757 sector_t seg_start, seg_end; 758 sector_t start = 0, nblocks = 0; 759 unsigned int sects_per_block; 760 __u64 *sn; 761 int ret = 0; 762 763 sects_per_block = (1 << nilfs->ns_blocksize_bits) / 764 bdev_logical_block_size(nilfs->ns_bdev); 765 for (sn = segnump; sn < segnump + nsegs; sn++) { 766 nilfs_get_segment_range(nilfs, *sn, &seg_start, &seg_end); 767 768 if (!nblocks) { 769 start = seg_start; 770 nblocks = seg_end - seg_start + 1; 771 } else if (start + nblocks == seg_start) { 772 nblocks += seg_end - seg_start + 1; 773 } else { 774 ret = blkdev_issue_discard(nilfs->ns_bdev, 775 start * sects_per_block, 776 nblocks * sects_per_block, 777 GFP_NOFS, 778 BLKDEV_IFL_BARRIER); 779 if (ret < 0) 780 return ret; 781 nblocks = 0; 782 } 783 } 784 if (nblocks) 785 ret = blkdev_issue_discard(nilfs->ns_bdev, 786 start * sects_per_block, 787 nblocks * sects_per_block, 788 GFP_NOFS, BLKDEV_IFL_BARRIER); 789 return ret; 790 } 791 792 int nilfs_count_free_blocks(struct the_nilfs *nilfs, sector_t *nblocks) 793 { 794 struct inode *dat = nilfs_dat_inode(nilfs); 795 unsigned long ncleansegs; 796 797 down_read(&NILFS_MDT(dat)->mi_sem); /* XXX */ 798 ncleansegs = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile); 799 up_read(&NILFS_MDT(dat)->mi_sem); /* XXX */ 800 *nblocks = (sector_t)ncleansegs * nilfs->ns_blocks_per_segment; 801 return 0; 802 } 803 804 int nilfs_near_disk_full(struct the_nilfs *nilfs) 805 { 806 unsigned long ncleansegs, nincsegs; 807 808 ncleansegs = nilfs_sufile_get_ncleansegs(nilfs->ns_sufile); 809 nincsegs = atomic_read(&nilfs->ns_ndirtyblks) / 810 nilfs->ns_blocks_per_segment + 1; 811 812 return ncleansegs <= nilfs->ns_nrsvsegs + nincsegs; 813 } 814 815 /** 816 * nilfs_find_sbinfo - find existing nilfs_sb_info structure 817 * @nilfs: nilfs object 818 * @rw_mount: mount type (non-zero value for read/write mount) 819 * @cno: checkpoint number (zero for read-only mount) 820 * 821 * nilfs_find_sbinfo() returns the nilfs_sb_info structure which 822 * @rw_mount and @cno (in case of snapshots) matched. If no instance 823 * was found, NULL is returned. Although the super block instance can 824 * be unmounted after this function returns, the nilfs_sb_info struct 825 * is kept on memory until nilfs_put_sbinfo() is called. 826 */ 827 struct nilfs_sb_info *nilfs_find_sbinfo(struct the_nilfs *nilfs, 828 int rw_mount, __u64 cno) 829 { 830 struct nilfs_sb_info *sbi; 831 832 down_read(&nilfs->ns_super_sem); 833 /* 834 * The SNAPSHOT flag and sb->s_flags are supposed to be 835 * protected with nilfs->ns_super_sem. 836 */ 837 sbi = nilfs->ns_current; 838 if (rw_mount) { 839 if (sbi && !(sbi->s_super->s_flags & MS_RDONLY)) 840 goto found; /* read/write mount */ 841 else 842 goto out; 843 } else if (cno == 0) { 844 if (sbi && (sbi->s_super->s_flags & MS_RDONLY)) 845 goto found; /* read-only mount */ 846 else 847 goto out; 848 } 849 850 list_for_each_entry(sbi, &nilfs->ns_supers, s_list) { 851 if (nilfs_test_opt(sbi, SNAPSHOT) && 852 sbi->s_snapshot_cno == cno) 853 goto found; /* snapshot mount */ 854 } 855 out: 856 up_read(&nilfs->ns_super_sem); 857 return NULL; 858 859 found: 860 atomic_inc(&sbi->s_count); 861 up_read(&nilfs->ns_super_sem); 862 return sbi; 863 } 864 865 int nilfs_checkpoint_is_mounted(struct the_nilfs *nilfs, __u64 cno, 866 int snapshot_mount) 867 { 868 struct nilfs_sb_info *sbi; 869 int ret = 0; 870 871 down_read(&nilfs->ns_super_sem); 872 if (cno == 0 || cno > nilfs->ns_cno) 873 goto out_unlock; 874 875 list_for_each_entry(sbi, &nilfs->ns_supers, s_list) { 876 if (sbi->s_snapshot_cno == cno && 877 (!snapshot_mount || nilfs_test_opt(sbi, SNAPSHOT))) { 878 /* exclude read-only mounts */ 879 ret++; 880 break; 881 } 882 } 883 /* for protecting recent checkpoints */ 884 if (cno >= nilfs_last_cno(nilfs)) 885 ret++; 886 887 out_unlock: 888 up_read(&nilfs->ns_super_sem); 889 return ret; 890 } 891