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