at v3.3-rc4 3099 lines 86 kB view raw
1/* 2 * linux/fs/ext3/super.c 3 * 4 * Copyright (C) 1992, 1993, 1994, 1995 5 * Remy Card (card@masi.ibp.fr) 6 * Laboratoire MASI - Institut Blaise Pascal 7 * Universite Pierre et Marie Curie (Paris VI) 8 * 9 * from 10 * 11 * linux/fs/minix/inode.c 12 * 13 * Copyright (C) 1991, 1992 Linus Torvalds 14 * 15 * Big-endian to little-endian byte-swapping/bitmaps by 16 * David S. Miller (davem@caip.rutgers.edu), 1995 17 */ 18 19#include <linux/module.h> 20#include <linux/string.h> 21#include <linux/fs.h> 22#include <linux/time.h> 23#include <linux/jbd.h> 24#include <linux/ext3_fs.h> 25#include <linux/ext3_jbd.h> 26#include <linux/slab.h> 27#include <linux/init.h> 28#include <linux/blkdev.h> 29#include <linux/parser.h> 30#include <linux/buffer_head.h> 31#include <linux/exportfs.h> 32#include <linux/vfs.h> 33#include <linux/random.h> 34#include <linux/mount.h> 35#include <linux/namei.h> 36#include <linux/quotaops.h> 37#include <linux/seq_file.h> 38#include <linux/log2.h> 39#include <linux/cleancache.h> 40 41#include <asm/uaccess.h> 42 43#include "xattr.h" 44#include "acl.h" 45#include "namei.h" 46 47#define CREATE_TRACE_POINTS 48#include <trace/events/ext3.h> 49 50#ifdef CONFIG_EXT3_DEFAULTS_TO_ORDERED 51 #define EXT3_MOUNT_DEFAULT_DATA_MODE EXT3_MOUNT_ORDERED_DATA 52#else 53 #define EXT3_MOUNT_DEFAULT_DATA_MODE EXT3_MOUNT_WRITEBACK_DATA 54#endif 55 56static int ext3_load_journal(struct super_block *, struct ext3_super_block *, 57 unsigned long journal_devnum); 58static int ext3_create_journal(struct super_block *, struct ext3_super_block *, 59 unsigned int); 60static int ext3_commit_super(struct super_block *sb, 61 struct ext3_super_block *es, 62 int sync); 63static void ext3_mark_recovery_complete(struct super_block * sb, 64 struct ext3_super_block * es); 65static void ext3_clear_journal_err(struct super_block * sb, 66 struct ext3_super_block * es); 67static int ext3_sync_fs(struct super_block *sb, int wait); 68static const char *ext3_decode_error(struct super_block * sb, int errno, 69 char nbuf[16]); 70static int ext3_remount (struct super_block * sb, int * flags, char * data); 71static int ext3_statfs (struct dentry * dentry, struct kstatfs * buf); 72static int ext3_unfreeze(struct super_block *sb); 73static int ext3_freeze(struct super_block *sb); 74 75/* 76 * Wrappers for journal_start/end. 77 * 78 * The only special thing we need to do here is to make sure that all 79 * journal_end calls result in the superblock being marked dirty, so 80 * that sync() will call the filesystem's write_super callback if 81 * appropriate. 82 */ 83handle_t *ext3_journal_start_sb(struct super_block *sb, int nblocks) 84{ 85 journal_t *journal; 86 87 if (sb->s_flags & MS_RDONLY) 88 return ERR_PTR(-EROFS); 89 90 /* Special case here: if the journal has aborted behind our 91 * backs (eg. EIO in the commit thread), then we still need to 92 * take the FS itself readonly cleanly. */ 93 journal = EXT3_SB(sb)->s_journal; 94 if (is_journal_aborted(journal)) { 95 ext3_abort(sb, __func__, 96 "Detected aborted journal"); 97 return ERR_PTR(-EROFS); 98 } 99 100 return journal_start(journal, nblocks); 101} 102 103/* 104 * The only special thing we need to do here is to make sure that all 105 * journal_stop calls result in the superblock being marked dirty, so 106 * that sync() will call the filesystem's write_super callback if 107 * appropriate. 108 */ 109int __ext3_journal_stop(const char *where, handle_t *handle) 110{ 111 struct super_block *sb; 112 int err; 113 int rc; 114 115 sb = handle->h_transaction->t_journal->j_private; 116 err = handle->h_err; 117 rc = journal_stop(handle); 118 119 if (!err) 120 err = rc; 121 if (err) 122 __ext3_std_error(sb, where, err); 123 return err; 124} 125 126void ext3_journal_abort_handle(const char *caller, const char *err_fn, 127 struct buffer_head *bh, handle_t *handle, int err) 128{ 129 char nbuf[16]; 130 const char *errstr = ext3_decode_error(NULL, err, nbuf); 131 132 if (bh) 133 BUFFER_TRACE(bh, "abort"); 134 135 if (!handle->h_err) 136 handle->h_err = err; 137 138 if (is_handle_aborted(handle)) 139 return; 140 141 printk(KERN_ERR "EXT3-fs: %s: aborting transaction: %s in %s\n", 142 caller, errstr, err_fn); 143 144 journal_abort_handle(handle); 145} 146 147void ext3_msg(struct super_block *sb, const char *prefix, 148 const char *fmt, ...) 149{ 150 struct va_format vaf; 151 va_list args; 152 153 va_start(args, fmt); 154 155 vaf.fmt = fmt; 156 vaf.va = &args; 157 158 printk("%sEXT3-fs (%s): %pV\n", prefix, sb->s_id, &vaf); 159 160 va_end(args); 161} 162 163/* Deal with the reporting of failure conditions on a filesystem such as 164 * inconsistencies detected or read IO failures. 165 * 166 * On ext2, we can store the error state of the filesystem in the 167 * superblock. That is not possible on ext3, because we may have other 168 * write ordering constraints on the superblock which prevent us from 169 * writing it out straight away; and given that the journal is about to 170 * be aborted, we can't rely on the current, or future, transactions to 171 * write out the superblock safely. 172 * 173 * We'll just use the journal_abort() error code to record an error in 174 * the journal instead. On recovery, the journal will complain about 175 * that error until we've noted it down and cleared it. 176 */ 177 178static void ext3_handle_error(struct super_block *sb) 179{ 180 struct ext3_super_block *es = EXT3_SB(sb)->s_es; 181 182 EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS; 183 es->s_state |= cpu_to_le16(EXT3_ERROR_FS); 184 185 if (sb->s_flags & MS_RDONLY) 186 return; 187 188 if (!test_opt (sb, ERRORS_CONT)) { 189 journal_t *journal = EXT3_SB(sb)->s_journal; 190 191 set_opt(EXT3_SB(sb)->s_mount_opt, ABORT); 192 if (journal) 193 journal_abort(journal, -EIO); 194 } 195 if (test_opt (sb, ERRORS_RO)) { 196 ext3_msg(sb, KERN_CRIT, 197 "error: remounting filesystem read-only"); 198 sb->s_flags |= MS_RDONLY; 199 } 200 ext3_commit_super(sb, es, 1); 201 if (test_opt(sb, ERRORS_PANIC)) 202 panic("EXT3-fs (%s): panic forced after error\n", 203 sb->s_id); 204} 205 206void ext3_error(struct super_block *sb, const char *function, 207 const char *fmt, ...) 208{ 209 struct va_format vaf; 210 va_list args; 211 212 va_start(args, fmt); 213 214 vaf.fmt = fmt; 215 vaf.va = &args; 216 217 printk(KERN_CRIT "EXT3-fs error (device %s): %s: %pV\n", 218 sb->s_id, function, &vaf); 219 220 va_end(args); 221 222 ext3_handle_error(sb); 223} 224 225static const char *ext3_decode_error(struct super_block * sb, int errno, 226 char nbuf[16]) 227{ 228 char *errstr = NULL; 229 230 switch (errno) { 231 case -EIO: 232 errstr = "IO failure"; 233 break; 234 case -ENOMEM: 235 errstr = "Out of memory"; 236 break; 237 case -EROFS: 238 if (!sb || EXT3_SB(sb)->s_journal->j_flags & JFS_ABORT) 239 errstr = "Journal has aborted"; 240 else 241 errstr = "Readonly filesystem"; 242 break; 243 default: 244 /* If the caller passed in an extra buffer for unknown 245 * errors, textualise them now. Else we just return 246 * NULL. */ 247 if (nbuf) { 248 /* Check for truncated error codes... */ 249 if (snprintf(nbuf, 16, "error %d", -errno) >= 0) 250 errstr = nbuf; 251 } 252 break; 253 } 254 255 return errstr; 256} 257 258/* __ext3_std_error decodes expected errors from journaling functions 259 * automatically and invokes the appropriate error response. */ 260 261void __ext3_std_error (struct super_block * sb, const char * function, 262 int errno) 263{ 264 char nbuf[16]; 265 const char *errstr; 266 267 /* Special case: if the error is EROFS, and we're not already 268 * inside a transaction, then there's really no point in logging 269 * an error. */ 270 if (errno == -EROFS && journal_current_handle() == NULL && 271 (sb->s_flags & MS_RDONLY)) 272 return; 273 274 errstr = ext3_decode_error(sb, errno, nbuf); 275 ext3_msg(sb, KERN_CRIT, "error in %s: %s", function, errstr); 276 277 ext3_handle_error(sb); 278} 279 280/* 281 * ext3_abort is a much stronger failure handler than ext3_error. The 282 * abort function may be used to deal with unrecoverable failures such 283 * as journal IO errors or ENOMEM at a critical moment in log management. 284 * 285 * We unconditionally force the filesystem into an ABORT|READONLY state, 286 * unless the error response on the fs has been set to panic in which 287 * case we take the easy way out and panic immediately. 288 */ 289 290void ext3_abort(struct super_block *sb, const char *function, 291 const char *fmt, ...) 292{ 293 struct va_format vaf; 294 va_list args; 295 296 va_start(args, fmt); 297 298 vaf.fmt = fmt; 299 vaf.va = &args; 300 301 printk(KERN_CRIT "EXT3-fs (%s): error: %s: %pV\n", 302 sb->s_id, function, &vaf); 303 304 va_end(args); 305 306 if (test_opt(sb, ERRORS_PANIC)) 307 panic("EXT3-fs: panic from previous error\n"); 308 309 if (sb->s_flags & MS_RDONLY) 310 return; 311 312 ext3_msg(sb, KERN_CRIT, 313 "error: remounting filesystem read-only"); 314 EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS; 315 sb->s_flags |= MS_RDONLY; 316 set_opt(EXT3_SB(sb)->s_mount_opt, ABORT); 317 if (EXT3_SB(sb)->s_journal) 318 journal_abort(EXT3_SB(sb)->s_journal, -EIO); 319} 320 321void ext3_warning(struct super_block *sb, const char *function, 322 const char *fmt, ...) 323{ 324 struct va_format vaf; 325 va_list args; 326 327 va_start(args, fmt); 328 329 vaf.fmt = fmt; 330 vaf.va = &args; 331 332 printk(KERN_WARNING "EXT3-fs (%s): warning: %s: %pV\n", 333 sb->s_id, function, &vaf); 334 335 va_end(args); 336} 337 338void ext3_update_dynamic_rev(struct super_block *sb) 339{ 340 struct ext3_super_block *es = EXT3_SB(sb)->s_es; 341 342 if (le32_to_cpu(es->s_rev_level) > EXT3_GOOD_OLD_REV) 343 return; 344 345 ext3_msg(sb, KERN_WARNING, 346 "warning: updating to rev %d because of " 347 "new feature flag, running e2fsck is recommended", 348 EXT3_DYNAMIC_REV); 349 350 es->s_first_ino = cpu_to_le32(EXT3_GOOD_OLD_FIRST_INO); 351 es->s_inode_size = cpu_to_le16(EXT3_GOOD_OLD_INODE_SIZE); 352 es->s_rev_level = cpu_to_le32(EXT3_DYNAMIC_REV); 353 /* leave es->s_feature_*compat flags alone */ 354 /* es->s_uuid will be set by e2fsck if empty */ 355 356 /* 357 * The rest of the superblock fields should be zero, and if not it 358 * means they are likely already in use, so leave them alone. We 359 * can leave it up to e2fsck to clean up any inconsistencies there. 360 */ 361} 362 363/* 364 * Open the external journal device 365 */ 366static struct block_device *ext3_blkdev_get(dev_t dev, struct super_block *sb) 367{ 368 struct block_device *bdev; 369 char b[BDEVNAME_SIZE]; 370 371 bdev = blkdev_get_by_dev(dev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, sb); 372 if (IS_ERR(bdev)) 373 goto fail; 374 return bdev; 375 376fail: 377 ext3_msg(sb, "error: failed to open journal device %s: %ld", 378 __bdevname(dev, b), PTR_ERR(bdev)); 379 380 return NULL; 381} 382 383/* 384 * Release the journal device 385 */ 386static int ext3_blkdev_put(struct block_device *bdev) 387{ 388 return blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); 389} 390 391static int ext3_blkdev_remove(struct ext3_sb_info *sbi) 392{ 393 struct block_device *bdev; 394 int ret = -ENODEV; 395 396 bdev = sbi->journal_bdev; 397 if (bdev) { 398 ret = ext3_blkdev_put(bdev); 399 sbi->journal_bdev = NULL; 400 } 401 return ret; 402} 403 404static inline struct inode *orphan_list_entry(struct list_head *l) 405{ 406 return &list_entry(l, struct ext3_inode_info, i_orphan)->vfs_inode; 407} 408 409static void dump_orphan_list(struct super_block *sb, struct ext3_sb_info *sbi) 410{ 411 struct list_head *l; 412 413 ext3_msg(sb, KERN_ERR, "error: sb orphan head is %d", 414 le32_to_cpu(sbi->s_es->s_last_orphan)); 415 416 ext3_msg(sb, KERN_ERR, "sb_info orphan list:"); 417 list_for_each(l, &sbi->s_orphan) { 418 struct inode *inode = orphan_list_entry(l); 419 ext3_msg(sb, KERN_ERR, " " 420 "inode %s:%lu at %p: mode %o, nlink %d, next %d\n", 421 inode->i_sb->s_id, inode->i_ino, inode, 422 inode->i_mode, inode->i_nlink, 423 NEXT_ORPHAN(inode)); 424 } 425} 426 427static void ext3_put_super (struct super_block * sb) 428{ 429 struct ext3_sb_info *sbi = EXT3_SB(sb); 430 struct ext3_super_block *es = sbi->s_es; 431 int i, err; 432 433 dquot_disable(sb, -1, DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED); 434 ext3_xattr_put_super(sb); 435 err = journal_destroy(sbi->s_journal); 436 sbi->s_journal = NULL; 437 if (err < 0) 438 ext3_abort(sb, __func__, "Couldn't clean up the journal"); 439 440 if (!(sb->s_flags & MS_RDONLY)) { 441 EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER); 442 es->s_state = cpu_to_le16(sbi->s_mount_state); 443 BUFFER_TRACE(sbi->s_sbh, "marking dirty"); 444 mark_buffer_dirty(sbi->s_sbh); 445 ext3_commit_super(sb, es, 1); 446 } 447 448 for (i = 0; i < sbi->s_gdb_count; i++) 449 brelse(sbi->s_group_desc[i]); 450 kfree(sbi->s_group_desc); 451 percpu_counter_destroy(&sbi->s_freeblocks_counter); 452 percpu_counter_destroy(&sbi->s_freeinodes_counter); 453 percpu_counter_destroy(&sbi->s_dirs_counter); 454 brelse(sbi->s_sbh); 455#ifdef CONFIG_QUOTA 456 for (i = 0; i < MAXQUOTAS; i++) 457 kfree(sbi->s_qf_names[i]); 458#endif 459 460 /* Debugging code just in case the in-memory inode orphan list 461 * isn't empty. The on-disk one can be non-empty if we've 462 * detected an error and taken the fs readonly, but the 463 * in-memory list had better be clean by this point. */ 464 if (!list_empty(&sbi->s_orphan)) 465 dump_orphan_list(sb, sbi); 466 J_ASSERT(list_empty(&sbi->s_orphan)); 467 468 invalidate_bdev(sb->s_bdev); 469 if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) { 470 /* 471 * Invalidate the journal device's buffers. We don't want them 472 * floating about in memory - the physical journal device may 473 * hotswapped, and it breaks the `ro-after' testing code. 474 */ 475 sync_blockdev(sbi->journal_bdev); 476 invalidate_bdev(sbi->journal_bdev); 477 ext3_blkdev_remove(sbi); 478 } 479 sb->s_fs_info = NULL; 480 kfree(sbi->s_blockgroup_lock); 481 kfree(sbi); 482} 483 484static struct kmem_cache *ext3_inode_cachep; 485 486/* 487 * Called inside transaction, so use GFP_NOFS 488 */ 489static struct inode *ext3_alloc_inode(struct super_block *sb) 490{ 491 struct ext3_inode_info *ei; 492 493 ei = kmem_cache_alloc(ext3_inode_cachep, GFP_NOFS); 494 if (!ei) 495 return NULL; 496 ei->i_block_alloc_info = NULL; 497 ei->vfs_inode.i_version = 1; 498 atomic_set(&ei->i_datasync_tid, 0); 499 atomic_set(&ei->i_sync_tid, 0); 500 return &ei->vfs_inode; 501} 502 503static int ext3_drop_inode(struct inode *inode) 504{ 505 int drop = generic_drop_inode(inode); 506 507 trace_ext3_drop_inode(inode, drop); 508 return drop; 509} 510 511static void ext3_i_callback(struct rcu_head *head) 512{ 513 struct inode *inode = container_of(head, struct inode, i_rcu); 514 kmem_cache_free(ext3_inode_cachep, EXT3_I(inode)); 515} 516 517static void ext3_destroy_inode(struct inode *inode) 518{ 519 if (!list_empty(&(EXT3_I(inode)->i_orphan))) { 520 printk("EXT3 Inode %p: orphan list check failed!\n", 521 EXT3_I(inode)); 522 print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, 16, 4, 523 EXT3_I(inode), sizeof(struct ext3_inode_info), 524 false); 525 dump_stack(); 526 } 527 call_rcu(&inode->i_rcu, ext3_i_callback); 528} 529 530static void init_once(void *foo) 531{ 532 struct ext3_inode_info *ei = (struct ext3_inode_info *) foo; 533 534 INIT_LIST_HEAD(&ei->i_orphan); 535#ifdef CONFIG_EXT3_FS_XATTR 536 init_rwsem(&ei->xattr_sem); 537#endif 538 mutex_init(&ei->truncate_mutex); 539 inode_init_once(&ei->vfs_inode); 540} 541 542static int init_inodecache(void) 543{ 544 ext3_inode_cachep = kmem_cache_create("ext3_inode_cache", 545 sizeof(struct ext3_inode_info), 546 0, (SLAB_RECLAIM_ACCOUNT| 547 SLAB_MEM_SPREAD), 548 init_once); 549 if (ext3_inode_cachep == NULL) 550 return -ENOMEM; 551 return 0; 552} 553 554static void destroy_inodecache(void) 555{ 556 kmem_cache_destroy(ext3_inode_cachep); 557} 558 559static inline void ext3_show_quota_options(struct seq_file *seq, struct super_block *sb) 560{ 561#if defined(CONFIG_QUOTA) 562 struct ext3_sb_info *sbi = EXT3_SB(sb); 563 564 if (sbi->s_jquota_fmt) { 565 char *fmtname = ""; 566 567 switch (sbi->s_jquota_fmt) { 568 case QFMT_VFS_OLD: 569 fmtname = "vfsold"; 570 break; 571 case QFMT_VFS_V0: 572 fmtname = "vfsv0"; 573 break; 574 case QFMT_VFS_V1: 575 fmtname = "vfsv1"; 576 break; 577 } 578 seq_printf(seq, ",jqfmt=%s", fmtname); 579 } 580 581 if (sbi->s_qf_names[USRQUOTA]) 582 seq_printf(seq, ",usrjquota=%s", sbi->s_qf_names[USRQUOTA]); 583 584 if (sbi->s_qf_names[GRPQUOTA]) 585 seq_printf(seq, ",grpjquota=%s", sbi->s_qf_names[GRPQUOTA]); 586 587 if (test_opt(sb, USRQUOTA)) 588 seq_puts(seq, ",usrquota"); 589 590 if (test_opt(sb, GRPQUOTA)) 591 seq_puts(seq, ",grpquota"); 592#endif 593} 594 595static char *data_mode_string(unsigned long mode) 596{ 597 switch (mode) { 598 case EXT3_MOUNT_JOURNAL_DATA: 599 return "journal"; 600 case EXT3_MOUNT_ORDERED_DATA: 601 return "ordered"; 602 case EXT3_MOUNT_WRITEBACK_DATA: 603 return "writeback"; 604 } 605 return "unknown"; 606} 607 608/* 609 * Show an option if 610 * - it's set to a non-default value OR 611 * - if the per-sb default is different from the global default 612 */ 613static int ext3_show_options(struct seq_file *seq, struct dentry *root) 614{ 615 struct super_block *sb = root->d_sb; 616 struct ext3_sb_info *sbi = EXT3_SB(sb); 617 struct ext3_super_block *es = sbi->s_es; 618 unsigned long def_mount_opts; 619 620 def_mount_opts = le32_to_cpu(es->s_default_mount_opts); 621 622 if (sbi->s_sb_block != 1) 623 seq_printf(seq, ",sb=%lu", sbi->s_sb_block); 624 if (test_opt(sb, MINIX_DF)) 625 seq_puts(seq, ",minixdf"); 626 if (test_opt(sb, GRPID)) 627 seq_puts(seq, ",grpid"); 628 if (!test_opt(sb, GRPID) && (def_mount_opts & EXT3_DEFM_BSDGROUPS)) 629 seq_puts(seq, ",nogrpid"); 630 if (sbi->s_resuid != EXT3_DEF_RESUID || 631 le16_to_cpu(es->s_def_resuid) != EXT3_DEF_RESUID) { 632 seq_printf(seq, ",resuid=%u", sbi->s_resuid); 633 } 634 if (sbi->s_resgid != EXT3_DEF_RESGID || 635 le16_to_cpu(es->s_def_resgid) != EXT3_DEF_RESGID) { 636 seq_printf(seq, ",resgid=%u", sbi->s_resgid); 637 } 638 if (test_opt(sb, ERRORS_RO)) { 639 int def_errors = le16_to_cpu(es->s_errors); 640 641 if (def_errors == EXT3_ERRORS_PANIC || 642 def_errors == EXT3_ERRORS_CONTINUE) { 643 seq_puts(seq, ",errors=remount-ro"); 644 } 645 } 646 if (test_opt(sb, ERRORS_CONT)) 647 seq_puts(seq, ",errors=continue"); 648 if (test_opt(sb, ERRORS_PANIC)) 649 seq_puts(seq, ",errors=panic"); 650 if (test_opt(sb, NO_UID32)) 651 seq_puts(seq, ",nouid32"); 652 if (test_opt(sb, DEBUG)) 653 seq_puts(seq, ",debug"); 654#ifdef CONFIG_EXT3_FS_XATTR 655 if (test_opt(sb, XATTR_USER)) 656 seq_puts(seq, ",user_xattr"); 657 if (!test_opt(sb, XATTR_USER) && 658 (def_mount_opts & EXT3_DEFM_XATTR_USER)) { 659 seq_puts(seq, ",nouser_xattr"); 660 } 661#endif 662#ifdef CONFIG_EXT3_FS_POSIX_ACL 663 if (test_opt(sb, POSIX_ACL)) 664 seq_puts(seq, ",acl"); 665 if (!test_opt(sb, POSIX_ACL) && (def_mount_opts & EXT3_DEFM_ACL)) 666 seq_puts(seq, ",noacl"); 667#endif 668 if (!test_opt(sb, RESERVATION)) 669 seq_puts(seq, ",noreservation"); 670 if (sbi->s_commit_interval) { 671 seq_printf(seq, ",commit=%u", 672 (unsigned) (sbi->s_commit_interval / HZ)); 673 } 674 675 /* 676 * Always display barrier state so it's clear what the status is. 677 */ 678 seq_puts(seq, ",barrier="); 679 seq_puts(seq, test_opt(sb, BARRIER) ? "1" : "0"); 680 seq_printf(seq, ",data=%s", data_mode_string(test_opt(sb, DATA_FLAGS))); 681 if (test_opt(sb, DATA_ERR_ABORT)) 682 seq_puts(seq, ",data_err=abort"); 683 684 if (test_opt(sb, NOLOAD)) 685 seq_puts(seq, ",norecovery"); 686 687 ext3_show_quota_options(seq, sb); 688 689 return 0; 690} 691 692 693static struct inode *ext3_nfs_get_inode(struct super_block *sb, 694 u64 ino, u32 generation) 695{ 696 struct inode *inode; 697 698 if (ino < EXT3_FIRST_INO(sb) && ino != EXT3_ROOT_INO) 699 return ERR_PTR(-ESTALE); 700 if (ino > le32_to_cpu(EXT3_SB(sb)->s_es->s_inodes_count)) 701 return ERR_PTR(-ESTALE); 702 703 /* iget isn't really right if the inode is currently unallocated!! 704 * 705 * ext3_read_inode will return a bad_inode if the inode had been 706 * deleted, so we should be safe. 707 * 708 * Currently we don't know the generation for parent directory, so 709 * a generation of 0 means "accept any" 710 */ 711 inode = ext3_iget(sb, ino); 712 if (IS_ERR(inode)) 713 return ERR_CAST(inode); 714 if (generation && inode->i_generation != generation) { 715 iput(inode); 716 return ERR_PTR(-ESTALE); 717 } 718 719 return inode; 720} 721 722static struct dentry *ext3_fh_to_dentry(struct super_block *sb, struct fid *fid, 723 int fh_len, int fh_type) 724{ 725 return generic_fh_to_dentry(sb, fid, fh_len, fh_type, 726 ext3_nfs_get_inode); 727} 728 729static struct dentry *ext3_fh_to_parent(struct super_block *sb, struct fid *fid, 730 int fh_len, int fh_type) 731{ 732 return generic_fh_to_parent(sb, fid, fh_len, fh_type, 733 ext3_nfs_get_inode); 734} 735 736/* 737 * Try to release metadata pages (indirect blocks, directories) which are 738 * mapped via the block device. Since these pages could have journal heads 739 * which would prevent try_to_free_buffers() from freeing them, we must use 740 * jbd layer's try_to_free_buffers() function to release them. 741 */ 742static int bdev_try_to_free_page(struct super_block *sb, struct page *page, 743 gfp_t wait) 744{ 745 journal_t *journal = EXT3_SB(sb)->s_journal; 746 747 WARN_ON(PageChecked(page)); 748 if (!page_has_buffers(page)) 749 return 0; 750 if (journal) 751 return journal_try_to_free_buffers(journal, page, 752 wait & ~__GFP_WAIT); 753 return try_to_free_buffers(page); 754} 755 756#ifdef CONFIG_QUOTA 757#define QTYPE2NAME(t) ((t)==USRQUOTA?"user":"group") 758#define QTYPE2MOPT(on, t) ((t)==USRQUOTA?((on)##USRJQUOTA):((on)##GRPJQUOTA)) 759 760static int ext3_write_dquot(struct dquot *dquot); 761static int ext3_acquire_dquot(struct dquot *dquot); 762static int ext3_release_dquot(struct dquot *dquot); 763static int ext3_mark_dquot_dirty(struct dquot *dquot); 764static int ext3_write_info(struct super_block *sb, int type); 765static int ext3_quota_on(struct super_block *sb, int type, int format_id, 766 struct path *path); 767static int ext3_quota_on_mount(struct super_block *sb, int type); 768static ssize_t ext3_quota_read(struct super_block *sb, int type, char *data, 769 size_t len, loff_t off); 770static ssize_t ext3_quota_write(struct super_block *sb, int type, 771 const char *data, size_t len, loff_t off); 772 773static const struct dquot_operations ext3_quota_operations = { 774 .write_dquot = ext3_write_dquot, 775 .acquire_dquot = ext3_acquire_dquot, 776 .release_dquot = ext3_release_dquot, 777 .mark_dirty = ext3_mark_dquot_dirty, 778 .write_info = ext3_write_info, 779 .alloc_dquot = dquot_alloc, 780 .destroy_dquot = dquot_destroy, 781}; 782 783static const struct quotactl_ops ext3_qctl_operations = { 784 .quota_on = ext3_quota_on, 785 .quota_off = dquot_quota_off, 786 .quota_sync = dquot_quota_sync, 787 .get_info = dquot_get_dqinfo, 788 .set_info = dquot_set_dqinfo, 789 .get_dqblk = dquot_get_dqblk, 790 .set_dqblk = dquot_set_dqblk 791}; 792#endif 793 794static const struct super_operations ext3_sops = { 795 .alloc_inode = ext3_alloc_inode, 796 .destroy_inode = ext3_destroy_inode, 797 .write_inode = ext3_write_inode, 798 .dirty_inode = ext3_dirty_inode, 799 .drop_inode = ext3_drop_inode, 800 .evict_inode = ext3_evict_inode, 801 .put_super = ext3_put_super, 802 .sync_fs = ext3_sync_fs, 803 .freeze_fs = ext3_freeze, 804 .unfreeze_fs = ext3_unfreeze, 805 .statfs = ext3_statfs, 806 .remount_fs = ext3_remount, 807 .show_options = ext3_show_options, 808#ifdef CONFIG_QUOTA 809 .quota_read = ext3_quota_read, 810 .quota_write = ext3_quota_write, 811#endif 812 .bdev_try_to_free_page = bdev_try_to_free_page, 813}; 814 815static const struct export_operations ext3_export_ops = { 816 .fh_to_dentry = ext3_fh_to_dentry, 817 .fh_to_parent = ext3_fh_to_parent, 818 .get_parent = ext3_get_parent, 819}; 820 821enum { 822 Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid, 823 Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro, 824 Opt_nouid32, Opt_nocheck, Opt_debug, Opt_oldalloc, Opt_orlov, 825 Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl, 826 Opt_reservation, Opt_noreservation, Opt_noload, Opt_nobh, Opt_bh, 827 Opt_commit, Opt_journal_update, Opt_journal_inum, Opt_journal_dev, 828 Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback, 829 Opt_data_err_abort, Opt_data_err_ignore, 830 Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota, 831 Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota, 832 Opt_noquota, Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err, 833 Opt_resize, Opt_usrquota, Opt_grpquota 834}; 835 836static const match_table_t tokens = { 837 {Opt_bsd_df, "bsddf"}, 838 {Opt_minix_df, "minixdf"}, 839 {Opt_grpid, "grpid"}, 840 {Opt_grpid, "bsdgroups"}, 841 {Opt_nogrpid, "nogrpid"}, 842 {Opt_nogrpid, "sysvgroups"}, 843 {Opt_resgid, "resgid=%u"}, 844 {Opt_resuid, "resuid=%u"}, 845 {Opt_sb, "sb=%u"}, 846 {Opt_err_cont, "errors=continue"}, 847 {Opt_err_panic, "errors=panic"}, 848 {Opt_err_ro, "errors=remount-ro"}, 849 {Opt_nouid32, "nouid32"}, 850 {Opt_nocheck, "nocheck"}, 851 {Opt_nocheck, "check=none"}, 852 {Opt_debug, "debug"}, 853 {Opt_oldalloc, "oldalloc"}, 854 {Opt_orlov, "orlov"}, 855 {Opt_user_xattr, "user_xattr"}, 856 {Opt_nouser_xattr, "nouser_xattr"}, 857 {Opt_acl, "acl"}, 858 {Opt_noacl, "noacl"}, 859 {Opt_reservation, "reservation"}, 860 {Opt_noreservation, "noreservation"}, 861 {Opt_noload, "noload"}, 862 {Opt_noload, "norecovery"}, 863 {Opt_nobh, "nobh"}, 864 {Opt_bh, "bh"}, 865 {Opt_commit, "commit=%u"}, 866 {Opt_journal_update, "journal=update"}, 867 {Opt_journal_inum, "journal=%u"}, 868 {Opt_journal_dev, "journal_dev=%u"}, 869 {Opt_abort, "abort"}, 870 {Opt_data_journal, "data=journal"}, 871 {Opt_data_ordered, "data=ordered"}, 872 {Opt_data_writeback, "data=writeback"}, 873 {Opt_data_err_abort, "data_err=abort"}, 874 {Opt_data_err_ignore, "data_err=ignore"}, 875 {Opt_offusrjquota, "usrjquota="}, 876 {Opt_usrjquota, "usrjquota=%s"}, 877 {Opt_offgrpjquota, "grpjquota="}, 878 {Opt_grpjquota, "grpjquota=%s"}, 879 {Opt_jqfmt_vfsold, "jqfmt=vfsold"}, 880 {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"}, 881 {Opt_jqfmt_vfsv1, "jqfmt=vfsv1"}, 882 {Opt_grpquota, "grpquota"}, 883 {Opt_noquota, "noquota"}, 884 {Opt_quota, "quota"}, 885 {Opt_usrquota, "usrquota"}, 886 {Opt_barrier, "barrier=%u"}, 887 {Opt_barrier, "barrier"}, 888 {Opt_nobarrier, "nobarrier"}, 889 {Opt_resize, "resize"}, 890 {Opt_err, NULL}, 891}; 892 893static ext3_fsblk_t get_sb_block(void **data, struct super_block *sb) 894{ 895 ext3_fsblk_t sb_block; 896 char *options = (char *) *data; 897 898 if (!options || strncmp(options, "sb=", 3) != 0) 899 return 1; /* Default location */ 900 options += 3; 901 /*todo: use simple_strtoll with >32bit ext3 */ 902 sb_block = simple_strtoul(options, &options, 0); 903 if (*options && *options != ',') { 904 ext3_msg(sb, "error: invalid sb specification: %s", 905 (char *) *data); 906 return 1; 907 } 908 if (*options == ',') 909 options++; 910 *data = (void *) options; 911 return sb_block; 912} 913 914#ifdef CONFIG_QUOTA 915static int set_qf_name(struct super_block *sb, int qtype, substring_t *args) 916{ 917 struct ext3_sb_info *sbi = EXT3_SB(sb); 918 char *qname; 919 920 if (sb_any_quota_loaded(sb) && 921 !sbi->s_qf_names[qtype]) { 922 ext3_msg(sb, KERN_ERR, 923 "Cannot change journaled " 924 "quota options when quota turned on"); 925 return 0; 926 } 927 qname = match_strdup(args); 928 if (!qname) { 929 ext3_msg(sb, KERN_ERR, 930 "Not enough memory for storing quotafile name"); 931 return 0; 932 } 933 if (sbi->s_qf_names[qtype] && 934 strcmp(sbi->s_qf_names[qtype], qname)) { 935 ext3_msg(sb, KERN_ERR, 936 "%s quota file already specified", QTYPE2NAME(qtype)); 937 kfree(qname); 938 return 0; 939 } 940 sbi->s_qf_names[qtype] = qname; 941 if (strchr(sbi->s_qf_names[qtype], '/')) { 942 ext3_msg(sb, KERN_ERR, 943 "quotafile must be on filesystem root"); 944 kfree(sbi->s_qf_names[qtype]); 945 sbi->s_qf_names[qtype] = NULL; 946 return 0; 947 } 948 set_opt(sbi->s_mount_opt, QUOTA); 949 return 1; 950} 951 952static int clear_qf_name(struct super_block *sb, int qtype) { 953 954 struct ext3_sb_info *sbi = EXT3_SB(sb); 955 956 if (sb_any_quota_loaded(sb) && 957 sbi->s_qf_names[qtype]) { 958 ext3_msg(sb, KERN_ERR, "Cannot change journaled quota options" 959 " when quota turned on"); 960 return 0; 961 } 962 /* 963 * The space will be released later when all options are confirmed 964 * to be correct 965 */ 966 sbi->s_qf_names[qtype] = NULL; 967 return 1; 968} 969#endif 970 971static int parse_options (char *options, struct super_block *sb, 972 unsigned int *inum, unsigned long *journal_devnum, 973 ext3_fsblk_t *n_blocks_count, int is_remount) 974{ 975 struct ext3_sb_info *sbi = EXT3_SB(sb); 976 char * p; 977 substring_t args[MAX_OPT_ARGS]; 978 int data_opt = 0; 979 int option; 980#ifdef CONFIG_QUOTA 981 int qfmt; 982#endif 983 984 if (!options) 985 return 1; 986 987 while ((p = strsep (&options, ",")) != NULL) { 988 int token; 989 if (!*p) 990 continue; 991 /* 992 * Initialize args struct so we know whether arg was 993 * found; some options take optional arguments. 994 */ 995 args[0].to = args[0].from = 0; 996 token = match_token(p, tokens, args); 997 switch (token) { 998 case Opt_bsd_df: 999 clear_opt (sbi->s_mount_opt, MINIX_DF); 1000 break; 1001 case Opt_minix_df: 1002 set_opt (sbi->s_mount_opt, MINIX_DF); 1003 break; 1004 case Opt_grpid: 1005 set_opt (sbi->s_mount_opt, GRPID); 1006 break; 1007 case Opt_nogrpid: 1008 clear_opt (sbi->s_mount_opt, GRPID); 1009 break; 1010 case Opt_resuid: 1011 if (match_int(&args[0], &option)) 1012 return 0; 1013 sbi->s_resuid = option; 1014 break; 1015 case Opt_resgid: 1016 if (match_int(&args[0], &option)) 1017 return 0; 1018 sbi->s_resgid = option; 1019 break; 1020 case Opt_sb: 1021 /* handled by get_sb_block() instead of here */ 1022 /* *sb_block = match_int(&args[0]); */ 1023 break; 1024 case Opt_err_panic: 1025 clear_opt (sbi->s_mount_opt, ERRORS_CONT); 1026 clear_opt (sbi->s_mount_opt, ERRORS_RO); 1027 set_opt (sbi->s_mount_opt, ERRORS_PANIC); 1028 break; 1029 case Opt_err_ro: 1030 clear_opt (sbi->s_mount_opt, ERRORS_CONT); 1031 clear_opt (sbi->s_mount_opt, ERRORS_PANIC); 1032 set_opt (sbi->s_mount_opt, ERRORS_RO); 1033 break; 1034 case Opt_err_cont: 1035 clear_opt (sbi->s_mount_opt, ERRORS_RO); 1036 clear_opt (sbi->s_mount_opt, ERRORS_PANIC); 1037 set_opt (sbi->s_mount_opt, ERRORS_CONT); 1038 break; 1039 case Opt_nouid32: 1040 set_opt (sbi->s_mount_opt, NO_UID32); 1041 break; 1042 case Opt_nocheck: 1043 clear_opt (sbi->s_mount_opt, CHECK); 1044 break; 1045 case Opt_debug: 1046 set_opt (sbi->s_mount_opt, DEBUG); 1047 break; 1048 case Opt_oldalloc: 1049 ext3_msg(sb, KERN_WARNING, 1050 "Ignoring deprecated oldalloc option"); 1051 break; 1052 case Opt_orlov: 1053 ext3_msg(sb, KERN_WARNING, 1054 "Ignoring deprecated orlov option"); 1055 break; 1056#ifdef CONFIG_EXT3_FS_XATTR 1057 case Opt_user_xattr: 1058 set_opt (sbi->s_mount_opt, XATTR_USER); 1059 break; 1060 case Opt_nouser_xattr: 1061 clear_opt (sbi->s_mount_opt, XATTR_USER); 1062 break; 1063#else 1064 case Opt_user_xattr: 1065 case Opt_nouser_xattr: 1066 ext3_msg(sb, KERN_INFO, 1067 "(no)user_xattr options not supported"); 1068 break; 1069#endif 1070#ifdef CONFIG_EXT3_FS_POSIX_ACL 1071 case Opt_acl: 1072 set_opt(sbi->s_mount_opt, POSIX_ACL); 1073 break; 1074 case Opt_noacl: 1075 clear_opt(sbi->s_mount_opt, POSIX_ACL); 1076 break; 1077#else 1078 case Opt_acl: 1079 case Opt_noacl: 1080 ext3_msg(sb, KERN_INFO, 1081 "(no)acl options not supported"); 1082 break; 1083#endif 1084 case Opt_reservation: 1085 set_opt(sbi->s_mount_opt, RESERVATION); 1086 break; 1087 case Opt_noreservation: 1088 clear_opt(sbi->s_mount_opt, RESERVATION); 1089 break; 1090 case Opt_journal_update: 1091 /* @@@ FIXME */ 1092 /* Eventually we will want to be able to create 1093 a journal file here. For now, only allow the 1094 user to specify an existing inode to be the 1095 journal file. */ 1096 if (is_remount) { 1097 ext3_msg(sb, KERN_ERR, "error: cannot specify " 1098 "journal on remount"); 1099 return 0; 1100 } 1101 set_opt (sbi->s_mount_opt, UPDATE_JOURNAL); 1102 break; 1103 case Opt_journal_inum: 1104 if (is_remount) { 1105 ext3_msg(sb, KERN_ERR, "error: cannot specify " 1106 "journal on remount"); 1107 return 0; 1108 } 1109 if (match_int(&args[0], &option)) 1110 return 0; 1111 *inum = option; 1112 break; 1113 case Opt_journal_dev: 1114 if (is_remount) { 1115 ext3_msg(sb, KERN_ERR, "error: cannot specify " 1116 "journal on remount"); 1117 return 0; 1118 } 1119 if (match_int(&args[0], &option)) 1120 return 0; 1121 *journal_devnum = option; 1122 break; 1123 case Opt_noload: 1124 set_opt (sbi->s_mount_opt, NOLOAD); 1125 break; 1126 case Opt_commit: 1127 if (match_int(&args[0], &option)) 1128 return 0; 1129 if (option < 0) 1130 return 0; 1131 if (option == 0) 1132 option = JBD_DEFAULT_MAX_COMMIT_AGE; 1133 sbi->s_commit_interval = HZ * option; 1134 break; 1135 case Opt_data_journal: 1136 data_opt = EXT3_MOUNT_JOURNAL_DATA; 1137 goto datacheck; 1138 case Opt_data_ordered: 1139 data_opt = EXT3_MOUNT_ORDERED_DATA; 1140 goto datacheck; 1141 case Opt_data_writeback: 1142 data_opt = EXT3_MOUNT_WRITEBACK_DATA; 1143 datacheck: 1144 if (is_remount) { 1145 if (test_opt(sb, DATA_FLAGS) == data_opt) 1146 break; 1147 ext3_msg(sb, KERN_ERR, 1148 "error: cannot change " 1149 "data mode on remount. The filesystem " 1150 "is mounted in data=%s mode and you " 1151 "try to remount it in data=%s mode.", 1152 data_mode_string(test_opt(sb, 1153 DATA_FLAGS)), 1154 data_mode_string(data_opt)); 1155 return 0; 1156 } else { 1157 clear_opt(sbi->s_mount_opt, DATA_FLAGS); 1158 sbi->s_mount_opt |= data_opt; 1159 } 1160 break; 1161 case Opt_data_err_abort: 1162 set_opt(sbi->s_mount_opt, DATA_ERR_ABORT); 1163 break; 1164 case Opt_data_err_ignore: 1165 clear_opt(sbi->s_mount_opt, DATA_ERR_ABORT); 1166 break; 1167#ifdef CONFIG_QUOTA 1168 case Opt_usrjquota: 1169 if (!set_qf_name(sb, USRQUOTA, &args[0])) 1170 return 0; 1171 break; 1172 case Opt_grpjquota: 1173 if (!set_qf_name(sb, GRPQUOTA, &args[0])) 1174 return 0; 1175 break; 1176 case Opt_offusrjquota: 1177 if (!clear_qf_name(sb, USRQUOTA)) 1178 return 0; 1179 break; 1180 case Opt_offgrpjquota: 1181 if (!clear_qf_name(sb, GRPQUOTA)) 1182 return 0; 1183 break; 1184 case Opt_jqfmt_vfsold: 1185 qfmt = QFMT_VFS_OLD; 1186 goto set_qf_format; 1187 case Opt_jqfmt_vfsv0: 1188 qfmt = QFMT_VFS_V0; 1189 goto set_qf_format; 1190 case Opt_jqfmt_vfsv1: 1191 qfmt = QFMT_VFS_V1; 1192set_qf_format: 1193 if (sb_any_quota_loaded(sb) && 1194 sbi->s_jquota_fmt != qfmt) { 1195 ext3_msg(sb, KERN_ERR, "error: cannot change " 1196 "journaled quota options when " 1197 "quota turned on."); 1198 return 0; 1199 } 1200 sbi->s_jquota_fmt = qfmt; 1201 break; 1202 case Opt_quota: 1203 case Opt_usrquota: 1204 set_opt(sbi->s_mount_opt, QUOTA); 1205 set_opt(sbi->s_mount_opt, USRQUOTA); 1206 break; 1207 case Opt_grpquota: 1208 set_opt(sbi->s_mount_opt, QUOTA); 1209 set_opt(sbi->s_mount_opt, GRPQUOTA); 1210 break; 1211 case Opt_noquota: 1212 if (sb_any_quota_loaded(sb)) { 1213 ext3_msg(sb, KERN_ERR, "error: cannot change " 1214 "quota options when quota turned on."); 1215 return 0; 1216 } 1217 clear_opt(sbi->s_mount_opt, QUOTA); 1218 clear_opt(sbi->s_mount_opt, USRQUOTA); 1219 clear_opt(sbi->s_mount_opt, GRPQUOTA); 1220 break; 1221#else 1222 case Opt_quota: 1223 case Opt_usrquota: 1224 case Opt_grpquota: 1225 ext3_msg(sb, KERN_ERR, 1226 "error: quota options not supported."); 1227 break; 1228 case Opt_usrjquota: 1229 case Opt_grpjquota: 1230 case Opt_offusrjquota: 1231 case Opt_offgrpjquota: 1232 case Opt_jqfmt_vfsold: 1233 case Opt_jqfmt_vfsv0: 1234 case Opt_jqfmt_vfsv1: 1235 ext3_msg(sb, KERN_ERR, 1236 "error: journaled quota options not " 1237 "supported."); 1238 break; 1239 case Opt_noquota: 1240 break; 1241#endif 1242 case Opt_abort: 1243 set_opt(sbi->s_mount_opt, ABORT); 1244 break; 1245 case Opt_nobarrier: 1246 clear_opt(sbi->s_mount_opt, BARRIER); 1247 break; 1248 case Opt_barrier: 1249 if (args[0].from) { 1250 if (match_int(&args[0], &option)) 1251 return 0; 1252 } else 1253 option = 1; /* No argument, default to 1 */ 1254 if (option) 1255 set_opt(sbi->s_mount_opt, BARRIER); 1256 else 1257 clear_opt(sbi->s_mount_opt, BARRIER); 1258 break; 1259 case Opt_ignore: 1260 break; 1261 case Opt_resize: 1262 if (!is_remount) { 1263 ext3_msg(sb, KERN_ERR, 1264 "error: resize option only available " 1265 "for remount"); 1266 return 0; 1267 } 1268 if (match_int(&args[0], &option) != 0) 1269 return 0; 1270 *n_blocks_count = option; 1271 break; 1272 case Opt_nobh: 1273 ext3_msg(sb, KERN_WARNING, 1274 "warning: ignoring deprecated nobh option"); 1275 break; 1276 case Opt_bh: 1277 ext3_msg(sb, KERN_WARNING, 1278 "warning: ignoring deprecated bh option"); 1279 break; 1280 default: 1281 ext3_msg(sb, KERN_ERR, 1282 "error: unrecognized mount option \"%s\" " 1283 "or missing value", p); 1284 return 0; 1285 } 1286 } 1287#ifdef CONFIG_QUOTA 1288 if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { 1289 if (test_opt(sb, USRQUOTA) && sbi->s_qf_names[USRQUOTA]) 1290 clear_opt(sbi->s_mount_opt, USRQUOTA); 1291 if (test_opt(sb, GRPQUOTA) && sbi->s_qf_names[GRPQUOTA]) 1292 clear_opt(sbi->s_mount_opt, GRPQUOTA); 1293 1294 if (test_opt(sb, GRPQUOTA) || test_opt(sb, USRQUOTA)) { 1295 ext3_msg(sb, KERN_ERR, "error: old and new quota " 1296 "format mixing."); 1297 return 0; 1298 } 1299 1300 if (!sbi->s_jquota_fmt) { 1301 ext3_msg(sb, KERN_ERR, "error: journaled quota format " 1302 "not specified."); 1303 return 0; 1304 } 1305 } else { 1306 if (sbi->s_jquota_fmt) { 1307 ext3_msg(sb, KERN_ERR, "error: journaled quota format " 1308 "specified with no journaling " 1309 "enabled."); 1310 return 0; 1311 } 1312 } 1313#endif 1314 return 1; 1315} 1316 1317static int ext3_setup_super(struct super_block *sb, struct ext3_super_block *es, 1318 int read_only) 1319{ 1320 struct ext3_sb_info *sbi = EXT3_SB(sb); 1321 int res = 0; 1322 1323 if (le32_to_cpu(es->s_rev_level) > EXT3_MAX_SUPP_REV) { 1324 ext3_msg(sb, KERN_ERR, 1325 "error: revision level too high, " 1326 "forcing read-only mode"); 1327 res = MS_RDONLY; 1328 } 1329 if (read_only) 1330 return res; 1331 if (!(sbi->s_mount_state & EXT3_VALID_FS)) 1332 ext3_msg(sb, KERN_WARNING, 1333 "warning: mounting unchecked fs, " 1334 "running e2fsck is recommended"); 1335 else if ((sbi->s_mount_state & EXT3_ERROR_FS)) 1336 ext3_msg(sb, KERN_WARNING, 1337 "warning: mounting fs with errors, " 1338 "running e2fsck is recommended"); 1339 else if ((__s16) le16_to_cpu(es->s_max_mnt_count) > 0 && 1340 le16_to_cpu(es->s_mnt_count) >= 1341 le16_to_cpu(es->s_max_mnt_count)) 1342 ext3_msg(sb, KERN_WARNING, 1343 "warning: maximal mount count reached, " 1344 "running e2fsck is recommended"); 1345 else if (le32_to_cpu(es->s_checkinterval) && 1346 (le32_to_cpu(es->s_lastcheck) + 1347 le32_to_cpu(es->s_checkinterval) <= get_seconds())) 1348 ext3_msg(sb, KERN_WARNING, 1349 "warning: checktime reached, " 1350 "running e2fsck is recommended"); 1351#if 0 1352 /* @@@ We _will_ want to clear the valid bit if we find 1353 inconsistencies, to force a fsck at reboot. But for 1354 a plain journaled filesystem we can keep it set as 1355 valid forever! :) */ 1356 es->s_state &= cpu_to_le16(~EXT3_VALID_FS); 1357#endif 1358 if (!le16_to_cpu(es->s_max_mnt_count)) 1359 es->s_max_mnt_count = cpu_to_le16(EXT3_DFL_MAX_MNT_COUNT); 1360 le16_add_cpu(&es->s_mnt_count, 1); 1361 es->s_mtime = cpu_to_le32(get_seconds()); 1362 ext3_update_dynamic_rev(sb); 1363 EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER); 1364 1365 ext3_commit_super(sb, es, 1); 1366 if (test_opt(sb, DEBUG)) 1367 ext3_msg(sb, KERN_INFO, "[bs=%lu, gc=%lu, " 1368 "bpg=%lu, ipg=%lu, mo=%04lx]", 1369 sb->s_blocksize, 1370 sbi->s_groups_count, 1371 EXT3_BLOCKS_PER_GROUP(sb), 1372 EXT3_INODES_PER_GROUP(sb), 1373 sbi->s_mount_opt); 1374 1375 if (EXT3_SB(sb)->s_journal->j_inode == NULL) { 1376 char b[BDEVNAME_SIZE]; 1377 ext3_msg(sb, KERN_INFO, "using external journal on %s", 1378 bdevname(EXT3_SB(sb)->s_journal->j_dev, b)); 1379 } else { 1380 ext3_msg(sb, KERN_INFO, "using internal journal"); 1381 } 1382 cleancache_init_fs(sb); 1383 return res; 1384} 1385 1386/* Called at mount-time, super-block is locked */ 1387static int ext3_check_descriptors(struct super_block *sb) 1388{ 1389 struct ext3_sb_info *sbi = EXT3_SB(sb); 1390 int i; 1391 1392 ext3_debug ("Checking group descriptors"); 1393 1394 for (i = 0; i < sbi->s_groups_count; i++) { 1395 struct ext3_group_desc *gdp = ext3_get_group_desc(sb, i, NULL); 1396 ext3_fsblk_t first_block = ext3_group_first_block_no(sb, i); 1397 ext3_fsblk_t last_block; 1398 1399 if (i == sbi->s_groups_count - 1) 1400 last_block = le32_to_cpu(sbi->s_es->s_blocks_count) - 1; 1401 else 1402 last_block = first_block + 1403 (EXT3_BLOCKS_PER_GROUP(sb) - 1); 1404 1405 if (le32_to_cpu(gdp->bg_block_bitmap) < first_block || 1406 le32_to_cpu(gdp->bg_block_bitmap) > last_block) 1407 { 1408 ext3_error (sb, "ext3_check_descriptors", 1409 "Block bitmap for group %d" 1410 " not in group (block %lu)!", 1411 i, (unsigned long) 1412 le32_to_cpu(gdp->bg_block_bitmap)); 1413 return 0; 1414 } 1415 if (le32_to_cpu(gdp->bg_inode_bitmap) < first_block || 1416 le32_to_cpu(gdp->bg_inode_bitmap) > last_block) 1417 { 1418 ext3_error (sb, "ext3_check_descriptors", 1419 "Inode bitmap for group %d" 1420 " not in group (block %lu)!", 1421 i, (unsigned long) 1422 le32_to_cpu(gdp->bg_inode_bitmap)); 1423 return 0; 1424 } 1425 if (le32_to_cpu(gdp->bg_inode_table) < first_block || 1426 le32_to_cpu(gdp->bg_inode_table) + sbi->s_itb_per_group - 1 > 1427 last_block) 1428 { 1429 ext3_error (sb, "ext3_check_descriptors", 1430 "Inode table for group %d" 1431 " not in group (block %lu)!", 1432 i, (unsigned long) 1433 le32_to_cpu(gdp->bg_inode_table)); 1434 return 0; 1435 } 1436 } 1437 1438 sbi->s_es->s_free_blocks_count=cpu_to_le32(ext3_count_free_blocks(sb)); 1439 sbi->s_es->s_free_inodes_count=cpu_to_le32(ext3_count_free_inodes(sb)); 1440 return 1; 1441} 1442 1443 1444/* ext3_orphan_cleanup() walks a singly-linked list of inodes (starting at 1445 * the superblock) which were deleted from all directories, but held open by 1446 * a process at the time of a crash. We walk the list and try to delete these 1447 * inodes at recovery time (only with a read-write filesystem). 1448 * 1449 * In order to keep the orphan inode chain consistent during traversal (in 1450 * case of crash during recovery), we link each inode into the superblock 1451 * orphan list_head and handle it the same way as an inode deletion during 1452 * normal operation (which journals the operations for us). 1453 * 1454 * We only do an iget() and an iput() on each inode, which is very safe if we 1455 * accidentally point at an in-use or already deleted inode. The worst that 1456 * can happen in this case is that we get a "bit already cleared" message from 1457 * ext3_free_inode(). The only reason we would point at a wrong inode is if 1458 * e2fsck was run on this filesystem, and it must have already done the orphan 1459 * inode cleanup for us, so we can safely abort without any further action. 1460 */ 1461static void ext3_orphan_cleanup (struct super_block * sb, 1462 struct ext3_super_block * es) 1463{ 1464 unsigned int s_flags = sb->s_flags; 1465 int nr_orphans = 0, nr_truncates = 0; 1466#ifdef CONFIG_QUOTA 1467 int i; 1468#endif 1469 if (!es->s_last_orphan) { 1470 jbd_debug(4, "no orphan inodes to clean up\n"); 1471 return; 1472 } 1473 1474 if (bdev_read_only(sb->s_bdev)) { 1475 ext3_msg(sb, KERN_ERR, "error: write access " 1476 "unavailable, skipping orphan cleanup."); 1477 return; 1478 } 1479 1480 /* Check if feature set allows readwrite operations */ 1481 if (EXT3_HAS_RO_COMPAT_FEATURE(sb, ~EXT3_FEATURE_RO_COMPAT_SUPP)) { 1482 ext3_msg(sb, KERN_INFO, "Skipping orphan cleanup due to " 1483 "unknown ROCOMPAT features"); 1484 return; 1485 } 1486 1487 if (EXT3_SB(sb)->s_mount_state & EXT3_ERROR_FS) { 1488 if (es->s_last_orphan) 1489 jbd_debug(1, "Errors on filesystem, " 1490 "clearing orphan list.\n"); 1491 es->s_last_orphan = 0; 1492 jbd_debug(1, "Skipping orphan recovery on fs with errors.\n"); 1493 return; 1494 } 1495 1496 if (s_flags & MS_RDONLY) { 1497 ext3_msg(sb, KERN_INFO, "orphan cleanup on readonly fs"); 1498 sb->s_flags &= ~MS_RDONLY; 1499 } 1500#ifdef CONFIG_QUOTA 1501 /* Needed for iput() to work correctly and not trash data */ 1502 sb->s_flags |= MS_ACTIVE; 1503 /* Turn on quotas so that they are updated correctly */ 1504 for (i = 0; i < MAXQUOTAS; i++) { 1505 if (EXT3_SB(sb)->s_qf_names[i]) { 1506 int ret = ext3_quota_on_mount(sb, i); 1507 if (ret < 0) 1508 ext3_msg(sb, KERN_ERR, 1509 "error: cannot turn on journaled " 1510 "quota: %d", ret); 1511 } 1512 } 1513#endif 1514 1515 while (es->s_last_orphan) { 1516 struct inode *inode; 1517 1518 inode = ext3_orphan_get(sb, le32_to_cpu(es->s_last_orphan)); 1519 if (IS_ERR(inode)) { 1520 es->s_last_orphan = 0; 1521 break; 1522 } 1523 1524 list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan); 1525 dquot_initialize(inode); 1526 if (inode->i_nlink) { 1527 printk(KERN_DEBUG 1528 "%s: truncating inode %lu to %Ld bytes\n", 1529 __func__, inode->i_ino, inode->i_size); 1530 jbd_debug(2, "truncating inode %lu to %Ld bytes\n", 1531 inode->i_ino, inode->i_size); 1532 ext3_truncate(inode); 1533 nr_truncates++; 1534 } else { 1535 printk(KERN_DEBUG 1536 "%s: deleting unreferenced inode %lu\n", 1537 __func__, inode->i_ino); 1538 jbd_debug(2, "deleting unreferenced inode %lu\n", 1539 inode->i_ino); 1540 nr_orphans++; 1541 } 1542 iput(inode); /* The delete magic happens here! */ 1543 } 1544 1545#define PLURAL(x) (x), ((x)==1) ? "" : "s" 1546 1547 if (nr_orphans) 1548 ext3_msg(sb, KERN_INFO, "%d orphan inode%s deleted", 1549 PLURAL(nr_orphans)); 1550 if (nr_truncates) 1551 ext3_msg(sb, KERN_INFO, "%d truncate%s cleaned up", 1552 PLURAL(nr_truncates)); 1553#ifdef CONFIG_QUOTA 1554 /* Turn quotas off */ 1555 for (i = 0; i < MAXQUOTAS; i++) { 1556 if (sb_dqopt(sb)->files[i]) 1557 dquot_quota_off(sb, i); 1558 } 1559#endif 1560 sb->s_flags = s_flags; /* Restore MS_RDONLY status */ 1561} 1562 1563/* 1564 * Maximal file size. There is a direct, and {,double-,triple-}indirect 1565 * block limit, and also a limit of (2^32 - 1) 512-byte sectors in i_blocks. 1566 * We need to be 1 filesystem block less than the 2^32 sector limit. 1567 */ 1568static loff_t ext3_max_size(int bits) 1569{ 1570 loff_t res = EXT3_NDIR_BLOCKS; 1571 int meta_blocks; 1572 loff_t upper_limit; 1573 1574 /* This is calculated to be the largest file size for a 1575 * dense, file such that the total number of 1576 * sectors in the file, including data and all indirect blocks, 1577 * does not exceed 2^32 -1 1578 * __u32 i_blocks representing the total number of 1579 * 512 bytes blocks of the file 1580 */ 1581 upper_limit = (1LL << 32) - 1; 1582 1583 /* total blocks in file system block size */ 1584 upper_limit >>= (bits - 9); 1585 1586 1587 /* indirect blocks */ 1588 meta_blocks = 1; 1589 /* double indirect blocks */ 1590 meta_blocks += 1 + (1LL << (bits-2)); 1591 /* tripple indirect blocks */ 1592 meta_blocks += 1 + (1LL << (bits-2)) + (1LL << (2*(bits-2))); 1593 1594 upper_limit -= meta_blocks; 1595 upper_limit <<= bits; 1596 1597 res += 1LL << (bits-2); 1598 res += 1LL << (2*(bits-2)); 1599 res += 1LL << (3*(bits-2)); 1600 res <<= bits; 1601 if (res > upper_limit) 1602 res = upper_limit; 1603 1604 if (res > MAX_LFS_FILESIZE) 1605 res = MAX_LFS_FILESIZE; 1606 1607 return res; 1608} 1609 1610static ext3_fsblk_t descriptor_loc(struct super_block *sb, 1611 ext3_fsblk_t logic_sb_block, 1612 int nr) 1613{ 1614 struct ext3_sb_info *sbi = EXT3_SB(sb); 1615 unsigned long bg, first_meta_bg; 1616 int has_super = 0; 1617 1618 first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg); 1619 1620 if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_META_BG) || 1621 nr < first_meta_bg) 1622 return (logic_sb_block + nr + 1); 1623 bg = sbi->s_desc_per_block * nr; 1624 if (ext3_bg_has_super(sb, bg)) 1625 has_super = 1; 1626 return (has_super + ext3_group_first_block_no(sb, bg)); 1627} 1628 1629 1630static int ext3_fill_super (struct super_block *sb, void *data, int silent) 1631{ 1632 struct buffer_head * bh; 1633 struct ext3_super_block *es = NULL; 1634 struct ext3_sb_info *sbi; 1635 ext3_fsblk_t block; 1636 ext3_fsblk_t sb_block = get_sb_block(&data, sb); 1637 ext3_fsblk_t logic_sb_block; 1638 unsigned long offset = 0; 1639 unsigned int journal_inum = 0; 1640 unsigned long journal_devnum = 0; 1641 unsigned long def_mount_opts; 1642 struct inode *root; 1643 int blocksize; 1644 int hblock; 1645 int db_count; 1646 int i; 1647 int needs_recovery; 1648 int ret = -EINVAL; 1649 __le32 features; 1650 int err; 1651 1652 sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); 1653 if (!sbi) 1654 return -ENOMEM; 1655 1656 sbi->s_blockgroup_lock = 1657 kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL); 1658 if (!sbi->s_blockgroup_lock) { 1659 kfree(sbi); 1660 return -ENOMEM; 1661 } 1662 sb->s_fs_info = sbi; 1663 sbi->s_mount_opt = 0; 1664 sbi->s_resuid = EXT3_DEF_RESUID; 1665 sbi->s_resgid = EXT3_DEF_RESGID; 1666 sbi->s_sb_block = sb_block; 1667 1668 blocksize = sb_min_blocksize(sb, EXT3_MIN_BLOCK_SIZE); 1669 if (!blocksize) { 1670 ext3_msg(sb, KERN_ERR, "error: unable to set blocksize"); 1671 goto out_fail; 1672 } 1673 1674 /* 1675 * The ext3 superblock will not be buffer aligned for other than 1kB 1676 * block sizes. We need to calculate the offset from buffer start. 1677 */ 1678 if (blocksize != EXT3_MIN_BLOCK_SIZE) { 1679 logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize; 1680 offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize; 1681 } else { 1682 logic_sb_block = sb_block; 1683 } 1684 1685 if (!(bh = sb_bread(sb, logic_sb_block))) { 1686 ext3_msg(sb, KERN_ERR, "error: unable to read superblock"); 1687 goto out_fail; 1688 } 1689 /* 1690 * Note: s_es must be initialized as soon as possible because 1691 * some ext3 macro-instructions depend on its value 1692 */ 1693 es = (struct ext3_super_block *) (bh->b_data + offset); 1694 sbi->s_es = es; 1695 sb->s_magic = le16_to_cpu(es->s_magic); 1696 if (sb->s_magic != EXT3_SUPER_MAGIC) 1697 goto cantfind_ext3; 1698 1699 /* Set defaults before we parse the mount options */ 1700 def_mount_opts = le32_to_cpu(es->s_default_mount_opts); 1701 if (def_mount_opts & EXT3_DEFM_DEBUG) 1702 set_opt(sbi->s_mount_opt, DEBUG); 1703 if (def_mount_opts & EXT3_DEFM_BSDGROUPS) 1704 set_opt(sbi->s_mount_opt, GRPID); 1705 if (def_mount_opts & EXT3_DEFM_UID16) 1706 set_opt(sbi->s_mount_opt, NO_UID32); 1707#ifdef CONFIG_EXT3_FS_XATTR 1708 if (def_mount_opts & EXT3_DEFM_XATTR_USER) 1709 set_opt(sbi->s_mount_opt, XATTR_USER); 1710#endif 1711#ifdef CONFIG_EXT3_FS_POSIX_ACL 1712 if (def_mount_opts & EXT3_DEFM_ACL) 1713 set_opt(sbi->s_mount_opt, POSIX_ACL); 1714#endif 1715 if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_DATA) 1716 set_opt(sbi->s_mount_opt, JOURNAL_DATA); 1717 else if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_ORDERED) 1718 set_opt(sbi->s_mount_opt, ORDERED_DATA); 1719 else if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_WBACK) 1720 set_opt(sbi->s_mount_opt, WRITEBACK_DATA); 1721 1722 if (le16_to_cpu(sbi->s_es->s_errors) == EXT3_ERRORS_PANIC) 1723 set_opt(sbi->s_mount_opt, ERRORS_PANIC); 1724 else if (le16_to_cpu(sbi->s_es->s_errors) == EXT3_ERRORS_CONTINUE) 1725 set_opt(sbi->s_mount_opt, ERRORS_CONT); 1726 else 1727 set_opt(sbi->s_mount_opt, ERRORS_RO); 1728 1729 sbi->s_resuid = le16_to_cpu(es->s_def_resuid); 1730 sbi->s_resgid = le16_to_cpu(es->s_def_resgid); 1731 1732 /* enable barriers by default */ 1733 set_opt(sbi->s_mount_opt, BARRIER); 1734 set_opt(sbi->s_mount_opt, RESERVATION); 1735 1736 if (!parse_options ((char *) data, sb, &journal_inum, &journal_devnum, 1737 NULL, 0)) 1738 goto failed_mount; 1739 1740 sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | 1741 (test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0); 1742 1743 if (le32_to_cpu(es->s_rev_level) == EXT3_GOOD_OLD_REV && 1744 (EXT3_HAS_COMPAT_FEATURE(sb, ~0U) || 1745 EXT3_HAS_RO_COMPAT_FEATURE(sb, ~0U) || 1746 EXT3_HAS_INCOMPAT_FEATURE(sb, ~0U))) 1747 ext3_msg(sb, KERN_WARNING, 1748 "warning: feature flags set on rev 0 fs, " 1749 "running e2fsck is recommended"); 1750 /* 1751 * Check feature flags regardless of the revision level, since we 1752 * previously didn't change the revision level when setting the flags, 1753 * so there is a chance incompat flags are set on a rev 0 filesystem. 1754 */ 1755 features = EXT3_HAS_INCOMPAT_FEATURE(sb, ~EXT3_FEATURE_INCOMPAT_SUPP); 1756 if (features) { 1757 ext3_msg(sb, KERN_ERR, 1758 "error: couldn't mount because of unsupported " 1759 "optional features (%x)", le32_to_cpu(features)); 1760 goto failed_mount; 1761 } 1762 features = EXT3_HAS_RO_COMPAT_FEATURE(sb, ~EXT3_FEATURE_RO_COMPAT_SUPP); 1763 if (!(sb->s_flags & MS_RDONLY) && features) { 1764 ext3_msg(sb, KERN_ERR, 1765 "error: couldn't mount RDWR because of unsupported " 1766 "optional features (%x)", le32_to_cpu(features)); 1767 goto failed_mount; 1768 } 1769 blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size); 1770 1771 if (blocksize < EXT3_MIN_BLOCK_SIZE || 1772 blocksize > EXT3_MAX_BLOCK_SIZE) { 1773 ext3_msg(sb, KERN_ERR, 1774 "error: couldn't mount because of unsupported " 1775 "filesystem blocksize %d", blocksize); 1776 goto failed_mount; 1777 } 1778 1779 hblock = bdev_logical_block_size(sb->s_bdev); 1780 if (sb->s_blocksize != blocksize) { 1781 /* 1782 * Make sure the blocksize for the filesystem is larger 1783 * than the hardware sectorsize for the machine. 1784 */ 1785 if (blocksize < hblock) { 1786 ext3_msg(sb, KERN_ERR, 1787 "error: fsblocksize %d too small for " 1788 "hardware sectorsize %d", blocksize, hblock); 1789 goto failed_mount; 1790 } 1791 1792 brelse (bh); 1793 if (!sb_set_blocksize(sb, blocksize)) { 1794 ext3_msg(sb, KERN_ERR, 1795 "error: bad blocksize %d", blocksize); 1796 goto out_fail; 1797 } 1798 logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize; 1799 offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize; 1800 bh = sb_bread(sb, logic_sb_block); 1801 if (!bh) { 1802 ext3_msg(sb, KERN_ERR, 1803 "error: can't read superblock on 2nd try"); 1804 goto failed_mount; 1805 } 1806 es = (struct ext3_super_block *)(bh->b_data + offset); 1807 sbi->s_es = es; 1808 if (es->s_magic != cpu_to_le16(EXT3_SUPER_MAGIC)) { 1809 ext3_msg(sb, KERN_ERR, 1810 "error: magic mismatch"); 1811 goto failed_mount; 1812 } 1813 } 1814 1815 sb->s_maxbytes = ext3_max_size(sb->s_blocksize_bits); 1816 1817 if (le32_to_cpu(es->s_rev_level) == EXT3_GOOD_OLD_REV) { 1818 sbi->s_inode_size = EXT3_GOOD_OLD_INODE_SIZE; 1819 sbi->s_first_ino = EXT3_GOOD_OLD_FIRST_INO; 1820 } else { 1821 sbi->s_inode_size = le16_to_cpu(es->s_inode_size); 1822 sbi->s_first_ino = le32_to_cpu(es->s_first_ino); 1823 if ((sbi->s_inode_size < EXT3_GOOD_OLD_INODE_SIZE) || 1824 (!is_power_of_2(sbi->s_inode_size)) || 1825 (sbi->s_inode_size > blocksize)) { 1826 ext3_msg(sb, KERN_ERR, 1827 "error: unsupported inode size: %d", 1828 sbi->s_inode_size); 1829 goto failed_mount; 1830 } 1831 } 1832 sbi->s_frag_size = EXT3_MIN_FRAG_SIZE << 1833 le32_to_cpu(es->s_log_frag_size); 1834 if (blocksize != sbi->s_frag_size) { 1835 ext3_msg(sb, KERN_ERR, 1836 "error: fragsize %lu != blocksize %u (unsupported)", 1837 sbi->s_frag_size, blocksize); 1838 goto failed_mount; 1839 } 1840 sbi->s_frags_per_block = 1; 1841 sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group); 1842 sbi->s_frags_per_group = le32_to_cpu(es->s_frags_per_group); 1843 sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group); 1844 if (EXT3_INODE_SIZE(sb) == 0 || EXT3_INODES_PER_GROUP(sb) == 0) 1845 goto cantfind_ext3; 1846 sbi->s_inodes_per_block = blocksize / EXT3_INODE_SIZE(sb); 1847 if (sbi->s_inodes_per_block == 0) 1848 goto cantfind_ext3; 1849 sbi->s_itb_per_group = sbi->s_inodes_per_group / 1850 sbi->s_inodes_per_block; 1851 sbi->s_desc_per_block = blocksize / sizeof(struct ext3_group_desc); 1852 sbi->s_sbh = bh; 1853 sbi->s_mount_state = le16_to_cpu(es->s_state); 1854 sbi->s_addr_per_block_bits = ilog2(EXT3_ADDR_PER_BLOCK(sb)); 1855 sbi->s_desc_per_block_bits = ilog2(EXT3_DESC_PER_BLOCK(sb)); 1856 for (i=0; i < 4; i++) 1857 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]); 1858 sbi->s_def_hash_version = es->s_def_hash_version; 1859 i = le32_to_cpu(es->s_flags); 1860 if (i & EXT2_FLAGS_UNSIGNED_HASH) 1861 sbi->s_hash_unsigned = 3; 1862 else if ((i & EXT2_FLAGS_SIGNED_HASH) == 0) { 1863#ifdef __CHAR_UNSIGNED__ 1864 es->s_flags |= cpu_to_le32(EXT2_FLAGS_UNSIGNED_HASH); 1865 sbi->s_hash_unsigned = 3; 1866#else 1867 es->s_flags |= cpu_to_le32(EXT2_FLAGS_SIGNED_HASH); 1868#endif 1869 } 1870 1871 if (sbi->s_blocks_per_group > blocksize * 8) { 1872 ext3_msg(sb, KERN_ERR, 1873 "#blocks per group too big: %lu", 1874 sbi->s_blocks_per_group); 1875 goto failed_mount; 1876 } 1877 if (sbi->s_frags_per_group > blocksize * 8) { 1878 ext3_msg(sb, KERN_ERR, 1879 "error: #fragments per group too big: %lu", 1880 sbi->s_frags_per_group); 1881 goto failed_mount; 1882 } 1883 if (sbi->s_inodes_per_group > blocksize * 8) { 1884 ext3_msg(sb, KERN_ERR, 1885 "error: #inodes per group too big: %lu", 1886 sbi->s_inodes_per_group); 1887 goto failed_mount; 1888 } 1889 1890 err = generic_check_addressable(sb->s_blocksize_bits, 1891 le32_to_cpu(es->s_blocks_count)); 1892 if (err) { 1893 ext3_msg(sb, KERN_ERR, 1894 "error: filesystem is too large to mount safely"); 1895 if (sizeof(sector_t) < 8) 1896 ext3_msg(sb, KERN_ERR, 1897 "error: CONFIG_LBDAF not enabled"); 1898 ret = err; 1899 goto failed_mount; 1900 } 1901 1902 if (EXT3_BLOCKS_PER_GROUP(sb) == 0) 1903 goto cantfind_ext3; 1904 sbi->s_groups_count = ((le32_to_cpu(es->s_blocks_count) - 1905 le32_to_cpu(es->s_first_data_block) - 1) 1906 / EXT3_BLOCKS_PER_GROUP(sb)) + 1; 1907 db_count = DIV_ROUND_UP(sbi->s_groups_count, EXT3_DESC_PER_BLOCK(sb)); 1908 sbi->s_group_desc = kmalloc(db_count * sizeof (struct buffer_head *), 1909 GFP_KERNEL); 1910 if (sbi->s_group_desc == NULL) { 1911 ext3_msg(sb, KERN_ERR, 1912 "error: not enough memory"); 1913 ret = -ENOMEM; 1914 goto failed_mount; 1915 } 1916 1917 bgl_lock_init(sbi->s_blockgroup_lock); 1918 1919 for (i = 0; i < db_count; i++) { 1920 block = descriptor_loc(sb, logic_sb_block, i); 1921 sbi->s_group_desc[i] = sb_bread(sb, block); 1922 if (!sbi->s_group_desc[i]) { 1923 ext3_msg(sb, KERN_ERR, 1924 "error: can't read group descriptor %d", i); 1925 db_count = i; 1926 goto failed_mount2; 1927 } 1928 } 1929 if (!ext3_check_descriptors (sb)) { 1930 ext3_msg(sb, KERN_ERR, 1931 "error: group descriptors corrupted"); 1932 goto failed_mount2; 1933 } 1934 sbi->s_gdb_count = db_count; 1935 get_random_bytes(&sbi->s_next_generation, sizeof(u32)); 1936 spin_lock_init(&sbi->s_next_gen_lock); 1937 1938 /* per fileystem reservation list head & lock */ 1939 spin_lock_init(&sbi->s_rsv_window_lock); 1940 sbi->s_rsv_window_root = RB_ROOT; 1941 /* Add a single, static dummy reservation to the start of the 1942 * reservation window list --- it gives us a placeholder for 1943 * append-at-start-of-list which makes the allocation logic 1944 * _much_ simpler. */ 1945 sbi->s_rsv_window_head.rsv_start = EXT3_RESERVE_WINDOW_NOT_ALLOCATED; 1946 sbi->s_rsv_window_head.rsv_end = EXT3_RESERVE_WINDOW_NOT_ALLOCATED; 1947 sbi->s_rsv_window_head.rsv_alloc_hit = 0; 1948 sbi->s_rsv_window_head.rsv_goal_size = 0; 1949 ext3_rsv_window_add(sb, &sbi->s_rsv_window_head); 1950 1951 /* 1952 * set up enough so that it can read an inode 1953 */ 1954 sb->s_op = &ext3_sops; 1955 sb->s_export_op = &ext3_export_ops; 1956 sb->s_xattr = ext3_xattr_handlers; 1957#ifdef CONFIG_QUOTA 1958 sb->s_qcop = &ext3_qctl_operations; 1959 sb->dq_op = &ext3_quota_operations; 1960#endif 1961 memcpy(sb->s_uuid, es->s_uuid, sizeof(es->s_uuid)); 1962 INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */ 1963 mutex_init(&sbi->s_orphan_lock); 1964 mutex_init(&sbi->s_resize_lock); 1965 1966 sb->s_root = NULL; 1967 1968 needs_recovery = (es->s_last_orphan != 0 || 1969 EXT3_HAS_INCOMPAT_FEATURE(sb, 1970 EXT3_FEATURE_INCOMPAT_RECOVER)); 1971 1972 /* 1973 * The first inode we look at is the journal inode. Don't try 1974 * root first: it may be modified in the journal! 1975 */ 1976 if (!test_opt(sb, NOLOAD) && 1977 EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) { 1978 if (ext3_load_journal(sb, es, journal_devnum)) 1979 goto failed_mount2; 1980 } else if (journal_inum) { 1981 if (ext3_create_journal(sb, es, journal_inum)) 1982 goto failed_mount2; 1983 } else { 1984 if (!silent) 1985 ext3_msg(sb, KERN_ERR, 1986 "error: no journal found. " 1987 "mounting ext3 over ext2?"); 1988 goto failed_mount2; 1989 } 1990 err = percpu_counter_init(&sbi->s_freeblocks_counter, 1991 ext3_count_free_blocks(sb)); 1992 if (!err) { 1993 err = percpu_counter_init(&sbi->s_freeinodes_counter, 1994 ext3_count_free_inodes(sb)); 1995 } 1996 if (!err) { 1997 err = percpu_counter_init(&sbi->s_dirs_counter, 1998 ext3_count_dirs(sb)); 1999 } 2000 if (err) { 2001 ext3_msg(sb, KERN_ERR, "error: insufficient memory"); 2002 ret = err; 2003 goto failed_mount3; 2004 } 2005 2006 /* We have now updated the journal if required, so we can 2007 * validate the data journaling mode. */ 2008 switch (test_opt(sb, DATA_FLAGS)) { 2009 case 0: 2010 /* No mode set, assume a default based on the journal 2011 capabilities: ORDERED_DATA if the journal can 2012 cope, else JOURNAL_DATA */ 2013 if (journal_check_available_features 2014 (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE)) 2015 set_opt(sbi->s_mount_opt, DEFAULT_DATA_MODE); 2016 else 2017 set_opt(sbi->s_mount_opt, JOURNAL_DATA); 2018 break; 2019 2020 case EXT3_MOUNT_ORDERED_DATA: 2021 case EXT3_MOUNT_WRITEBACK_DATA: 2022 if (!journal_check_available_features 2023 (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE)) { 2024 ext3_msg(sb, KERN_ERR, 2025 "error: journal does not support " 2026 "requested data journaling mode"); 2027 goto failed_mount3; 2028 } 2029 default: 2030 break; 2031 } 2032 2033 /* 2034 * The journal_load will have done any necessary log recovery, 2035 * so we can safely mount the rest of the filesystem now. 2036 */ 2037 2038 root = ext3_iget(sb, EXT3_ROOT_INO); 2039 if (IS_ERR(root)) { 2040 ext3_msg(sb, KERN_ERR, "error: get root inode failed"); 2041 ret = PTR_ERR(root); 2042 goto failed_mount3; 2043 } 2044 if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) { 2045 iput(root); 2046 ext3_msg(sb, KERN_ERR, "error: corrupt root inode, run e2fsck"); 2047 goto failed_mount3; 2048 } 2049 sb->s_root = d_alloc_root(root); 2050 if (!sb->s_root) { 2051 ext3_msg(sb, KERN_ERR, "error: get root dentry failed"); 2052 iput(root); 2053 ret = -ENOMEM; 2054 goto failed_mount3; 2055 } 2056 2057 ext3_setup_super (sb, es, sb->s_flags & MS_RDONLY); 2058 2059 EXT3_SB(sb)->s_mount_state |= EXT3_ORPHAN_FS; 2060 ext3_orphan_cleanup(sb, es); 2061 EXT3_SB(sb)->s_mount_state &= ~EXT3_ORPHAN_FS; 2062 if (needs_recovery) { 2063 ext3_mark_recovery_complete(sb, es); 2064 ext3_msg(sb, KERN_INFO, "recovery complete"); 2065 } 2066 ext3_msg(sb, KERN_INFO, "mounted filesystem with %s data mode", 2067 test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA ? "journal": 2068 test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered": 2069 "writeback"); 2070 2071 return 0; 2072 2073cantfind_ext3: 2074 if (!silent) 2075 ext3_msg(sb, KERN_INFO, 2076 "error: can't find ext3 filesystem on dev %s.", 2077 sb->s_id); 2078 goto failed_mount; 2079 2080failed_mount3: 2081 percpu_counter_destroy(&sbi->s_freeblocks_counter); 2082 percpu_counter_destroy(&sbi->s_freeinodes_counter); 2083 percpu_counter_destroy(&sbi->s_dirs_counter); 2084 journal_destroy(sbi->s_journal); 2085failed_mount2: 2086 for (i = 0; i < db_count; i++) 2087 brelse(sbi->s_group_desc[i]); 2088 kfree(sbi->s_group_desc); 2089failed_mount: 2090#ifdef CONFIG_QUOTA 2091 for (i = 0; i < MAXQUOTAS; i++) 2092 kfree(sbi->s_qf_names[i]); 2093#endif 2094 ext3_blkdev_remove(sbi); 2095 brelse(bh); 2096out_fail: 2097 sb->s_fs_info = NULL; 2098 kfree(sbi->s_blockgroup_lock); 2099 kfree(sbi); 2100 return ret; 2101} 2102 2103/* 2104 * Setup any per-fs journal parameters now. We'll do this both on 2105 * initial mount, once the journal has been initialised but before we've 2106 * done any recovery; and again on any subsequent remount. 2107 */ 2108static void ext3_init_journal_params(struct super_block *sb, journal_t *journal) 2109{ 2110 struct ext3_sb_info *sbi = EXT3_SB(sb); 2111 2112 if (sbi->s_commit_interval) 2113 journal->j_commit_interval = sbi->s_commit_interval; 2114 /* We could also set up an ext3-specific default for the commit 2115 * interval here, but for now we'll just fall back to the jbd 2116 * default. */ 2117 2118 spin_lock(&journal->j_state_lock); 2119 if (test_opt(sb, BARRIER)) 2120 journal->j_flags |= JFS_BARRIER; 2121 else 2122 journal->j_flags &= ~JFS_BARRIER; 2123 if (test_opt(sb, DATA_ERR_ABORT)) 2124 journal->j_flags |= JFS_ABORT_ON_SYNCDATA_ERR; 2125 else 2126 journal->j_flags &= ~JFS_ABORT_ON_SYNCDATA_ERR; 2127 spin_unlock(&journal->j_state_lock); 2128} 2129 2130static journal_t *ext3_get_journal(struct super_block *sb, 2131 unsigned int journal_inum) 2132{ 2133 struct inode *journal_inode; 2134 journal_t *journal; 2135 2136 /* First, test for the existence of a valid inode on disk. Bad 2137 * things happen if we iget() an unused inode, as the subsequent 2138 * iput() will try to delete it. */ 2139 2140 journal_inode = ext3_iget(sb, journal_inum); 2141 if (IS_ERR(journal_inode)) { 2142 ext3_msg(sb, KERN_ERR, "error: no journal found"); 2143 return NULL; 2144 } 2145 if (!journal_inode->i_nlink) { 2146 make_bad_inode(journal_inode); 2147 iput(journal_inode); 2148 ext3_msg(sb, KERN_ERR, "error: journal inode is deleted"); 2149 return NULL; 2150 } 2151 2152 jbd_debug(2, "Journal inode found at %p: %Ld bytes\n", 2153 journal_inode, journal_inode->i_size); 2154 if (!S_ISREG(journal_inode->i_mode)) { 2155 ext3_msg(sb, KERN_ERR, "error: invalid journal inode"); 2156 iput(journal_inode); 2157 return NULL; 2158 } 2159 2160 journal = journal_init_inode(journal_inode); 2161 if (!journal) { 2162 ext3_msg(sb, KERN_ERR, "error: could not load journal inode"); 2163 iput(journal_inode); 2164 return NULL; 2165 } 2166 journal->j_private = sb; 2167 ext3_init_journal_params(sb, journal); 2168 return journal; 2169} 2170 2171static journal_t *ext3_get_dev_journal(struct super_block *sb, 2172 dev_t j_dev) 2173{ 2174 struct buffer_head * bh; 2175 journal_t *journal; 2176 ext3_fsblk_t start; 2177 ext3_fsblk_t len; 2178 int hblock, blocksize; 2179 ext3_fsblk_t sb_block; 2180 unsigned long offset; 2181 struct ext3_super_block * es; 2182 struct block_device *bdev; 2183 2184 bdev = ext3_blkdev_get(j_dev, sb); 2185 if (bdev == NULL) 2186 return NULL; 2187 2188 blocksize = sb->s_blocksize; 2189 hblock = bdev_logical_block_size(bdev); 2190 if (blocksize < hblock) { 2191 ext3_msg(sb, KERN_ERR, 2192 "error: blocksize too small for journal device"); 2193 goto out_bdev; 2194 } 2195 2196 sb_block = EXT3_MIN_BLOCK_SIZE / blocksize; 2197 offset = EXT3_MIN_BLOCK_SIZE % blocksize; 2198 set_blocksize(bdev, blocksize); 2199 if (!(bh = __bread(bdev, sb_block, blocksize))) { 2200 ext3_msg(sb, KERN_ERR, "error: couldn't read superblock of " 2201 "external journal"); 2202 goto out_bdev; 2203 } 2204 2205 es = (struct ext3_super_block *) (bh->b_data + offset); 2206 if ((le16_to_cpu(es->s_magic) != EXT3_SUPER_MAGIC) || 2207 !(le32_to_cpu(es->s_feature_incompat) & 2208 EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) { 2209 ext3_msg(sb, KERN_ERR, "error: external journal has " 2210 "bad superblock"); 2211 brelse(bh); 2212 goto out_bdev; 2213 } 2214 2215 if (memcmp(EXT3_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) { 2216 ext3_msg(sb, KERN_ERR, "error: journal UUID does not match"); 2217 brelse(bh); 2218 goto out_bdev; 2219 } 2220 2221 len = le32_to_cpu(es->s_blocks_count); 2222 start = sb_block + 1; 2223 brelse(bh); /* we're done with the superblock */ 2224 2225 journal = journal_init_dev(bdev, sb->s_bdev, 2226 start, len, blocksize); 2227 if (!journal) { 2228 ext3_msg(sb, KERN_ERR, 2229 "error: failed to create device journal"); 2230 goto out_bdev; 2231 } 2232 journal->j_private = sb; 2233 if (!bh_uptodate_or_lock(journal->j_sb_buffer)) { 2234 if (bh_submit_read(journal->j_sb_buffer)) { 2235 ext3_msg(sb, KERN_ERR, "I/O error on journal device"); 2236 goto out_journal; 2237 } 2238 } 2239 if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) { 2240 ext3_msg(sb, KERN_ERR, 2241 "error: external journal has more than one " 2242 "user (unsupported) - %d", 2243 be32_to_cpu(journal->j_superblock->s_nr_users)); 2244 goto out_journal; 2245 } 2246 EXT3_SB(sb)->journal_bdev = bdev; 2247 ext3_init_journal_params(sb, journal); 2248 return journal; 2249out_journal: 2250 journal_destroy(journal); 2251out_bdev: 2252 ext3_blkdev_put(bdev); 2253 return NULL; 2254} 2255 2256static int ext3_load_journal(struct super_block *sb, 2257 struct ext3_super_block *es, 2258 unsigned long journal_devnum) 2259{ 2260 journal_t *journal; 2261 unsigned int journal_inum = le32_to_cpu(es->s_journal_inum); 2262 dev_t journal_dev; 2263 int err = 0; 2264 int really_read_only; 2265 2266 if (journal_devnum && 2267 journal_devnum != le32_to_cpu(es->s_journal_dev)) { 2268 ext3_msg(sb, KERN_INFO, "external journal device major/minor " 2269 "numbers have changed"); 2270 journal_dev = new_decode_dev(journal_devnum); 2271 } else 2272 journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev)); 2273 2274 really_read_only = bdev_read_only(sb->s_bdev); 2275 2276 /* 2277 * Are we loading a blank journal or performing recovery after a 2278 * crash? For recovery, we need to check in advance whether we 2279 * can get read-write access to the device. 2280 */ 2281 2282 if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER)) { 2283 if (sb->s_flags & MS_RDONLY) { 2284 ext3_msg(sb, KERN_INFO, 2285 "recovery required on readonly filesystem"); 2286 if (really_read_only) { 2287 ext3_msg(sb, KERN_ERR, "error: write access " 2288 "unavailable, cannot proceed"); 2289 return -EROFS; 2290 } 2291 ext3_msg(sb, KERN_INFO, 2292 "write access will be enabled during recovery"); 2293 } 2294 } 2295 2296 if (journal_inum && journal_dev) { 2297 ext3_msg(sb, KERN_ERR, "error: filesystem has both journal " 2298 "and inode journals"); 2299 return -EINVAL; 2300 } 2301 2302 if (journal_inum) { 2303 if (!(journal = ext3_get_journal(sb, journal_inum))) 2304 return -EINVAL; 2305 } else { 2306 if (!(journal = ext3_get_dev_journal(sb, journal_dev))) 2307 return -EINVAL; 2308 } 2309 2310 if (!(journal->j_flags & JFS_BARRIER)) 2311 printk(KERN_INFO "EXT3-fs: barriers not enabled\n"); 2312 2313 if (!really_read_only && test_opt(sb, UPDATE_JOURNAL)) { 2314 err = journal_update_format(journal); 2315 if (err) { 2316 ext3_msg(sb, KERN_ERR, "error updating journal"); 2317 journal_destroy(journal); 2318 return err; 2319 } 2320 } 2321 2322 if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER)) 2323 err = journal_wipe(journal, !really_read_only); 2324 if (!err) 2325 err = journal_load(journal); 2326 2327 if (err) { 2328 ext3_msg(sb, KERN_ERR, "error loading journal"); 2329 journal_destroy(journal); 2330 return err; 2331 } 2332 2333 EXT3_SB(sb)->s_journal = journal; 2334 ext3_clear_journal_err(sb, es); 2335 2336 if (!really_read_only && journal_devnum && 2337 journal_devnum != le32_to_cpu(es->s_journal_dev)) { 2338 es->s_journal_dev = cpu_to_le32(journal_devnum); 2339 2340 /* Make sure we flush the recovery flag to disk. */ 2341 ext3_commit_super(sb, es, 1); 2342 } 2343 2344 return 0; 2345} 2346 2347static int ext3_create_journal(struct super_block *sb, 2348 struct ext3_super_block *es, 2349 unsigned int journal_inum) 2350{ 2351 journal_t *journal; 2352 int err; 2353 2354 if (sb->s_flags & MS_RDONLY) { 2355 ext3_msg(sb, KERN_ERR, 2356 "error: readonly filesystem when trying to " 2357 "create journal"); 2358 return -EROFS; 2359 } 2360 2361 journal = ext3_get_journal(sb, journal_inum); 2362 if (!journal) 2363 return -EINVAL; 2364 2365 ext3_msg(sb, KERN_INFO, "creating new journal on inode %u", 2366 journal_inum); 2367 2368 err = journal_create(journal); 2369 if (err) { 2370 ext3_msg(sb, KERN_ERR, "error creating journal"); 2371 journal_destroy(journal); 2372 return -EIO; 2373 } 2374 2375 EXT3_SB(sb)->s_journal = journal; 2376 2377 ext3_update_dynamic_rev(sb); 2378 EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER); 2379 EXT3_SET_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL); 2380 2381 es->s_journal_inum = cpu_to_le32(journal_inum); 2382 2383 /* Make sure we flush the recovery flag to disk. */ 2384 ext3_commit_super(sb, es, 1); 2385 2386 return 0; 2387} 2388 2389static int ext3_commit_super(struct super_block *sb, 2390 struct ext3_super_block *es, 2391 int sync) 2392{ 2393 struct buffer_head *sbh = EXT3_SB(sb)->s_sbh; 2394 int error = 0; 2395 2396 if (!sbh) 2397 return error; 2398 2399 if (buffer_write_io_error(sbh)) { 2400 /* 2401 * Oh, dear. A previous attempt to write the 2402 * superblock failed. This could happen because the 2403 * USB device was yanked out. Or it could happen to 2404 * be a transient write error and maybe the block will 2405 * be remapped. Nothing we can do but to retry the 2406 * write and hope for the best. 2407 */ 2408 ext3_msg(sb, KERN_ERR, "previous I/O error to " 2409 "superblock detected"); 2410 clear_buffer_write_io_error(sbh); 2411 set_buffer_uptodate(sbh); 2412 } 2413 /* 2414 * If the file system is mounted read-only, don't update the 2415 * superblock write time. This avoids updating the superblock 2416 * write time when we are mounting the root file system 2417 * read/only but we need to replay the journal; at that point, 2418 * for people who are east of GMT and who make their clock 2419 * tick in localtime for Windows bug-for-bug compatibility, 2420 * the clock is set in the future, and this will cause e2fsck 2421 * to complain and force a full file system check. 2422 */ 2423 if (!(sb->s_flags & MS_RDONLY)) 2424 es->s_wtime = cpu_to_le32(get_seconds()); 2425 es->s_free_blocks_count = cpu_to_le32(ext3_count_free_blocks(sb)); 2426 es->s_free_inodes_count = cpu_to_le32(ext3_count_free_inodes(sb)); 2427 BUFFER_TRACE(sbh, "marking dirty"); 2428 mark_buffer_dirty(sbh); 2429 if (sync) { 2430 error = sync_dirty_buffer(sbh); 2431 if (buffer_write_io_error(sbh)) { 2432 ext3_msg(sb, KERN_ERR, "I/O error while writing " 2433 "superblock"); 2434 clear_buffer_write_io_error(sbh); 2435 set_buffer_uptodate(sbh); 2436 } 2437 } 2438 return error; 2439} 2440 2441 2442/* 2443 * Have we just finished recovery? If so, and if we are mounting (or 2444 * remounting) the filesystem readonly, then we will end up with a 2445 * consistent fs on disk. Record that fact. 2446 */ 2447static void ext3_mark_recovery_complete(struct super_block * sb, 2448 struct ext3_super_block * es) 2449{ 2450 journal_t *journal = EXT3_SB(sb)->s_journal; 2451 2452 journal_lock_updates(journal); 2453 if (journal_flush(journal) < 0) 2454 goto out; 2455 2456 if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER) && 2457 sb->s_flags & MS_RDONLY) { 2458 EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER); 2459 ext3_commit_super(sb, es, 1); 2460 } 2461 2462out: 2463 journal_unlock_updates(journal); 2464} 2465 2466/* 2467 * If we are mounting (or read-write remounting) a filesystem whose journal 2468 * has recorded an error from a previous lifetime, move that error to the 2469 * main filesystem now. 2470 */ 2471static void ext3_clear_journal_err(struct super_block *sb, 2472 struct ext3_super_block *es) 2473{ 2474 journal_t *journal; 2475 int j_errno; 2476 const char *errstr; 2477 2478 journal = EXT3_SB(sb)->s_journal; 2479 2480 /* 2481 * Now check for any error status which may have been recorded in the 2482 * journal by a prior ext3_error() or ext3_abort() 2483 */ 2484 2485 j_errno = journal_errno(journal); 2486 if (j_errno) { 2487 char nbuf[16]; 2488 2489 errstr = ext3_decode_error(sb, j_errno, nbuf); 2490 ext3_warning(sb, __func__, "Filesystem error recorded " 2491 "from previous mount: %s", errstr); 2492 ext3_warning(sb, __func__, "Marking fs in need of " 2493 "filesystem check."); 2494 2495 EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS; 2496 es->s_state |= cpu_to_le16(EXT3_ERROR_FS); 2497 ext3_commit_super (sb, es, 1); 2498 2499 journal_clear_err(journal); 2500 } 2501} 2502 2503/* 2504 * Force the running and committing transactions to commit, 2505 * and wait on the commit. 2506 */ 2507int ext3_force_commit(struct super_block *sb) 2508{ 2509 journal_t *journal; 2510 int ret; 2511 2512 if (sb->s_flags & MS_RDONLY) 2513 return 0; 2514 2515 journal = EXT3_SB(sb)->s_journal; 2516 ret = ext3_journal_force_commit(journal); 2517 return ret; 2518} 2519 2520static int ext3_sync_fs(struct super_block *sb, int wait) 2521{ 2522 tid_t target; 2523 2524 trace_ext3_sync_fs(sb, wait); 2525 if (journal_start_commit(EXT3_SB(sb)->s_journal, &target)) { 2526 if (wait) 2527 log_wait_commit(EXT3_SB(sb)->s_journal, target); 2528 } 2529 return 0; 2530} 2531 2532/* 2533 * LVM calls this function before a (read-only) snapshot is created. This 2534 * gives us a chance to flush the journal completely and mark the fs clean. 2535 */ 2536static int ext3_freeze(struct super_block *sb) 2537{ 2538 int error = 0; 2539 journal_t *journal; 2540 2541 if (!(sb->s_flags & MS_RDONLY)) { 2542 journal = EXT3_SB(sb)->s_journal; 2543 2544 /* Now we set up the journal barrier. */ 2545 journal_lock_updates(journal); 2546 2547 /* 2548 * We don't want to clear needs_recovery flag when we failed 2549 * to flush the journal. 2550 */ 2551 error = journal_flush(journal); 2552 if (error < 0) 2553 goto out; 2554 2555 /* Journal blocked and flushed, clear needs_recovery flag. */ 2556 EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER); 2557 error = ext3_commit_super(sb, EXT3_SB(sb)->s_es, 1); 2558 if (error) 2559 goto out; 2560 } 2561 return 0; 2562 2563out: 2564 journal_unlock_updates(journal); 2565 return error; 2566} 2567 2568/* 2569 * Called by LVM after the snapshot is done. We need to reset the RECOVER 2570 * flag here, even though the filesystem is not technically dirty yet. 2571 */ 2572static int ext3_unfreeze(struct super_block *sb) 2573{ 2574 if (!(sb->s_flags & MS_RDONLY)) { 2575 lock_super(sb); 2576 /* Reser the needs_recovery flag before the fs is unlocked. */ 2577 EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER); 2578 ext3_commit_super(sb, EXT3_SB(sb)->s_es, 1); 2579 unlock_super(sb); 2580 journal_unlock_updates(EXT3_SB(sb)->s_journal); 2581 } 2582 return 0; 2583} 2584 2585static int ext3_remount (struct super_block * sb, int * flags, char * data) 2586{ 2587 struct ext3_super_block * es; 2588 struct ext3_sb_info *sbi = EXT3_SB(sb); 2589 ext3_fsblk_t n_blocks_count = 0; 2590 unsigned long old_sb_flags; 2591 struct ext3_mount_options old_opts; 2592 int enable_quota = 0; 2593 int err; 2594#ifdef CONFIG_QUOTA 2595 int i; 2596#endif 2597 2598 /* Store the original options */ 2599 lock_super(sb); 2600 old_sb_flags = sb->s_flags; 2601 old_opts.s_mount_opt = sbi->s_mount_opt; 2602 old_opts.s_resuid = sbi->s_resuid; 2603 old_opts.s_resgid = sbi->s_resgid; 2604 old_opts.s_commit_interval = sbi->s_commit_interval; 2605#ifdef CONFIG_QUOTA 2606 old_opts.s_jquota_fmt = sbi->s_jquota_fmt; 2607 for (i = 0; i < MAXQUOTAS; i++) 2608 old_opts.s_qf_names[i] = sbi->s_qf_names[i]; 2609#endif 2610 2611 /* 2612 * Allow the "check" option to be passed as a remount option. 2613 */ 2614 if (!parse_options(data, sb, NULL, NULL, &n_blocks_count, 1)) { 2615 err = -EINVAL; 2616 goto restore_opts; 2617 } 2618 2619 if (test_opt(sb, ABORT)) 2620 ext3_abort(sb, __func__, "Abort forced by user"); 2621 2622 sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | 2623 (test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0); 2624 2625 es = sbi->s_es; 2626 2627 ext3_init_journal_params(sb, sbi->s_journal); 2628 2629 if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY) || 2630 n_blocks_count > le32_to_cpu(es->s_blocks_count)) { 2631 if (test_opt(sb, ABORT)) { 2632 err = -EROFS; 2633 goto restore_opts; 2634 } 2635 2636 if (*flags & MS_RDONLY) { 2637 err = dquot_suspend(sb, -1); 2638 if (err < 0) 2639 goto restore_opts; 2640 2641 /* 2642 * First of all, the unconditional stuff we have to do 2643 * to disable replay of the journal when we next remount 2644 */ 2645 sb->s_flags |= MS_RDONLY; 2646 2647 /* 2648 * OK, test if we are remounting a valid rw partition 2649 * readonly, and if so set the rdonly flag and then 2650 * mark the partition as valid again. 2651 */ 2652 if (!(es->s_state & cpu_to_le16(EXT3_VALID_FS)) && 2653 (sbi->s_mount_state & EXT3_VALID_FS)) 2654 es->s_state = cpu_to_le16(sbi->s_mount_state); 2655 2656 ext3_mark_recovery_complete(sb, es); 2657 } else { 2658 __le32 ret; 2659 if ((ret = EXT3_HAS_RO_COMPAT_FEATURE(sb, 2660 ~EXT3_FEATURE_RO_COMPAT_SUPP))) { 2661 ext3_msg(sb, KERN_WARNING, 2662 "warning: couldn't remount RDWR " 2663 "because of unsupported optional " 2664 "features (%x)", le32_to_cpu(ret)); 2665 err = -EROFS; 2666 goto restore_opts; 2667 } 2668 2669 /* 2670 * If we have an unprocessed orphan list hanging 2671 * around from a previously readonly bdev mount, 2672 * require a full umount & mount for now. 2673 */ 2674 if (es->s_last_orphan) { 2675 ext3_msg(sb, KERN_WARNING, "warning: couldn't " 2676 "remount RDWR because of unprocessed " 2677 "orphan inode list. Please " 2678 "umount & mount instead."); 2679 err = -EINVAL; 2680 goto restore_opts; 2681 } 2682 2683 /* 2684 * Mounting a RDONLY partition read-write, so reread 2685 * and store the current valid flag. (It may have 2686 * been changed by e2fsck since we originally mounted 2687 * the partition.) 2688 */ 2689 ext3_clear_journal_err(sb, es); 2690 sbi->s_mount_state = le16_to_cpu(es->s_state); 2691 if ((err = ext3_group_extend(sb, es, n_blocks_count))) 2692 goto restore_opts; 2693 if (!ext3_setup_super (sb, es, 0)) 2694 sb->s_flags &= ~MS_RDONLY; 2695 enable_quota = 1; 2696 } 2697 } 2698#ifdef CONFIG_QUOTA 2699 /* Release old quota file names */ 2700 for (i = 0; i < MAXQUOTAS; i++) 2701 if (old_opts.s_qf_names[i] && 2702 old_opts.s_qf_names[i] != sbi->s_qf_names[i]) 2703 kfree(old_opts.s_qf_names[i]); 2704#endif 2705 unlock_super(sb); 2706 2707 if (enable_quota) 2708 dquot_resume(sb, -1); 2709 return 0; 2710restore_opts: 2711 sb->s_flags = old_sb_flags; 2712 sbi->s_mount_opt = old_opts.s_mount_opt; 2713 sbi->s_resuid = old_opts.s_resuid; 2714 sbi->s_resgid = old_opts.s_resgid; 2715 sbi->s_commit_interval = old_opts.s_commit_interval; 2716#ifdef CONFIG_QUOTA 2717 sbi->s_jquota_fmt = old_opts.s_jquota_fmt; 2718 for (i = 0; i < MAXQUOTAS; i++) { 2719 if (sbi->s_qf_names[i] && 2720 old_opts.s_qf_names[i] != sbi->s_qf_names[i]) 2721 kfree(sbi->s_qf_names[i]); 2722 sbi->s_qf_names[i] = old_opts.s_qf_names[i]; 2723 } 2724#endif 2725 unlock_super(sb); 2726 return err; 2727} 2728 2729static int ext3_statfs (struct dentry * dentry, struct kstatfs * buf) 2730{ 2731 struct super_block *sb = dentry->d_sb; 2732 struct ext3_sb_info *sbi = EXT3_SB(sb); 2733 struct ext3_super_block *es = sbi->s_es; 2734 u64 fsid; 2735 2736 if (test_opt(sb, MINIX_DF)) { 2737 sbi->s_overhead_last = 0; 2738 } else if (sbi->s_blocks_last != le32_to_cpu(es->s_blocks_count)) { 2739 unsigned long ngroups = sbi->s_groups_count, i; 2740 ext3_fsblk_t overhead = 0; 2741 smp_rmb(); 2742 2743 /* 2744 * Compute the overhead (FS structures). This is constant 2745 * for a given filesystem unless the number of block groups 2746 * changes so we cache the previous value until it does. 2747 */ 2748 2749 /* 2750 * All of the blocks before first_data_block are 2751 * overhead 2752 */ 2753 overhead = le32_to_cpu(es->s_first_data_block); 2754 2755 /* 2756 * Add the overhead attributed to the superblock and 2757 * block group descriptors. If the sparse superblocks 2758 * feature is turned on, then not all groups have this. 2759 */ 2760 for (i = 0; i < ngroups; i++) { 2761 overhead += ext3_bg_has_super(sb, i) + 2762 ext3_bg_num_gdb(sb, i); 2763 cond_resched(); 2764 } 2765 2766 /* 2767 * Every block group has an inode bitmap, a block 2768 * bitmap, and an inode table. 2769 */ 2770 overhead += ngroups * (2 + sbi->s_itb_per_group); 2771 sbi->s_overhead_last = overhead; 2772 smp_wmb(); 2773 sbi->s_blocks_last = le32_to_cpu(es->s_blocks_count); 2774 } 2775 2776 buf->f_type = EXT3_SUPER_MAGIC; 2777 buf->f_bsize = sb->s_blocksize; 2778 buf->f_blocks = le32_to_cpu(es->s_blocks_count) - sbi->s_overhead_last; 2779 buf->f_bfree = percpu_counter_sum_positive(&sbi->s_freeblocks_counter); 2780 buf->f_bavail = buf->f_bfree - le32_to_cpu(es->s_r_blocks_count); 2781 if (buf->f_bfree < le32_to_cpu(es->s_r_blocks_count)) 2782 buf->f_bavail = 0; 2783 buf->f_files = le32_to_cpu(es->s_inodes_count); 2784 buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter); 2785 buf->f_namelen = EXT3_NAME_LEN; 2786 fsid = le64_to_cpup((void *)es->s_uuid) ^ 2787 le64_to_cpup((void *)es->s_uuid + sizeof(u64)); 2788 buf->f_fsid.val[0] = fsid & 0xFFFFFFFFUL; 2789 buf->f_fsid.val[1] = (fsid >> 32) & 0xFFFFFFFFUL; 2790 return 0; 2791} 2792 2793/* Helper function for writing quotas on sync - we need to start transaction before quota file 2794 * is locked for write. Otherwise the are possible deadlocks: 2795 * Process 1 Process 2 2796 * ext3_create() quota_sync() 2797 * journal_start() write_dquot() 2798 * dquot_initialize() down(dqio_mutex) 2799 * down(dqio_mutex) journal_start() 2800 * 2801 */ 2802 2803#ifdef CONFIG_QUOTA 2804 2805static inline struct inode *dquot_to_inode(struct dquot *dquot) 2806{ 2807 return sb_dqopt(dquot->dq_sb)->files[dquot->dq_type]; 2808} 2809 2810static int ext3_write_dquot(struct dquot *dquot) 2811{ 2812 int ret, err; 2813 handle_t *handle; 2814 struct inode *inode; 2815 2816 inode = dquot_to_inode(dquot); 2817 handle = ext3_journal_start(inode, 2818 EXT3_QUOTA_TRANS_BLOCKS(dquot->dq_sb)); 2819 if (IS_ERR(handle)) 2820 return PTR_ERR(handle); 2821 ret = dquot_commit(dquot); 2822 err = ext3_journal_stop(handle); 2823 if (!ret) 2824 ret = err; 2825 return ret; 2826} 2827 2828static int ext3_acquire_dquot(struct dquot *dquot) 2829{ 2830 int ret, err; 2831 handle_t *handle; 2832 2833 handle = ext3_journal_start(dquot_to_inode(dquot), 2834 EXT3_QUOTA_INIT_BLOCKS(dquot->dq_sb)); 2835 if (IS_ERR(handle)) 2836 return PTR_ERR(handle); 2837 ret = dquot_acquire(dquot); 2838 err = ext3_journal_stop(handle); 2839 if (!ret) 2840 ret = err; 2841 return ret; 2842} 2843 2844static int ext3_release_dquot(struct dquot *dquot) 2845{ 2846 int ret, err; 2847 handle_t *handle; 2848 2849 handle = ext3_journal_start(dquot_to_inode(dquot), 2850 EXT3_QUOTA_DEL_BLOCKS(dquot->dq_sb)); 2851 if (IS_ERR(handle)) { 2852 /* Release dquot anyway to avoid endless cycle in dqput() */ 2853 dquot_release(dquot); 2854 return PTR_ERR(handle); 2855 } 2856 ret = dquot_release(dquot); 2857 err = ext3_journal_stop(handle); 2858 if (!ret) 2859 ret = err; 2860 return ret; 2861} 2862 2863static int ext3_mark_dquot_dirty(struct dquot *dquot) 2864{ 2865 /* Are we journaling quotas? */ 2866 if (EXT3_SB(dquot->dq_sb)->s_qf_names[USRQUOTA] || 2867 EXT3_SB(dquot->dq_sb)->s_qf_names[GRPQUOTA]) { 2868 dquot_mark_dquot_dirty(dquot); 2869 return ext3_write_dquot(dquot); 2870 } else { 2871 return dquot_mark_dquot_dirty(dquot); 2872 } 2873} 2874 2875static int ext3_write_info(struct super_block *sb, int type) 2876{ 2877 int ret, err; 2878 handle_t *handle; 2879 2880 /* Data block + inode block */ 2881 handle = ext3_journal_start(sb->s_root->d_inode, 2); 2882 if (IS_ERR(handle)) 2883 return PTR_ERR(handle); 2884 ret = dquot_commit_info(sb, type); 2885 err = ext3_journal_stop(handle); 2886 if (!ret) 2887 ret = err; 2888 return ret; 2889} 2890 2891/* 2892 * Turn on quotas during mount time - we need to find 2893 * the quota file and such... 2894 */ 2895static int ext3_quota_on_mount(struct super_block *sb, int type) 2896{ 2897 return dquot_quota_on_mount(sb, EXT3_SB(sb)->s_qf_names[type], 2898 EXT3_SB(sb)->s_jquota_fmt, type); 2899} 2900 2901/* 2902 * Standard function to be called on quota_on 2903 */ 2904static int ext3_quota_on(struct super_block *sb, int type, int format_id, 2905 struct path *path) 2906{ 2907 int err; 2908 2909 if (!test_opt(sb, QUOTA)) 2910 return -EINVAL; 2911 2912 /* Quotafile not on the same filesystem? */ 2913 if (path->dentry->d_sb != sb) 2914 return -EXDEV; 2915 /* Journaling quota? */ 2916 if (EXT3_SB(sb)->s_qf_names[type]) { 2917 /* Quotafile not of fs root? */ 2918 if (path->dentry->d_parent != sb->s_root) 2919 ext3_msg(sb, KERN_WARNING, 2920 "warning: Quota file not on filesystem root. " 2921 "Journaled quota will not work."); 2922 } 2923 2924 /* 2925 * When we journal data on quota file, we have to flush journal to see 2926 * all updates to the file when we bypass pagecache... 2927 */ 2928 if (ext3_should_journal_data(path->dentry->d_inode)) { 2929 /* 2930 * We don't need to lock updates but journal_flush() could 2931 * otherwise be livelocked... 2932 */ 2933 journal_lock_updates(EXT3_SB(sb)->s_journal); 2934 err = journal_flush(EXT3_SB(sb)->s_journal); 2935 journal_unlock_updates(EXT3_SB(sb)->s_journal); 2936 if (err) 2937 return err; 2938 } 2939 2940 return dquot_quota_on(sb, type, format_id, path); 2941} 2942 2943/* Read data from quotafile - avoid pagecache and such because we cannot afford 2944 * acquiring the locks... As quota files are never truncated and quota code 2945 * itself serializes the operations (and no one else should touch the files) 2946 * we don't have to be afraid of races */ 2947static ssize_t ext3_quota_read(struct super_block *sb, int type, char *data, 2948 size_t len, loff_t off) 2949{ 2950 struct inode *inode = sb_dqopt(sb)->files[type]; 2951 sector_t blk = off >> EXT3_BLOCK_SIZE_BITS(sb); 2952 int err = 0; 2953 int offset = off & (sb->s_blocksize - 1); 2954 int tocopy; 2955 size_t toread; 2956 struct buffer_head *bh; 2957 loff_t i_size = i_size_read(inode); 2958 2959 if (off > i_size) 2960 return 0; 2961 if (off+len > i_size) 2962 len = i_size-off; 2963 toread = len; 2964 while (toread > 0) { 2965 tocopy = sb->s_blocksize - offset < toread ? 2966 sb->s_blocksize - offset : toread; 2967 bh = ext3_bread(NULL, inode, blk, 0, &err); 2968 if (err) 2969 return err; 2970 if (!bh) /* A hole? */ 2971 memset(data, 0, tocopy); 2972 else 2973 memcpy(data, bh->b_data+offset, tocopy); 2974 brelse(bh); 2975 offset = 0; 2976 toread -= tocopy; 2977 data += tocopy; 2978 blk++; 2979 } 2980 return len; 2981} 2982 2983/* Write to quotafile (we know the transaction is already started and has 2984 * enough credits) */ 2985static ssize_t ext3_quota_write(struct super_block *sb, int type, 2986 const char *data, size_t len, loff_t off) 2987{ 2988 struct inode *inode = sb_dqopt(sb)->files[type]; 2989 sector_t blk = off >> EXT3_BLOCK_SIZE_BITS(sb); 2990 int err = 0; 2991 int offset = off & (sb->s_blocksize - 1); 2992 int journal_quota = EXT3_SB(sb)->s_qf_names[type] != NULL; 2993 struct buffer_head *bh; 2994 handle_t *handle = journal_current_handle(); 2995 2996 if (!handle) { 2997 ext3_msg(sb, KERN_WARNING, 2998 "warning: quota write (off=%llu, len=%llu)" 2999 " cancelled because transaction is not started.", 3000 (unsigned long long)off, (unsigned long long)len); 3001 return -EIO; 3002 } 3003 3004 /* 3005 * Since we account only one data block in transaction credits, 3006 * then it is impossible to cross a block boundary. 3007 */ 3008 if (sb->s_blocksize - offset < len) { 3009 ext3_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)" 3010 " cancelled because not block aligned", 3011 (unsigned long long)off, (unsigned long long)len); 3012 return -EIO; 3013 } 3014 mutex_lock_nested(&inode->i_mutex, I_MUTEX_QUOTA); 3015 bh = ext3_bread(handle, inode, blk, 1, &err); 3016 if (!bh) 3017 goto out; 3018 if (journal_quota) { 3019 err = ext3_journal_get_write_access(handle, bh); 3020 if (err) { 3021 brelse(bh); 3022 goto out; 3023 } 3024 } 3025 lock_buffer(bh); 3026 memcpy(bh->b_data+offset, data, len); 3027 flush_dcache_page(bh->b_page); 3028 unlock_buffer(bh); 3029 if (journal_quota) 3030 err = ext3_journal_dirty_metadata(handle, bh); 3031 else { 3032 /* Always do at least ordered writes for quotas */ 3033 err = ext3_journal_dirty_data(handle, bh); 3034 mark_buffer_dirty(bh); 3035 } 3036 brelse(bh); 3037out: 3038 if (err) { 3039 mutex_unlock(&inode->i_mutex); 3040 return err; 3041 } 3042 if (inode->i_size < off + len) { 3043 i_size_write(inode, off + len); 3044 EXT3_I(inode)->i_disksize = inode->i_size; 3045 } 3046 inode->i_version++; 3047 inode->i_mtime = inode->i_ctime = CURRENT_TIME; 3048 ext3_mark_inode_dirty(handle, inode); 3049 mutex_unlock(&inode->i_mutex); 3050 return len; 3051} 3052 3053#endif 3054 3055static struct dentry *ext3_mount(struct file_system_type *fs_type, 3056 int flags, const char *dev_name, void *data) 3057{ 3058 return mount_bdev(fs_type, flags, dev_name, data, ext3_fill_super); 3059} 3060 3061static struct file_system_type ext3_fs_type = { 3062 .owner = THIS_MODULE, 3063 .name = "ext3", 3064 .mount = ext3_mount, 3065 .kill_sb = kill_block_super, 3066 .fs_flags = FS_REQUIRES_DEV, 3067}; 3068 3069static int __init init_ext3_fs(void) 3070{ 3071 int err = init_ext3_xattr(); 3072 if (err) 3073 return err; 3074 err = init_inodecache(); 3075 if (err) 3076 goto out1; 3077 err = register_filesystem(&ext3_fs_type); 3078 if (err) 3079 goto out; 3080 return 0; 3081out: 3082 destroy_inodecache(); 3083out1: 3084 exit_ext3_xattr(); 3085 return err; 3086} 3087 3088static void __exit exit_ext3_fs(void) 3089{ 3090 unregister_filesystem(&ext3_fs_type); 3091 destroy_inodecache(); 3092 exit_ext3_xattr(); 3093} 3094 3095MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others"); 3096MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions"); 3097MODULE_LICENSE("GPL"); 3098module_init(init_ext3_fs) 3099module_exit(exit_ext3_fs)