1 /* 2 * super.c - NILFS module and super block management. 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 * linux/fs/ext2/super.c 24 * 25 * Copyright (C) 1992, 1993, 1994, 1995 26 * Remy Card (card@masi.ibp.fr) 27 * Laboratoire MASI - Institut Blaise Pascal 28 * Universite Pierre et Marie Curie (Paris VI) 29 * 30 * from 31 * 32 * linux/fs/minix/inode.c 33 * 34 * Copyright (C) 1991, 1992 Linus Torvalds 35 * 36 * Big-endian to little-endian byte-swapping/bitmaps by 37 * David S. Miller (davem@caip.rutgers.edu), 1995 38 */ 39 40 #include <linux/module.h> 41 #include <linux/string.h> 42 #include <linux/slab.h> 43 #include <linux/init.h> 44 #include <linux/blkdev.h> 45 #include <linux/parser.h> 46 #include <linux/random.h> 47 #include <linux/crc32.h> 48 #include <linux/smp_lock.h> 49 #include <linux/vfs.h> 50 #include <linux/writeback.h> 51 #include <linux/kobject.h> 52 #include <linux/exportfs.h> 53 #include <linux/seq_file.h> 54 #include <linux/mount.h> 55 #include "nilfs.h" 56 #include "mdt.h" 57 #include "alloc.h" 58 #include "page.h" 59 #include "cpfile.h" 60 #include "ifile.h" 61 #include "dat.h" 62 #include "segment.h" 63 #include "segbuf.h" 64 65 MODULE_AUTHOR("NTT Corp."); 66 MODULE_DESCRIPTION("A New Implementation of the Log-structured Filesystem " 67 "(NILFS)"); 68 MODULE_LICENSE("GPL"); 69 70 static int nilfs_remount(struct super_block *sb, int *flags, char *data); 71 72 /** 73 * nilfs_error() - report failure condition on a filesystem 74 * 75 * nilfs_error() sets an ERROR_FS flag on the superblock as well as 76 * reporting an error message. It should be called when NILFS detects 77 * incoherences or defects of meta data on disk. As for sustainable 78 * errors such as a single-shot I/O error, nilfs_warning() or the printk() 79 * function should be used instead. 80 * 81 * The segment constructor must not call this function because it can 82 * kill itself. 83 */ 84 void nilfs_error(struct super_block *sb, const char *function, 85 const char *fmt, ...) 86 { 87 struct nilfs_sb_info *sbi = NILFS_SB(sb); 88 va_list args; 89 90 va_start(args, fmt); 91 printk(KERN_CRIT "NILFS error (device %s): %s: ", sb->s_id, function); 92 vprintk(fmt, args); 93 printk("\n"); 94 va_end(args); 95 96 if (!(sb->s_flags & MS_RDONLY)) { 97 struct the_nilfs *nilfs = sbi->s_nilfs; 98 99 if (!nilfs_test_opt(sbi, ERRORS_CONT)) 100 nilfs_detach_segment_constructor(sbi); 101 102 down_write(&nilfs->ns_sem); 103 if (!(nilfs->ns_mount_state & NILFS_ERROR_FS)) { 104 nilfs->ns_mount_state |= NILFS_ERROR_FS; 105 nilfs->ns_sbp[0]->s_state |= 106 cpu_to_le16(NILFS_ERROR_FS); 107 nilfs_commit_super(sbi, 1); 108 } 109 up_write(&nilfs->ns_sem); 110 111 if (nilfs_test_opt(sbi, ERRORS_RO)) { 112 printk(KERN_CRIT "Remounting filesystem read-only\n"); 113 sb->s_flags |= MS_RDONLY; 114 } 115 } 116 117 if (nilfs_test_opt(sbi, ERRORS_PANIC)) 118 panic("NILFS (device %s): panic forced after error\n", 119 sb->s_id); 120 } 121 122 void nilfs_warning(struct super_block *sb, const char *function, 123 const char *fmt, ...) 124 { 125 va_list args; 126 127 va_start(args, fmt); 128 printk(KERN_WARNING "NILFS warning (device %s): %s: ", 129 sb->s_id, function); 130 vprintk(fmt, args); 131 printk("\n"); 132 va_end(args); 133 } 134 135 static struct kmem_cache *nilfs_inode_cachep; 136 137 struct inode *nilfs_alloc_inode_common(struct the_nilfs *nilfs) 138 { 139 struct nilfs_inode_info *ii; 140 141 ii = kmem_cache_alloc(nilfs_inode_cachep, GFP_NOFS); 142 if (!ii) 143 return NULL; 144 ii->i_bh = NULL; 145 ii->i_state = 0; 146 ii->vfs_inode.i_version = 1; 147 nilfs_btnode_cache_init(&ii->i_btnode_cache, nilfs->ns_bdi); 148 return &ii->vfs_inode; 149 } 150 151 struct inode *nilfs_alloc_inode(struct super_block *sb) 152 { 153 return nilfs_alloc_inode_common(NILFS_SB(sb)->s_nilfs); 154 } 155 156 void nilfs_destroy_inode(struct inode *inode) 157 { 158 kmem_cache_free(nilfs_inode_cachep, NILFS_I(inode)); 159 } 160 161 static void init_once(void *obj) 162 { 163 struct nilfs_inode_info *ii = obj; 164 165 INIT_LIST_HEAD(&ii->i_dirty); 166 #ifdef CONFIG_NILFS_XATTR 167 init_rwsem(&ii->xattr_sem); 168 #endif 169 nilfs_btnode_cache_init_once(&ii->i_btnode_cache); 170 ii->i_bmap = (struct nilfs_bmap *)&ii->i_bmap_union; 171 inode_init_once(&ii->vfs_inode); 172 } 173 174 static int nilfs_init_inode_cache(void) 175 { 176 nilfs_inode_cachep = kmem_cache_create("nilfs2_inode_cache", 177 sizeof(struct nilfs_inode_info), 178 0, SLAB_RECLAIM_ACCOUNT, 179 init_once); 180 181 return (nilfs_inode_cachep == NULL) ? -ENOMEM : 0; 182 } 183 184 static inline void nilfs_destroy_inode_cache(void) 185 { 186 kmem_cache_destroy(nilfs_inode_cachep); 187 } 188 189 static void nilfs_clear_inode(struct inode *inode) 190 { 191 struct nilfs_inode_info *ii = NILFS_I(inode); 192 193 /* 194 * Free resources allocated in nilfs_read_inode(), here. 195 */ 196 BUG_ON(!list_empty(&ii->i_dirty)); 197 brelse(ii->i_bh); 198 ii->i_bh = NULL; 199 200 if (test_bit(NILFS_I_BMAP, &ii->i_state)) 201 nilfs_bmap_clear(ii->i_bmap); 202 203 nilfs_btnode_cache_clear(&ii->i_btnode_cache); 204 } 205 206 static int nilfs_sync_super(struct nilfs_sb_info *sbi, int dupsb) 207 { 208 struct the_nilfs *nilfs = sbi->s_nilfs; 209 int err; 210 int barrier_done = 0; 211 212 if (nilfs_test_opt(sbi, BARRIER)) { 213 set_buffer_ordered(nilfs->ns_sbh[0]); 214 barrier_done = 1; 215 } 216 retry: 217 set_buffer_dirty(nilfs->ns_sbh[0]); 218 err = sync_dirty_buffer(nilfs->ns_sbh[0]); 219 if (err == -EOPNOTSUPP && barrier_done) { 220 nilfs_warning(sbi->s_super, __func__, 221 "barrier-based sync failed. " 222 "disabling barriers\n"); 223 nilfs_clear_opt(sbi, BARRIER); 224 barrier_done = 0; 225 clear_buffer_ordered(nilfs->ns_sbh[0]); 226 goto retry; 227 } 228 if (unlikely(err)) { 229 printk(KERN_ERR 230 "NILFS: unable to write superblock (err=%d)\n", err); 231 if (err == -EIO && nilfs->ns_sbh[1]) { 232 nilfs_fall_back_super_block(nilfs); 233 goto retry; 234 } 235 } else { 236 struct nilfs_super_block *sbp = nilfs->ns_sbp[0]; 237 238 /* 239 * The latest segment becomes trailable from the position 240 * written in superblock. 241 */ 242 clear_nilfs_discontinued(nilfs); 243 244 /* update GC protection for recent segments */ 245 if (nilfs->ns_sbh[1]) { 246 sbp = NULL; 247 if (dupsb) { 248 set_buffer_dirty(nilfs->ns_sbh[1]); 249 if (!sync_dirty_buffer(nilfs->ns_sbh[1])) 250 sbp = nilfs->ns_sbp[1]; 251 } 252 } 253 if (sbp) { 254 spin_lock(&nilfs->ns_last_segment_lock); 255 nilfs->ns_prot_seq = le64_to_cpu(sbp->s_last_seq); 256 spin_unlock(&nilfs->ns_last_segment_lock); 257 } 258 } 259 260 return err; 261 } 262 263 int nilfs_commit_super(struct nilfs_sb_info *sbi, int dupsb) 264 { 265 struct the_nilfs *nilfs = sbi->s_nilfs; 266 struct nilfs_super_block **sbp = nilfs->ns_sbp; 267 sector_t nfreeblocks; 268 time_t t; 269 int err; 270 271 /* nilfs->sem must be locked by the caller. */ 272 if (sbp[0]->s_magic != NILFS_SUPER_MAGIC) { 273 if (sbp[1] && sbp[1]->s_magic == NILFS_SUPER_MAGIC) 274 nilfs_swap_super_block(nilfs); 275 else { 276 printk(KERN_CRIT "NILFS: superblock broke on dev %s\n", 277 sbi->s_super->s_id); 278 return -EIO; 279 } 280 } 281 err = nilfs_count_free_blocks(nilfs, &nfreeblocks); 282 if (unlikely(err)) { 283 printk(KERN_ERR "NILFS: failed to count free blocks\n"); 284 return err; 285 } 286 spin_lock(&nilfs->ns_last_segment_lock); 287 sbp[0]->s_last_seq = cpu_to_le64(nilfs->ns_last_seq); 288 sbp[0]->s_last_pseg = cpu_to_le64(nilfs->ns_last_pseg); 289 sbp[0]->s_last_cno = cpu_to_le64(nilfs->ns_last_cno); 290 spin_unlock(&nilfs->ns_last_segment_lock); 291 292 t = get_seconds(); 293 nilfs->ns_sbwtime[0] = t; 294 sbp[0]->s_free_blocks_count = cpu_to_le64(nfreeblocks); 295 sbp[0]->s_wtime = cpu_to_le64(t); 296 sbp[0]->s_sum = 0; 297 sbp[0]->s_sum = cpu_to_le32(crc32_le(nilfs->ns_crc_seed, 298 (unsigned char *)sbp[0], 299 nilfs->ns_sbsize)); 300 if (dupsb && sbp[1]) { 301 memcpy(sbp[1], sbp[0], nilfs->ns_sbsize); 302 nilfs->ns_sbwtime[1] = t; 303 } 304 sbi->s_super->s_dirt = 0; 305 return nilfs_sync_super(sbi, dupsb); 306 } 307 308 static void nilfs_put_super(struct super_block *sb) 309 { 310 struct nilfs_sb_info *sbi = NILFS_SB(sb); 311 struct the_nilfs *nilfs = sbi->s_nilfs; 312 313 lock_kernel(); 314 315 nilfs_detach_segment_constructor(sbi); 316 317 if (!(sb->s_flags & MS_RDONLY)) { 318 down_write(&nilfs->ns_sem); 319 nilfs->ns_sbp[0]->s_state = cpu_to_le16(nilfs->ns_mount_state); 320 nilfs_commit_super(sbi, 1); 321 up_write(&nilfs->ns_sem); 322 } 323 down_write(&nilfs->ns_super_sem); 324 if (nilfs->ns_current == sbi) 325 nilfs->ns_current = NULL; 326 up_write(&nilfs->ns_super_sem); 327 328 nilfs_detach_checkpoint(sbi); 329 put_nilfs(sbi->s_nilfs); 330 sbi->s_super = NULL; 331 sb->s_fs_info = NULL; 332 nilfs_put_sbinfo(sbi); 333 334 unlock_kernel(); 335 } 336 337 static int nilfs_sync_fs(struct super_block *sb, int wait) 338 { 339 struct nilfs_sb_info *sbi = NILFS_SB(sb); 340 struct the_nilfs *nilfs = sbi->s_nilfs; 341 int err = 0; 342 343 /* This function is called when super block should be written back */ 344 if (wait) 345 err = nilfs_construct_segment(sb); 346 347 down_write(&nilfs->ns_sem); 348 if (sb->s_dirt) 349 nilfs_commit_super(sbi, 1); 350 up_write(&nilfs->ns_sem); 351 352 return err; 353 } 354 355 int nilfs_attach_checkpoint(struct nilfs_sb_info *sbi, __u64 cno) 356 { 357 struct the_nilfs *nilfs = sbi->s_nilfs; 358 struct nilfs_checkpoint *raw_cp; 359 struct buffer_head *bh_cp; 360 int err; 361 362 down_write(&nilfs->ns_super_sem); 363 list_add(&sbi->s_list, &nilfs->ns_supers); 364 up_write(&nilfs->ns_super_sem); 365 366 sbi->s_ifile = nilfs_mdt_new(nilfs, sbi->s_super, NILFS_IFILE_INO); 367 if (!sbi->s_ifile) 368 return -ENOMEM; 369 370 err = nilfs_palloc_init_blockgroup(sbi->s_ifile, nilfs->ns_inode_size); 371 if (unlikely(err)) 372 goto failed; 373 374 down_read(&nilfs->ns_segctor_sem); 375 err = nilfs_cpfile_get_checkpoint(nilfs->ns_cpfile, cno, 0, &raw_cp, 376 &bh_cp); 377 up_read(&nilfs->ns_segctor_sem); 378 if (unlikely(err)) { 379 if (err == -ENOENT || err == -EINVAL) { 380 printk(KERN_ERR 381 "NILFS: Invalid checkpoint " 382 "(checkpoint number=%llu)\n", 383 (unsigned long long)cno); 384 err = -EINVAL; 385 } 386 goto failed; 387 } 388 err = nilfs_read_inode_common(sbi->s_ifile, &raw_cp->cp_ifile_inode); 389 if (unlikely(err)) 390 goto failed_bh; 391 atomic_set(&sbi->s_inodes_count, le64_to_cpu(raw_cp->cp_inodes_count)); 392 atomic_set(&sbi->s_blocks_count, le64_to_cpu(raw_cp->cp_blocks_count)); 393 394 nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, cno, bh_cp); 395 return 0; 396 397 failed_bh: 398 nilfs_cpfile_put_checkpoint(nilfs->ns_cpfile, cno, bh_cp); 399 failed: 400 nilfs_mdt_destroy(sbi->s_ifile); 401 sbi->s_ifile = NULL; 402 403 down_write(&nilfs->ns_super_sem); 404 list_del_init(&sbi->s_list); 405 up_write(&nilfs->ns_super_sem); 406 407 return err; 408 } 409 410 void nilfs_detach_checkpoint(struct nilfs_sb_info *sbi) 411 { 412 struct the_nilfs *nilfs = sbi->s_nilfs; 413 414 nilfs_mdt_clear(sbi->s_ifile); 415 nilfs_mdt_destroy(sbi->s_ifile); 416 sbi->s_ifile = NULL; 417 down_write(&nilfs->ns_super_sem); 418 list_del_init(&sbi->s_list); 419 up_write(&nilfs->ns_super_sem); 420 } 421 422 static int nilfs_mark_recovery_complete(struct nilfs_sb_info *sbi) 423 { 424 struct the_nilfs *nilfs = sbi->s_nilfs; 425 int err = 0; 426 427 down_write(&nilfs->ns_sem); 428 if (!(nilfs->ns_mount_state & NILFS_VALID_FS)) { 429 nilfs->ns_mount_state |= NILFS_VALID_FS; 430 err = nilfs_commit_super(sbi, 1); 431 if (likely(!err)) 432 printk(KERN_INFO "NILFS: recovery complete.\n"); 433 } 434 up_write(&nilfs->ns_sem); 435 return err; 436 } 437 438 static int nilfs_statfs(struct dentry *dentry, struct kstatfs *buf) 439 { 440 struct super_block *sb = dentry->d_sb; 441 struct nilfs_sb_info *sbi = NILFS_SB(sb); 442 struct the_nilfs *nilfs = sbi->s_nilfs; 443 u64 id = huge_encode_dev(sb->s_bdev->bd_dev); 444 unsigned long long blocks; 445 unsigned long overhead; 446 unsigned long nrsvblocks; 447 sector_t nfreeblocks; 448 int err; 449 450 /* 451 * Compute all of the segment blocks 452 * 453 * The blocks before first segment and after last segment 454 * are excluded. 455 */ 456 blocks = nilfs->ns_blocks_per_segment * nilfs->ns_nsegments 457 - nilfs->ns_first_data_block; 458 nrsvblocks = nilfs->ns_nrsvsegs * nilfs->ns_blocks_per_segment; 459 460 /* 461 * Compute the overhead 462 * 463 * When distributing meta data blocks outside semgent structure, 464 * We must count them as the overhead. 465 */ 466 overhead = 0; 467 468 err = nilfs_count_free_blocks(nilfs, &nfreeblocks); 469 if (unlikely(err)) 470 return err; 471 472 buf->f_type = NILFS_SUPER_MAGIC; 473 buf->f_bsize = sb->s_blocksize; 474 buf->f_blocks = blocks - overhead; 475 buf->f_bfree = nfreeblocks; 476 buf->f_bavail = (buf->f_bfree >= nrsvblocks) ? 477 (buf->f_bfree - nrsvblocks) : 0; 478 buf->f_files = atomic_read(&sbi->s_inodes_count); 479 buf->f_ffree = 0; /* nilfs_count_free_inodes(sb); */ 480 buf->f_namelen = NILFS_NAME_LEN; 481 buf->f_fsid.val[0] = (u32)id; 482 buf->f_fsid.val[1] = (u32)(id >> 32); 483 484 return 0; 485 } 486 487 static int nilfs_show_options(struct seq_file *seq, struct vfsmount *vfs) 488 { 489 struct super_block *sb = vfs->mnt_sb; 490 struct nilfs_sb_info *sbi = NILFS_SB(sb); 491 492 if (!nilfs_test_opt(sbi, BARRIER)) 493 seq_printf(seq, ",barrier=off"); 494 if (nilfs_test_opt(sbi, SNAPSHOT)) 495 seq_printf(seq, ",cp=%llu", 496 (unsigned long long int)sbi->s_snapshot_cno); 497 if (nilfs_test_opt(sbi, ERRORS_RO)) 498 seq_printf(seq, ",errors=remount-ro"); 499 if (nilfs_test_opt(sbi, ERRORS_PANIC)) 500 seq_printf(seq, ",errors=panic"); 501 if (nilfs_test_opt(sbi, STRICT_ORDER)) 502 seq_printf(seq, ",order=strict"); 503 504 return 0; 505 } 506 507 static const struct super_operations nilfs_sops = { 508 .alloc_inode = nilfs_alloc_inode, 509 .destroy_inode = nilfs_destroy_inode, 510 .dirty_inode = nilfs_dirty_inode, 511 /* .write_inode = nilfs_write_inode, */ 512 /* .put_inode = nilfs_put_inode, */ 513 /* .drop_inode = nilfs_drop_inode, */ 514 .delete_inode = nilfs_delete_inode, 515 .put_super = nilfs_put_super, 516 /* .write_super = nilfs_write_super, */ 517 .sync_fs = nilfs_sync_fs, 518 /* .write_super_lockfs */ 519 /* .unlockfs */ 520 .statfs = nilfs_statfs, 521 .remount_fs = nilfs_remount, 522 .clear_inode = nilfs_clear_inode, 523 /* .umount_begin */ 524 .show_options = nilfs_show_options 525 }; 526 527 static struct inode * 528 nilfs_nfs_get_inode(struct super_block *sb, u64 ino, u32 generation) 529 { 530 struct inode *inode; 531 532 if (ino < NILFS_FIRST_INO(sb) && ino != NILFS_ROOT_INO && 533 ino != NILFS_SKETCH_INO) 534 return ERR_PTR(-ESTALE); 535 536 inode = nilfs_iget(sb, ino); 537 if (IS_ERR(inode)) 538 return ERR_CAST(inode); 539 if (generation && inode->i_generation != generation) { 540 iput(inode); 541 return ERR_PTR(-ESTALE); 542 } 543 544 return inode; 545 } 546 547 static struct dentry * 548 nilfs_fh_to_dentry(struct super_block *sb, struct fid *fid, int fh_len, 549 int fh_type) 550 { 551 return generic_fh_to_dentry(sb, fid, fh_len, fh_type, 552 nilfs_nfs_get_inode); 553 } 554 555 static struct dentry * 556 nilfs_fh_to_parent(struct super_block *sb, struct fid *fid, int fh_len, 557 int fh_type) 558 { 559 return generic_fh_to_parent(sb, fid, fh_len, fh_type, 560 nilfs_nfs_get_inode); 561 } 562 563 static const struct export_operations nilfs_export_ops = { 564 .fh_to_dentry = nilfs_fh_to_dentry, 565 .fh_to_parent = nilfs_fh_to_parent, 566 .get_parent = nilfs_get_parent, 567 }; 568 569 enum { 570 Opt_err_cont, Opt_err_panic, Opt_err_ro, 571 Opt_barrier, Opt_snapshot, Opt_order, 572 Opt_err, 573 }; 574 575 static match_table_t tokens = { 576 {Opt_err_cont, "errors=continue"}, 577 {Opt_err_panic, "errors=panic"}, 578 {Opt_err_ro, "errors=remount-ro"}, 579 {Opt_barrier, "barrier=%s"}, 580 {Opt_snapshot, "cp=%u"}, 581 {Opt_order, "order=%s"}, 582 {Opt_err, NULL} 583 }; 584 585 static int match_bool(substring_t *s, int *result) 586 { 587 int len = s->to - s->from; 588 589 if (strncmp(s->from, "on", len) == 0) 590 *result = 1; 591 else if (strncmp(s->from, "off", len) == 0) 592 *result = 0; 593 else 594 return 1; 595 return 0; 596 } 597 598 static int parse_options(char *options, struct super_block *sb) 599 { 600 struct nilfs_sb_info *sbi = NILFS_SB(sb); 601 char *p; 602 substring_t args[MAX_OPT_ARGS]; 603 int option; 604 605 if (!options) 606 return 1; 607 608 while ((p = strsep(&options, ",")) != NULL) { 609 int token; 610 if (!*p) 611 continue; 612 613 token = match_token(p, tokens, args); 614 switch (token) { 615 case Opt_barrier: 616 if (match_bool(&args[0], &option)) 617 return 0; 618 if (option) 619 nilfs_set_opt(sbi, BARRIER); 620 else 621 nilfs_clear_opt(sbi, BARRIER); 622 break; 623 case Opt_order: 624 if (strcmp(args[0].from, "relaxed") == 0) 625 /* Ordered data semantics */ 626 nilfs_clear_opt(sbi, STRICT_ORDER); 627 else if (strcmp(args[0].from, "strict") == 0) 628 /* Strict in-order semantics */ 629 nilfs_set_opt(sbi, STRICT_ORDER); 630 else 631 return 0; 632 break; 633 case Opt_err_panic: 634 nilfs_write_opt(sbi, ERROR_MODE, ERRORS_PANIC); 635 break; 636 case Opt_err_ro: 637 nilfs_write_opt(sbi, ERROR_MODE, ERRORS_RO); 638 break; 639 case Opt_err_cont: 640 nilfs_write_opt(sbi, ERROR_MODE, ERRORS_CONT); 641 break; 642 case Opt_snapshot: 643 if (match_int(&args[0], &option) || option <= 0) 644 return 0; 645 if (!(sb->s_flags & MS_RDONLY)) 646 return 0; 647 sbi->s_snapshot_cno = option; 648 nilfs_set_opt(sbi, SNAPSHOT); 649 break; 650 default: 651 printk(KERN_ERR 652 "NILFS: Unrecognized mount option \"%s\"\n", p); 653 return 0; 654 } 655 } 656 return 1; 657 } 658 659 static inline void 660 nilfs_set_default_options(struct nilfs_sb_info *sbi, 661 struct nilfs_super_block *sbp) 662 { 663 sbi->s_mount_opt = 664 NILFS_MOUNT_ERRORS_CONT | NILFS_MOUNT_BARRIER; 665 } 666 667 static int nilfs_setup_super(struct nilfs_sb_info *sbi) 668 { 669 struct the_nilfs *nilfs = sbi->s_nilfs; 670 struct nilfs_super_block *sbp = nilfs->ns_sbp[0]; 671 int max_mnt_count = le16_to_cpu(sbp->s_max_mnt_count); 672 int mnt_count = le16_to_cpu(sbp->s_mnt_count); 673 674 /* nilfs->sem must be locked by the caller. */ 675 if (!(nilfs->ns_mount_state & NILFS_VALID_FS)) { 676 printk(KERN_WARNING "NILFS warning: mounting unchecked fs\n"); 677 } else if (nilfs->ns_mount_state & NILFS_ERROR_FS) { 678 printk(KERN_WARNING 679 "NILFS warning: mounting fs with errors\n"); 680 #if 0 681 } else if (max_mnt_count >= 0 && mnt_count >= max_mnt_count) { 682 printk(KERN_WARNING 683 "NILFS warning: maximal mount count reached\n"); 684 #endif 685 } 686 if (!max_mnt_count) 687 sbp->s_max_mnt_count = cpu_to_le16(NILFS_DFL_MAX_MNT_COUNT); 688 689 sbp->s_mnt_count = cpu_to_le16(mnt_count + 1); 690 sbp->s_state = cpu_to_le16(le16_to_cpu(sbp->s_state) & ~NILFS_VALID_FS); 691 sbp->s_mtime = cpu_to_le64(get_seconds()); 692 return nilfs_commit_super(sbi, 1); 693 } 694 695 struct nilfs_super_block *nilfs_read_super_block(struct super_block *sb, 696 u64 pos, int blocksize, 697 struct buffer_head **pbh) 698 { 699 unsigned long long sb_index = pos; 700 unsigned long offset; 701 702 offset = do_div(sb_index, blocksize); 703 *pbh = sb_bread(sb, sb_index); 704 if (!*pbh) 705 return NULL; 706 return (struct nilfs_super_block *)((char *)(*pbh)->b_data + offset); 707 } 708 709 int nilfs_store_magic_and_option(struct super_block *sb, 710 struct nilfs_super_block *sbp, 711 char *data) 712 { 713 struct nilfs_sb_info *sbi = NILFS_SB(sb); 714 715 sb->s_magic = le16_to_cpu(sbp->s_magic); 716 717 /* FS independent flags */ 718 #ifdef NILFS_ATIME_DISABLE 719 sb->s_flags |= MS_NOATIME; 720 #endif 721 722 nilfs_set_default_options(sbi, sbp); 723 724 sbi->s_resuid = le16_to_cpu(sbp->s_def_resuid); 725 sbi->s_resgid = le16_to_cpu(sbp->s_def_resgid); 726 sbi->s_interval = le32_to_cpu(sbp->s_c_interval); 727 sbi->s_watermark = le32_to_cpu(sbp->s_c_block_max); 728 729 return !parse_options(data, sb) ? -EINVAL : 0 ; 730 } 731 732 /** 733 * nilfs_fill_super() - initialize a super block instance 734 * @sb: super_block 735 * @data: mount options 736 * @silent: silent mode flag 737 * @nilfs: the_nilfs struct 738 * 739 * This function is called exclusively by nilfs->ns_mount_mutex. 740 * So, the recovery process is protected from other simultaneous mounts. 741 */ 742 static int 743 nilfs_fill_super(struct super_block *sb, void *data, int silent, 744 struct the_nilfs *nilfs) 745 { 746 struct nilfs_sb_info *sbi; 747 struct inode *root; 748 __u64 cno; 749 int err; 750 751 sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); 752 if (!sbi) 753 return -ENOMEM; 754 755 sb->s_fs_info = sbi; 756 757 get_nilfs(nilfs); 758 sbi->s_nilfs = nilfs; 759 sbi->s_super = sb; 760 atomic_set(&sbi->s_count, 1); 761 762 err = init_nilfs(nilfs, sbi, (char *)data); 763 if (err) 764 goto failed_sbi; 765 766 spin_lock_init(&sbi->s_inode_lock); 767 INIT_LIST_HEAD(&sbi->s_dirty_files); 768 INIT_LIST_HEAD(&sbi->s_list); 769 770 /* 771 * Following initialization is overlapped because 772 * nilfs_sb_info structure has been cleared at the beginning. 773 * But we reserve them to keep our interest and make ready 774 * for the future change. 775 */ 776 get_random_bytes(&sbi->s_next_generation, 777 sizeof(sbi->s_next_generation)); 778 spin_lock_init(&sbi->s_next_gen_lock); 779 780 sb->s_op = &nilfs_sops; 781 sb->s_export_op = &nilfs_export_ops; 782 sb->s_root = NULL; 783 sb->s_time_gran = 1; 784 785 if (!nilfs_loaded(nilfs)) { 786 err = load_nilfs(nilfs, sbi); 787 if (err) 788 goto failed_sbi; 789 } 790 cno = nilfs_last_cno(nilfs); 791 792 if (sb->s_flags & MS_RDONLY) { 793 if (nilfs_test_opt(sbi, SNAPSHOT)) { 794 down_read(&nilfs->ns_segctor_sem); 795 err = nilfs_cpfile_is_snapshot(nilfs->ns_cpfile, 796 sbi->s_snapshot_cno); 797 up_read(&nilfs->ns_segctor_sem); 798 if (err < 0) { 799 if (err == -ENOENT) 800 err = -EINVAL; 801 goto failed_sbi; 802 } 803 if (!err) { 804 printk(KERN_ERR 805 "NILFS: The specified checkpoint is " 806 "not a snapshot " 807 "(checkpoint number=%llu).\n", 808 (unsigned long long)sbi->s_snapshot_cno); 809 err = -EINVAL; 810 goto failed_sbi; 811 } 812 cno = sbi->s_snapshot_cno; 813 } else 814 /* Read-only mount */ 815 sbi->s_snapshot_cno = cno; 816 } 817 818 err = nilfs_attach_checkpoint(sbi, cno); 819 if (err) { 820 printk(KERN_ERR "NILFS: error loading a checkpoint" 821 " (checkpoint number=%llu).\n", (unsigned long long)cno); 822 goto failed_sbi; 823 } 824 825 if (!(sb->s_flags & MS_RDONLY)) { 826 err = nilfs_attach_segment_constructor(sbi); 827 if (err) 828 goto failed_checkpoint; 829 } 830 831 root = nilfs_iget(sb, NILFS_ROOT_INO); 832 if (IS_ERR(root)) { 833 printk(KERN_ERR "NILFS: get root inode failed\n"); 834 err = PTR_ERR(root); 835 goto failed_segctor; 836 } 837 if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) { 838 iput(root); 839 printk(KERN_ERR "NILFS: corrupt root inode.\n"); 840 err = -EINVAL; 841 goto failed_segctor; 842 } 843 sb->s_root = d_alloc_root(root); 844 if (!sb->s_root) { 845 iput(root); 846 printk(KERN_ERR "NILFS: get root dentry failed\n"); 847 err = -ENOMEM; 848 goto failed_segctor; 849 } 850 851 if (!(sb->s_flags & MS_RDONLY)) { 852 down_write(&nilfs->ns_sem); 853 nilfs_setup_super(sbi); 854 up_write(&nilfs->ns_sem); 855 } 856 857 err = nilfs_mark_recovery_complete(sbi); 858 if (unlikely(err)) { 859 printk(KERN_ERR "NILFS: recovery failed.\n"); 860 goto failed_root; 861 } 862 863 down_write(&nilfs->ns_super_sem); 864 if (!nilfs_test_opt(sbi, SNAPSHOT)) 865 nilfs->ns_current = sbi; 866 up_write(&nilfs->ns_super_sem); 867 868 return 0; 869 870 failed_root: 871 dput(sb->s_root); 872 sb->s_root = NULL; 873 874 failed_segctor: 875 nilfs_detach_segment_constructor(sbi); 876 877 failed_checkpoint: 878 nilfs_detach_checkpoint(sbi); 879 880 failed_sbi: 881 put_nilfs(nilfs); 882 sb->s_fs_info = NULL; 883 nilfs_put_sbinfo(sbi); 884 return err; 885 } 886 887 static int nilfs_remount(struct super_block *sb, int *flags, char *data) 888 { 889 struct nilfs_sb_info *sbi = NILFS_SB(sb); 890 struct nilfs_super_block *sbp; 891 struct the_nilfs *nilfs = sbi->s_nilfs; 892 unsigned long old_sb_flags; 893 struct nilfs_mount_options old_opts; 894 int err; 895 896 lock_kernel(); 897 898 down_write(&nilfs->ns_super_sem); 899 old_sb_flags = sb->s_flags; 900 old_opts.mount_opt = sbi->s_mount_opt; 901 old_opts.snapshot_cno = sbi->s_snapshot_cno; 902 903 if (!parse_options(data, sb)) { 904 err = -EINVAL; 905 goto restore_opts; 906 } 907 sb->s_flags = (sb->s_flags & ~MS_POSIXACL); 908 909 if ((*flags & MS_RDONLY) && 910 sbi->s_snapshot_cno != old_opts.snapshot_cno) { 911 printk(KERN_WARNING "NILFS (device %s): couldn't " 912 "remount to a different snapshot. \n", 913 sb->s_id); 914 err = -EINVAL; 915 goto restore_opts; 916 } 917 918 if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) 919 goto out; 920 if (*flags & MS_RDONLY) { 921 /* Shutting down the segment constructor */ 922 nilfs_detach_segment_constructor(sbi); 923 sb->s_flags |= MS_RDONLY; 924 925 sbi->s_snapshot_cno = nilfs_last_cno(nilfs); 926 /* nilfs_set_opt(sbi, SNAPSHOT); */ 927 928 /* 929 * Remounting a valid RW partition RDONLY, so set 930 * the RDONLY flag and then mark the partition as valid again. 931 */ 932 down_write(&nilfs->ns_sem); 933 sbp = nilfs->ns_sbp[0]; 934 if (!(sbp->s_state & le16_to_cpu(NILFS_VALID_FS)) && 935 (nilfs->ns_mount_state & NILFS_VALID_FS)) 936 sbp->s_state = cpu_to_le16(nilfs->ns_mount_state); 937 sbp->s_mtime = cpu_to_le64(get_seconds()); 938 nilfs_commit_super(sbi, 1); 939 up_write(&nilfs->ns_sem); 940 } else { 941 /* 942 * Mounting a RDONLY partition read-write, so reread and 943 * store the current valid flag. (It may have been changed 944 * by fsck since we originally mounted the partition.) 945 */ 946 if (nilfs->ns_current && nilfs->ns_current != sbi) { 947 printk(KERN_WARNING "NILFS (device %s): couldn't " 948 "remount because an RW-mount exists.\n", 949 sb->s_id); 950 err = -EBUSY; 951 goto restore_opts; 952 } 953 if (sbi->s_snapshot_cno != nilfs_last_cno(nilfs)) { 954 printk(KERN_WARNING "NILFS (device %s): couldn't " 955 "remount because the current RO-mount is not " 956 "the latest one.\n", 957 sb->s_id); 958 err = -EINVAL; 959 goto restore_opts; 960 } 961 sb->s_flags &= ~MS_RDONLY; 962 nilfs_clear_opt(sbi, SNAPSHOT); 963 sbi->s_snapshot_cno = 0; 964 965 err = nilfs_attach_segment_constructor(sbi); 966 if (err) 967 goto restore_opts; 968 969 down_write(&nilfs->ns_sem); 970 nilfs_setup_super(sbi); 971 up_write(&nilfs->ns_sem); 972 973 nilfs->ns_current = sbi; 974 } 975 out: 976 up_write(&nilfs->ns_super_sem); 977 unlock_kernel(); 978 return 0; 979 980 restore_opts: 981 sb->s_flags = old_sb_flags; 982 sbi->s_mount_opt = old_opts.mount_opt; 983 sbi->s_snapshot_cno = old_opts.snapshot_cno; 984 up_write(&nilfs->ns_super_sem); 985 unlock_kernel(); 986 return err; 987 } 988 989 struct nilfs_super_data { 990 struct block_device *bdev; 991 struct nilfs_sb_info *sbi; 992 __u64 cno; 993 int flags; 994 }; 995 996 /** 997 * nilfs_identify - pre-read mount options needed to identify mount instance 998 * @data: mount options 999 * @sd: nilfs_super_data 1000 */ 1001 static int nilfs_identify(char *data, struct nilfs_super_data *sd) 1002 { 1003 char *p, *options = data; 1004 substring_t args[MAX_OPT_ARGS]; 1005 int option, token; 1006 int ret = 0; 1007 1008 do { 1009 p = strsep(&options, ","); 1010 if (p != NULL && *p) { 1011 token = match_token(p, tokens, args); 1012 if (token == Opt_snapshot) { 1013 if (!(sd->flags & MS_RDONLY)) 1014 ret++; 1015 else { 1016 ret = match_int(&args[0], &option); 1017 if (!ret) { 1018 if (option > 0) 1019 sd->cno = option; 1020 else 1021 ret++; 1022 } 1023 } 1024 } 1025 if (ret) 1026 printk(KERN_ERR 1027 "NILFS: invalid mount option: %s\n", p); 1028 } 1029 if (!options) 1030 break; 1031 BUG_ON(options == data); 1032 *(options - 1) = ','; 1033 } while (!ret); 1034 return ret; 1035 } 1036 1037 static int nilfs_set_bdev_super(struct super_block *s, void *data) 1038 { 1039 struct nilfs_super_data *sd = data; 1040 1041 s->s_bdev = sd->bdev; 1042 s->s_dev = s->s_bdev->bd_dev; 1043 return 0; 1044 } 1045 1046 static int nilfs_test_bdev_super(struct super_block *s, void *data) 1047 { 1048 struct nilfs_super_data *sd = data; 1049 1050 return sd->sbi && s->s_fs_info == (void *)sd->sbi; 1051 } 1052 1053 static int 1054 nilfs_get_sb(struct file_system_type *fs_type, int flags, 1055 const char *dev_name, void *data, struct vfsmount *mnt) 1056 { 1057 struct nilfs_super_data sd; 1058 struct super_block *s; 1059 struct the_nilfs *nilfs; 1060 int err, need_to_close = 1; 1061 1062 sd.bdev = open_bdev_exclusive(dev_name, flags, fs_type); 1063 if (IS_ERR(sd.bdev)) 1064 return PTR_ERR(sd.bdev); 1065 1066 /* 1067 * To get mount instance using sget() vfs-routine, NILFS needs 1068 * much more information than normal filesystems to identify mount 1069 * instance. For snapshot mounts, not only a mount type (ro-mount 1070 * or rw-mount) but also a checkpoint number is required. 1071 */ 1072 sd.cno = 0; 1073 sd.flags = flags; 1074 if (nilfs_identify((char *)data, &sd)) { 1075 err = -EINVAL; 1076 goto failed; 1077 } 1078 1079 nilfs = find_or_create_nilfs(sd.bdev); 1080 if (!nilfs) { 1081 err = -ENOMEM; 1082 goto failed; 1083 } 1084 1085 mutex_lock(&nilfs->ns_mount_mutex); 1086 1087 if (!sd.cno) { 1088 /* 1089 * Check if an exclusive mount exists or not. 1090 * Snapshot mounts coexist with a current mount 1091 * (i.e. rw-mount or ro-mount), whereas rw-mount and 1092 * ro-mount are mutually exclusive. 1093 */ 1094 down_read(&nilfs->ns_super_sem); 1095 if (nilfs->ns_current && 1096 ((nilfs->ns_current->s_super->s_flags ^ flags) 1097 & MS_RDONLY)) { 1098 up_read(&nilfs->ns_super_sem); 1099 err = -EBUSY; 1100 goto failed_unlock; 1101 } 1102 up_read(&nilfs->ns_super_sem); 1103 } 1104 1105 /* 1106 * Find existing nilfs_sb_info struct 1107 */ 1108 sd.sbi = nilfs_find_sbinfo(nilfs, !(flags & MS_RDONLY), sd.cno); 1109 1110 /* 1111 * Get super block instance holding the nilfs_sb_info struct. 1112 * A new instance is allocated if no existing mount is present or 1113 * existing instance has been unmounted. 1114 */ 1115 s = sget(fs_type, nilfs_test_bdev_super, nilfs_set_bdev_super, &sd); 1116 if (sd.sbi) 1117 nilfs_put_sbinfo(sd.sbi); 1118 1119 if (IS_ERR(s)) { 1120 err = PTR_ERR(s); 1121 goto failed_unlock; 1122 } 1123 1124 if (!s->s_root) { 1125 char b[BDEVNAME_SIZE]; 1126 1127 /* New superblock instance created */ 1128 s->s_flags = flags; 1129 strlcpy(s->s_id, bdevname(sd.bdev, b), sizeof(s->s_id)); 1130 sb_set_blocksize(s, block_size(sd.bdev)); 1131 1132 err = nilfs_fill_super(s, data, flags & MS_VERBOSE, nilfs); 1133 if (err) 1134 goto cancel_new; 1135 1136 s->s_flags |= MS_ACTIVE; 1137 need_to_close = 0; 1138 } 1139 1140 mutex_unlock(&nilfs->ns_mount_mutex); 1141 put_nilfs(nilfs); 1142 if (need_to_close) 1143 close_bdev_exclusive(sd.bdev, flags); 1144 simple_set_mnt(mnt, s); 1145 return 0; 1146 1147 failed_unlock: 1148 mutex_unlock(&nilfs->ns_mount_mutex); 1149 put_nilfs(nilfs); 1150 failed: 1151 close_bdev_exclusive(sd.bdev, flags); 1152 1153 return err; 1154 1155 cancel_new: 1156 /* Abandoning the newly allocated superblock */ 1157 mutex_unlock(&nilfs->ns_mount_mutex); 1158 put_nilfs(nilfs); 1159 up_write(&s->s_umount); 1160 deactivate_super(s); 1161 /* 1162 * deactivate_super() invokes close_bdev_exclusive(). 1163 * We must finish all post-cleaning before this call; 1164 * put_nilfs() needs the block device. 1165 */ 1166 return err; 1167 } 1168 1169 struct file_system_type nilfs_fs_type = { 1170 .owner = THIS_MODULE, 1171 .name = "nilfs2", 1172 .get_sb = nilfs_get_sb, 1173 .kill_sb = kill_block_super, 1174 .fs_flags = FS_REQUIRES_DEV, 1175 }; 1176 1177 static int __init init_nilfs_fs(void) 1178 { 1179 int err; 1180 1181 err = nilfs_init_inode_cache(); 1182 if (err) 1183 goto failed; 1184 1185 err = nilfs_init_transaction_cache(); 1186 if (err) 1187 goto failed_inode_cache; 1188 1189 err = nilfs_init_segbuf_cache(); 1190 if (err) 1191 goto failed_transaction_cache; 1192 1193 err = nilfs_btree_path_cache_init(); 1194 if (err) 1195 goto failed_segbuf_cache; 1196 1197 err = register_filesystem(&nilfs_fs_type); 1198 if (err) 1199 goto failed_btree_path_cache; 1200 1201 return 0; 1202 1203 failed_btree_path_cache: 1204 nilfs_btree_path_cache_destroy(); 1205 1206 failed_segbuf_cache: 1207 nilfs_destroy_segbuf_cache(); 1208 1209 failed_transaction_cache: 1210 nilfs_destroy_transaction_cache(); 1211 1212 failed_inode_cache: 1213 nilfs_destroy_inode_cache(); 1214 1215 failed: 1216 return err; 1217 } 1218 1219 static void __exit exit_nilfs_fs(void) 1220 { 1221 nilfs_destroy_segbuf_cache(); 1222 nilfs_destroy_transaction_cache(); 1223 nilfs_destroy_inode_cache(); 1224 nilfs_btree_path_cache_destroy(); 1225 unregister_filesystem(&nilfs_fs_type); 1226 } 1227 1228 module_init(init_nilfs_fs) 1229 module_exit(exit_nilfs_fs) 1230