Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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