super.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:50k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  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. #include <linux/config.h>
  19. #include <linux/module.h>
  20. #include <linux/string.h>
  21. #include <linux/fs.h>
  22. #include <linux/sched.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/locks.h>
  29. #include <linux/blkdev.h>
  30. #include <linux/smp_lock.h>
  31. #include <linux/random.h>
  32. #include <asm/uaccess.h>
  33. #ifdef CONFIG_JBD_DEBUG
  34. static int ext3_ro_after; /* Make fs read-only after this many jiffies */
  35. #endif
  36. static int ext3_load_journal(struct super_block *, struct ext3_super_block *);
  37. static int ext3_create_journal(struct super_block *, struct ext3_super_block *,
  38.        int);
  39. static void ext3_commit_super (struct super_block * sb,
  40.        struct ext3_super_block * es,
  41.        int sync);
  42. static void ext3_mark_recovery_complete(struct super_block * sb,
  43. struct ext3_super_block * es);
  44. static void ext3_clear_journal_err(struct super_block * sb,
  45.    struct ext3_super_block * es);
  46. #ifdef CONFIG_JBD_DEBUG
  47. int journal_no_write[2];
  48. /*
  49.  * Debug code for turning filesystems "read-only" after a specified
  50.  * amount of time.  This is for crash/recovery testing.
  51.  */
  52. static void make_rdonly(kdev_t dev, int *no_write)
  53. {
  54. if (dev) {
  55. printk(KERN_WARNING "Turning device %s read-onlyn", 
  56.        bdevname(dev));
  57. *no_write = 0xdead0000 + dev;
  58. }
  59. }
  60. static void turn_fs_readonly(unsigned long arg)
  61. {
  62. struct super_block *sb = (struct super_block *)arg;
  63. make_rdonly(sb->s_dev, &journal_no_write[0]);
  64. make_rdonly(EXT3_SB(sb)->s_journal->j_dev, &journal_no_write[1]);
  65. wake_up(&EXT3_SB(sb)->ro_wait_queue);
  66. }
  67. static void setup_ro_after(struct super_block *sb)
  68. {
  69. struct ext3_sb_info *sbi = EXT3_SB(sb);
  70. init_timer(&sbi->turn_ro_timer);
  71. if (ext3_ro_after) {
  72. printk(KERN_DEBUG "fs will go read-only in %d jiffiesn",
  73.        ext3_ro_after);
  74. init_waitqueue_head(&sbi->ro_wait_queue);
  75. journal_no_write[0] = 0;
  76. journal_no_write[1] = 0;
  77. sbi->turn_ro_timer.function = turn_fs_readonly;
  78. sbi->turn_ro_timer.data = (unsigned long)sb;
  79. sbi->turn_ro_timer.expires = jiffies + ext3_ro_after;
  80. ext3_ro_after = 0;
  81. add_timer(&sbi->turn_ro_timer);
  82. }
  83. }
  84. static void clear_ro_after(struct super_block *sb)
  85. {
  86. del_timer_sync(&EXT3_SB(sb)->turn_ro_timer);
  87. journal_no_write[0] = 0;
  88. journal_no_write[1] = 0;
  89. ext3_ro_after = 0;
  90. }
  91. #else
  92. #define setup_ro_after(sb) do {} while (0)
  93. #define clear_ro_after(sb) do {} while (0)
  94. #endif
  95. static char error_buf[1024];
  96. /* Determine the appropriate response to ext3_error on a given filesystem */
  97. static int ext3_error_behaviour(struct super_block *sb)
  98. {
  99. /* First check for mount-time options */
  100. if (test_opt (sb, ERRORS_PANIC))
  101. return EXT3_ERRORS_PANIC;
  102. if (test_opt (sb, ERRORS_RO))
  103. return EXT3_ERRORS_RO;
  104. if (test_opt (sb, ERRORS_CONT))
  105. return EXT3_ERRORS_CONTINUE;
  106. /* If no overrides were specified on the mount, then fall back
  107.  * to the default behaviour set in the filesystem's superblock
  108.  * on disk. */
  109. switch (le16_to_cpu(sb->u.ext3_sb.s_es->s_errors)) {
  110. case EXT3_ERRORS_PANIC:
  111. return EXT3_ERRORS_PANIC;
  112. case EXT3_ERRORS_RO:
  113. return EXT3_ERRORS_RO;
  114. default:
  115. break;
  116. }
  117. return EXT3_ERRORS_CONTINUE;
  118. }
  119. /* Deal with the reporting of failure conditions on a filesystem such as
  120.  * inconsistencies detected or read IO failures.
  121.  *
  122.  * On ext2, we can store the error state of the filesystem in the
  123.  * superblock.  That is not possible on ext3, because we may have other
  124.  * write ordering constraints on the superblock which prevent us from
  125.  * writing it out straight away; and given that the journal is about to
  126.  * be aborted, we can't rely on the current, or future, transactions to
  127.  * write out the superblock safely.
  128.  *
  129.  * We'll just use the journal_abort() error code to record an error in
  130.  * the journal instead.  On recovery, the journal will compain about
  131.  * that error until we've noted it down and cleared it.
  132.  */
  133. static void ext3_handle_error(struct super_block *sb)
  134. {
  135. struct ext3_super_block *es = EXT3_SB(sb)->s_es;
  136. EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
  137. es->s_state |= cpu_to_le32(EXT3_ERROR_FS);
  138. if (sb->s_flags & MS_RDONLY)
  139. return;
  140. if (ext3_error_behaviour(sb) != EXT3_ERRORS_CONTINUE) {
  141. EXT3_SB(sb)->s_mount_opt |= EXT3_MOUNT_ABORT;
  142. journal_abort(EXT3_SB(sb)->s_journal, -EIO);
  143. }
  144. if (ext3_error_behaviour(sb) == EXT3_ERRORS_PANIC) 
  145. panic ("EXT3-fs (device %s): panic forced after errorn",
  146.        bdevname(sb->s_dev));
  147. if (ext3_error_behaviour(sb) == EXT3_ERRORS_RO) {
  148. printk (KERN_CRIT "Remounting filesystem read-onlyn");
  149. sb->s_flags |= MS_RDONLY;
  150. }
  151. ext3_commit_super(sb, es, 1);
  152. }
  153. void ext3_error (struct super_block * sb, const char * function,
  154.  const char * fmt, ...)
  155. {
  156. va_list args;
  157. va_start (args, fmt);
  158. vsprintf (error_buf, fmt, args);
  159. va_end (args);
  160. printk (KERN_CRIT "EXT3-fs error (device %s): %s: %sn",
  161. bdevname(sb->s_dev), function, error_buf);
  162. ext3_handle_error(sb);
  163. }
  164. const char *ext3_decode_error(struct super_block * sb, int errno, char nbuf[16])
  165. {
  166. char *errstr = NULL;
  167. switch (errno) {
  168. case -EIO:
  169. errstr = "IO failure";
  170. break;
  171. case -ENOMEM:
  172. errstr = "Out of memory";
  173. break;
  174. case -EROFS:
  175. if (!sb || EXT3_SB(sb)->s_journal->j_flags & JFS_ABORT)
  176. errstr = "Journal has aborted";
  177. else
  178. errstr = "Readonly filesystem";
  179. break;
  180. default:
  181. /* If the caller passed in an extra buffer for unknown
  182.  * errors, textualise them now.  Else we just return
  183.  * NULL. */
  184. if (nbuf) {
  185. /* Check for truncated error codes... */
  186. if (snprintf(nbuf, 16, "error %d", -errno) >= 0)
  187. errstr = nbuf;
  188. }
  189. break;
  190. }
  191. return errstr;
  192. }
  193. /* __ext3_std_error decodes expected errors from journaling functions
  194.  * automatically and invokes the appropriate error response.  */
  195. void __ext3_std_error (struct super_block * sb, const char * function,
  196.        int errno)
  197. {
  198. char nbuf[16];
  199. const char *errstr = ext3_decode_error(sb, errno, nbuf);
  200. printk (KERN_CRIT "EXT3-fs error (device %s) in %s: %sn",
  201. bdevname(sb->s_dev), function, errstr);
  202. ext3_handle_error(sb);
  203. }
  204. /*
  205.  * ext3_abort is a much stronger failure handler than ext3_error.  The
  206.  * abort function may be used to deal with unrecoverable failures such
  207.  * as journal IO errors or ENOMEM at a critical moment in log management.
  208.  *
  209.  * We unconditionally force the filesystem into an ABORT|READONLY state,
  210.  * unless the error response on the fs has been set to panic in which
  211.  * case we take the easy way out and panic immediately.
  212.  */
  213. void ext3_abort (struct super_block * sb, const char * function,
  214.  const char * fmt, ...)
  215. {
  216. va_list args;
  217. printk (KERN_CRIT "ext3_abort called.n");
  218. va_start (args, fmt);
  219. vsprintf (error_buf, fmt, args);
  220. va_end (args);
  221. if (ext3_error_behaviour(sb) == EXT3_ERRORS_PANIC)
  222. panic ("EXT3-fs panic (device %s): %s: %sn",
  223.        bdevname(sb->s_dev), function, error_buf);
  224. printk (KERN_CRIT "EXT3-fs abort (device %s): %s: %sn",
  225. bdevname(sb->s_dev), function, error_buf);
  226. if (sb->s_flags & MS_RDONLY)
  227. return;
  228. printk (KERN_CRIT "Remounting filesystem read-onlyn");
  229. sb->u.ext3_sb.s_mount_state |= EXT3_ERROR_FS;
  230. sb->s_flags |= MS_RDONLY;
  231. sb->u.ext3_sb.s_mount_opt |= EXT3_MOUNT_ABORT;
  232. journal_abort(EXT3_SB(sb)->s_journal, -EIO);
  233. }
  234. /* Deal with the reporting of failure conditions while running, such as
  235.  * inconsistencies in operation or invalid system states.
  236.  *
  237.  * Use ext3_error() for cases of invalid filesystem states, as that will
  238.  * record an error on disk and force a filesystem check on the next boot.
  239.  */
  240. NORET_TYPE void ext3_panic (struct super_block * sb, const char * function,
  241.     const char * fmt, ...)
  242. {
  243. va_list args;
  244. va_start (args, fmt);
  245. vsprintf (error_buf, fmt, args);
  246. va_end (args);
  247. /* this is to prevent panic from syncing this filesystem */
  248. /* AKPM: is this sufficient? */
  249. sb->s_flags |= MS_RDONLY;
  250. panic ("EXT3-fs panic (device %s): %s: %sn",
  251.        bdevname(sb->s_dev), function, error_buf);
  252. }
  253. void ext3_warning (struct super_block * sb, const char * function,
  254.    const char * fmt, ...)
  255. {
  256. va_list args;
  257. va_start (args, fmt);
  258. vsprintf (error_buf, fmt, args);
  259. va_end (args);
  260. printk (KERN_WARNING "EXT3-fs warning (device %s): %s: %sn",
  261. bdevname(sb->s_dev), function, error_buf);
  262. }
  263. void ext3_update_dynamic_rev(struct super_block *sb)
  264. {
  265. struct ext3_super_block *es = EXT3_SB(sb)->s_es;
  266. if (le32_to_cpu(es->s_rev_level) > EXT3_GOOD_OLD_REV)
  267. return;
  268. ext3_warning(sb, __FUNCTION__,
  269.      "updating to rev %d because of new feature flag, "
  270.      "running e2fsck is recommended",
  271.      EXT3_DYNAMIC_REV);
  272. es->s_first_ino = cpu_to_le32(EXT3_GOOD_OLD_FIRST_INO);
  273. es->s_inode_size = cpu_to_le16(EXT3_GOOD_OLD_INODE_SIZE);
  274. es->s_rev_level = cpu_to_le32(EXT3_DYNAMIC_REV);
  275. /* leave es->s_feature_*compat flags alone */
  276. /* es->s_uuid will be set by e2fsck if empty */
  277. /*
  278.  * The rest of the superblock fields should be zero, and if not it
  279.  * means they are likely already in use, so leave them alone.  We
  280.  * can leave it up to e2fsck to clean up any inconsistencies there.
  281.  */
  282. }
  283. /*
  284.  * Open the external journal device
  285.  */
  286. static struct block_device *ext3_blkdev_get(kdev_t dev)
  287. {
  288. struct block_device *bdev;
  289. int err = -ENODEV;
  290. bdev = bdget(kdev_t_to_nr(dev));
  291. if (bdev == NULL)
  292. goto fail;
  293. err = blkdev_get(bdev, FMODE_READ|FMODE_WRITE, 0, BDEV_FS);
  294. if (err < 0)
  295. goto fail;
  296. return bdev;
  297. fail:
  298. printk(KERN_ERR "EXT3: failed to open journal device %s: %dn",
  299. bdevname(dev), err);
  300. return NULL;
  301. }
  302. /*
  303.  * Release the journal device
  304.  */
  305. static int ext3_blkdev_put(struct block_device *bdev)
  306. {
  307. return blkdev_put(bdev, BDEV_FS);
  308. }
  309. static int ext3_blkdev_remove(struct ext3_sb_info *sbi)
  310. {
  311. struct block_device *bdev;
  312. int ret = -ENODEV;
  313. bdev = sbi->journal_bdev;
  314. if (bdev) {
  315. ret = ext3_blkdev_put(bdev);
  316. sbi->journal_bdev = 0;
  317. }
  318. return ret;
  319. }
  320. #define orphan_list_entry(l) list_entry((l), struct inode, u.ext3_i.i_orphan)
  321. static void dump_orphan_list(struct super_block *sb, struct ext3_sb_info *sbi)
  322. {
  323. struct list_head *l;
  324. printk(KERN_ERR "sb orphan head is %dn", 
  325.        le32_to_cpu(sbi->s_es->s_last_orphan));
  326. printk(KERN_ERR "sb_info orphan list:n");
  327. list_for_each(l, &sbi->s_orphan) {
  328. struct inode *inode = orphan_list_entry(l);
  329. printk(KERN_ERR "  "
  330.        "inode 0x%04x:%ld at %p: mode %o, nlink %d, next %dn",
  331.        inode->i_dev, inode->i_ino, inode,
  332.        inode->i_mode, inode->i_nlink, 
  333.        le32_to_cpu(NEXT_ORPHAN(inode)));
  334. }
  335. }
  336. void ext3_put_super (struct super_block * sb)
  337. {
  338. struct ext3_sb_info *sbi = EXT3_SB(sb);
  339. struct ext3_super_block *es = sbi->s_es;
  340. kdev_t j_dev = sbi->s_journal->j_dev;
  341. int i;
  342. journal_destroy(sbi->s_journal);
  343. if (!(sb->s_flags & MS_RDONLY)) {
  344. EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
  345. es->s_state = le16_to_cpu(sbi->s_mount_state);
  346. BUFFER_TRACE(sbi->s_sbh, "marking dirty");
  347. mark_buffer_dirty(sbi->s_sbh);
  348. ext3_commit_super(sb, es, 1);
  349. }
  350. for (i = 0; i < sbi->s_gdb_count; i++)
  351. brelse(sbi->s_group_desc[i]);
  352. kfree(sbi->s_group_desc);
  353. for (i = 0; i < EXT3_MAX_GROUP_LOADED; i++)
  354. brelse(sbi->s_inode_bitmap[i]);
  355. for (i = 0; i < EXT3_MAX_GROUP_LOADED; i++)
  356. brelse(sbi->s_block_bitmap[i]);
  357. brelse(sbi->s_sbh);
  358. /* Debugging code just in case the in-memory inode orphan list
  359.  * isn't empty.  The on-disk one can be non-empty if we've
  360.  * detected an error and taken the fs readonly, but the
  361.  * in-memory list had better be clean by this point. */
  362. if (!list_empty(&sbi->s_orphan))
  363. dump_orphan_list(sb, sbi);
  364. J_ASSERT(list_empty(&sbi->s_orphan));
  365. invalidate_buffers(sb->s_dev);
  366. if (j_dev != sb->s_dev) {
  367. /*
  368.  * Invalidate the journal device's buffers.  We don't want them
  369.  * floating about in memory - the physical journal device may
  370.  * hotswapped, and it breaks the `ro-after' testing code.
  371.  */
  372. fsync_no_super(j_dev);
  373. invalidate_buffers(j_dev);
  374. ext3_blkdev_remove(sbi);
  375. }
  376. clear_ro_after(sb);
  377. return;
  378. }
  379. static struct super_operations ext3_sops = {
  380. read_inode: ext3_read_inode, /* BKL held */
  381. write_inode: ext3_write_inode, /* BKL not held.  Don't need */
  382. dirty_inode: ext3_dirty_inode, /* BKL not held.  We take it */
  383. put_inode: ext3_put_inode, /* BKL not held.  Don't need */
  384. delete_inode: ext3_delete_inode, /* BKL not held.  We take it */
  385. put_super: ext3_put_super, /* BKL held */
  386. write_super: ext3_write_super, /* BKL held */
  387. write_super_lockfs: ext3_write_super_lockfs, /* BKL not held. Take it */
  388. unlockfs: ext3_unlockfs, /* BKL not held.  We take it */
  389. statfs: ext3_statfs, /* BKL held */
  390. remount_fs: ext3_remount, /* BKL held */
  391. };
  392. static int want_value(char *value, char *option)
  393. {
  394. if (!value || !*value) {
  395. printk(KERN_NOTICE "EXT3-fs: the %s option needs an argumentn",
  396.        option);
  397. return -1;
  398. }
  399. return 0;
  400. }
  401. static int want_null_value(char *value, char *option)
  402. {
  403. if (*value) {
  404. printk(KERN_NOTICE "EXT3-fs: Invalid %s argument: %sn",
  405.        option, value);
  406. return -1;
  407. }
  408. return 0;
  409. }
  410. static int want_numeric(char *value, char *option, unsigned long *number)
  411. {
  412. if (want_value(value, option))
  413. return -1;
  414. *number = simple_strtoul(value, &value, 0);
  415. if (want_null_value(value, option))
  416. return -1;
  417. return 0;
  418. }
  419. /*
  420.  * This function has been shamelessly adapted from the msdos fs
  421.  */
  422. static int parse_options (char * options, unsigned long * sb_block,
  423.   struct ext3_sb_info *sbi,
  424.   unsigned long * inum,
  425.   int is_remount)
  426. {
  427. unsigned long *mount_options = &sbi->s_mount_opt;
  428. uid_t *resuid = &sbi->s_resuid;
  429. gid_t *resgid = &sbi->s_resgid;
  430. char * this_char;
  431. char * value;
  432. if (!options)
  433. return 1;
  434. for (this_char = strtok (options, ",");
  435.      this_char != NULL;
  436.      this_char = strtok (NULL, ",")) {
  437. if ((value = strchr (this_char, '=')) != NULL)
  438. *value++ = 0;
  439. if (!strcmp (this_char, "bsddf"))
  440. clear_opt (*mount_options, MINIX_DF);
  441. else if (!strcmp (this_char, "nouid32")) {
  442. set_opt (*mount_options, NO_UID32);
  443. }
  444. else if (!strcmp (this_char, "abort"))
  445. set_opt (*mount_options, ABORT);
  446. else if (!strcmp (this_char, "check")) {
  447. if (!value || !*value || !strcmp (value, "none"))
  448. clear_opt (*mount_options, CHECK);
  449. else
  450. #ifdef CONFIG_EXT3_CHECK
  451. set_opt (*mount_options, CHECK);
  452. #else
  453. printk(KERN_ERR 
  454.        "EXT3 Check option not supportedn");
  455. #endif
  456. }
  457. else if (!strcmp (this_char, "debug"))
  458. set_opt (*mount_options, DEBUG);
  459. else if (!strcmp (this_char, "errors")) {
  460. if (want_value(value, "errors"))
  461. return 0;
  462. if (!strcmp (value, "continue")) {
  463. clear_opt (*mount_options, ERRORS_RO);
  464. clear_opt (*mount_options, ERRORS_PANIC);
  465. set_opt (*mount_options, ERRORS_CONT);
  466. }
  467. else if (!strcmp (value, "remount-ro")) {
  468. clear_opt (*mount_options, ERRORS_CONT);
  469. clear_opt (*mount_options, ERRORS_PANIC);
  470. set_opt (*mount_options, ERRORS_RO);
  471. }
  472. else if (!strcmp (value, "panic")) {
  473. clear_opt (*mount_options, ERRORS_CONT);
  474. clear_opt (*mount_options, ERRORS_RO);
  475. set_opt (*mount_options, ERRORS_PANIC);
  476. }
  477. else {
  478. printk (KERN_ERR
  479. "EXT3-fs: Invalid errors option: %sn",
  480. value);
  481. return 0;
  482. }
  483. }
  484. else if (!strcmp (this_char, "grpid") ||
  485.  !strcmp (this_char, "bsdgroups"))
  486. set_opt (*mount_options, GRPID);
  487. else if (!strcmp (this_char, "minixdf"))
  488. set_opt (*mount_options, MINIX_DF);
  489. else if (!strcmp (this_char, "nocheck"))
  490. clear_opt (*mount_options, CHECK);
  491. else if (!strcmp (this_char, "nogrpid") ||
  492.  !strcmp (this_char, "sysvgroups"))
  493. clear_opt (*mount_options, GRPID);
  494. else if (!strcmp (this_char, "resgid")) {
  495. unsigned long v;
  496. if (want_numeric(value, "resgid", &v))
  497. return 0;
  498. *resgid = v;
  499. }
  500. else if (!strcmp (this_char, "resuid")) {
  501. unsigned long v;
  502. if (want_numeric(value, "resuid", &v))
  503. return 0;
  504. *resuid = v;
  505. }
  506. else if (!strcmp (this_char, "sb")) {
  507. if (want_numeric(value, "sb", sb_block))
  508. return 0;
  509. }
  510. #ifdef CONFIG_JBD_DEBUG
  511. else if (!strcmp (this_char, "ro-after")) {
  512. unsigned long v;
  513. if (want_numeric(value, "ro-after", &v))
  514. return 0;
  515. ext3_ro_after = v;
  516. }
  517. #endif
  518. /* Silently ignore the quota options */
  519. else if (!strcmp (this_char, "grpquota")
  520.          || !strcmp (this_char, "noquota")
  521.          || !strcmp (this_char, "quota")
  522.          || !strcmp (this_char, "usrquota"))
  523. /* Don't do anything ;-) */ ;
  524. else if (!strcmp (this_char, "journal")) {
  525. /* @@@ FIXME */
  526. /* Eventually we will want to be able to create
  527.                            a journal file here.  For now, only allow the
  528.                            user to specify an existing inode to be the
  529.                            journal file. */
  530. if (is_remount) {
  531. printk(KERN_ERR "EXT3-fs: cannot specify "
  532.        "journal on remountn");
  533. return 0;
  534. }
  535. if (want_value(value, "journal"))
  536. return 0;
  537. if (!strcmp (value, "update"))
  538. set_opt (*mount_options, UPDATE_JOURNAL);
  539. else if (want_numeric(value, "journal", inum))
  540. return 0;
  541. }
  542. else if (!strcmp (this_char, "noload"))
  543. set_opt (*mount_options, NOLOAD);
  544. else if (!strcmp (this_char, "data")) {
  545. int data_opt = 0;
  546. if (want_value(value, "data"))
  547. return 0;
  548. if (!strcmp (value, "journal"))
  549. data_opt = EXT3_MOUNT_JOURNAL_DATA;
  550. else if (!strcmp (value, "ordered"))
  551. data_opt = EXT3_MOUNT_ORDERED_DATA;
  552. else if (!strcmp (value, "writeback"))
  553. data_opt = EXT3_MOUNT_WRITEBACK_DATA;
  554. else {
  555. printk (KERN_ERR 
  556. "EXT3-fs: Invalid data option: %sn",
  557. value);
  558. return 0;
  559. }
  560. if (is_remount) {
  561. if ((*mount_options & EXT3_MOUNT_DATA_FLAGS) !=
  562. data_opt) {
  563. printk(KERN_ERR
  564.        "EXT3-fs: cannot change data "
  565.        "mode on remountn");
  566. return 0;
  567. }
  568. } else {
  569. *mount_options &= ~EXT3_MOUNT_DATA_FLAGS;
  570. *mount_options |= data_opt;
  571. }
  572. } else {
  573. printk (KERN_ERR 
  574. "EXT3-fs: Unrecognized mount option %sn",
  575. this_char);
  576. return 0;
  577. }
  578. }
  579. return 1;
  580. }
  581. static int ext3_setup_super(struct super_block *sb, struct ext3_super_block *es,
  582.     int read_only)
  583. {
  584. struct ext3_sb_info *sbi = EXT3_SB(sb);
  585. int res = 0;
  586. if (le32_to_cpu(es->s_rev_level) > EXT3_MAX_SUPP_REV) {
  587. printk (KERN_ERR "EXT3-fs warning: revision level too high, "
  588. "forcing read-only moden");
  589. res = MS_RDONLY;
  590. }
  591. if (read_only)
  592. return res;
  593. if (!(sbi->s_mount_state & EXT3_VALID_FS))
  594. printk (KERN_WARNING "EXT3-fs warning: mounting unchecked fs, "
  595. "running e2fsck is recommendedn");
  596. else if ((sbi->s_mount_state & EXT3_ERROR_FS))
  597. printk (KERN_WARNING
  598. "EXT3-fs warning: mounting fs with errors, "
  599. "running e2fsck is recommendedn");
  600. else if ((__s16) le16_to_cpu(es->s_max_mnt_count) >= 0 &&
  601.  le16_to_cpu(es->s_mnt_count) >=
  602.  (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count))
  603. printk (KERN_WARNING
  604. "EXT3-fs warning: maximal mount count reached, "
  605. "running e2fsck is recommendedn");
  606. else if (le32_to_cpu(es->s_checkinterval) &&
  607. (le32_to_cpu(es->s_lastcheck) +
  608. le32_to_cpu(es->s_checkinterval) <= CURRENT_TIME))
  609. printk (KERN_WARNING
  610. "EXT3-fs warning: checktime reached, "
  611. "running e2fsck is recommendedn");
  612. #if 0
  613. /* @@@ We _will_ want to clear the valid bit if we find
  614.                    inconsistencies, to force a fsck at reboot.  But for
  615.                    a plain journaled filesystem we can keep it set as
  616.                    valid forever! :) */
  617. es->s_state = cpu_to_le16(le16_to_cpu(es->s_state) & ~EXT3_VALID_FS);
  618. #endif
  619. if (!(__s16) le16_to_cpu(es->s_max_mnt_count))
  620. es->s_max_mnt_count =
  621. (__s16) cpu_to_le16(EXT3_DFL_MAX_MNT_COUNT);
  622. es->s_mnt_count=cpu_to_le16(le16_to_cpu(es->s_mnt_count) + 1);
  623. es->s_mtime = cpu_to_le32(CURRENT_TIME);
  624. ext3_update_dynamic_rev(sb);
  625. EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
  626. ext3_commit_super (sb, es, 1);
  627. if (test_opt (sb, DEBUG))
  628. printk (KERN_INFO
  629. "[EXT3 FS %s, %s, bs=%lu, gc=%lu, "
  630. "bpg=%lu, ipg=%lu, mo=%04lx]n",
  631. EXT3FS_VERSION, EXT3FS_DATE, sb->s_blocksize,
  632. sbi->s_groups_count,
  633. EXT3_BLOCKS_PER_GROUP(sb),
  634. EXT3_INODES_PER_GROUP(sb),
  635. sbi->s_mount_opt);
  636. printk(KERN_INFO "EXT3 FS " EXT3FS_VERSION ", " EXT3FS_DATE " on %s, ",
  637. bdevname(sb->s_dev));
  638. if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
  639. printk("external journal on %sn",
  640. bdevname(EXT3_SB(sb)->s_journal->j_dev));
  641. } else {
  642. printk("internal journaln");
  643. }
  644. #ifdef CONFIG_EXT3_CHECK
  645. if (test_opt (sb, CHECK)) {
  646. ext3_check_blocks_bitmap (sb);
  647. ext3_check_inodes_bitmap (sb);
  648. }
  649. #endif
  650. setup_ro_after(sb);
  651. return res;
  652. }
  653. static int ext3_check_descriptors (struct super_block * sb)
  654. {
  655. struct ext3_sb_info *sbi = EXT3_SB(sb);
  656. unsigned long block = le32_to_cpu(sbi->s_es->s_first_data_block);
  657. struct ext3_group_desc * gdp = NULL;
  658. int desc_block = 0;
  659. int i;
  660. ext3_debug ("Checking group descriptors");
  661. for (i = 0; i < sbi->s_groups_count; i++)
  662. {
  663. if ((i % EXT3_DESC_PER_BLOCK(sb)) == 0)
  664. gdp = (struct ext3_group_desc *)
  665. sbi->s_group_desc[desc_block++]->b_data;
  666. if (le32_to_cpu(gdp->bg_block_bitmap) < block ||
  667.     le32_to_cpu(gdp->bg_block_bitmap) >=
  668. block + EXT3_BLOCKS_PER_GROUP(sb))
  669. {
  670. ext3_error (sb, "ext3_check_descriptors",
  671.     "Block bitmap for group %d"
  672.     " not in group (block %lu)!",
  673.     i, (unsigned long)
  674. le32_to_cpu(gdp->bg_block_bitmap));
  675. return 0;
  676. }
  677. if (le32_to_cpu(gdp->bg_inode_bitmap) < block ||
  678.     le32_to_cpu(gdp->bg_inode_bitmap) >=
  679. block + EXT3_BLOCKS_PER_GROUP(sb))
  680. {
  681. ext3_error (sb, "ext3_check_descriptors",
  682.     "Inode bitmap for group %d"
  683.     " not in group (block %lu)!",
  684.     i, (unsigned long)
  685. le32_to_cpu(gdp->bg_inode_bitmap));
  686. return 0;
  687. }
  688. if (le32_to_cpu(gdp->bg_inode_table) < block ||
  689.     le32_to_cpu(gdp->bg_inode_table) + sbi->s_itb_per_group >=
  690.     block + EXT3_BLOCKS_PER_GROUP(sb))
  691. {
  692. ext3_error (sb, "ext3_check_descriptors",
  693.     "Inode table for group %d"
  694.     " not in group (block %lu)!",
  695.     i, (unsigned long)
  696. le32_to_cpu(gdp->bg_inode_table));
  697. return 0;
  698. }
  699. block += EXT3_BLOCKS_PER_GROUP(sb);
  700. gdp++;
  701. }
  702. return 1;
  703. }
  704. /* ext3_orphan_cleanup() walks a singly-linked list of inodes (starting at
  705.  * the superblock) which were deleted from all directories, but held open by
  706.  * a process at the time of a crash.  We walk the list and try to delete these
  707.  * inodes at recovery time (only with a read-write filesystem).
  708.  *
  709.  * In order to keep the orphan inode chain consistent during traversal (in
  710.  * case of crash during recovery), we link each inode into the superblock
  711.  * orphan list_head and handle it the same way as an inode deletion during
  712.  * normal operation (which journals the operations for us).
  713.  *
  714.  * We only do an iget() and an iput() on each inode, which is very safe if we
  715.  * accidentally point at an in-use or already deleted inode.  The worst that
  716.  * can happen in this case is that we get a "bit already cleared" message from
  717.  * ext3_free_inode().  The only reason we would point at a wrong inode is if
  718.  * e2fsck was run on this filesystem, and it must have already done the orphan
  719.  * inode cleanup for us, so we can safely abort without any further action.
  720.  */
  721. static void ext3_orphan_cleanup (struct super_block * sb,
  722.  struct ext3_super_block * es)
  723. {
  724. unsigned int s_flags = sb->s_flags;
  725. int nr_orphans = 0, nr_truncates = 0;
  726. if (!es->s_last_orphan) {
  727. jbd_debug(4, "no orphan inodes to clean upn");
  728. return;
  729. }
  730. if (s_flags & MS_RDONLY) {
  731. printk(KERN_INFO "EXT3-fs: %s: orphan cleanup on readonly fsn",
  732.        bdevname(sb->s_dev));
  733. sb->s_flags &= ~MS_RDONLY;
  734. }
  735. if (sb->u.ext3_sb.s_mount_state & EXT3_ERROR_FS) {
  736. if (es->s_last_orphan)
  737. jbd_debug(1, "Errors on filesystem, "
  738.   "clearing orphan list.n");
  739. es->s_last_orphan = 0;
  740. jbd_debug(1, "Skipping orphan recovery on fs with errors.n");
  741. return;
  742. }
  743. while (es->s_last_orphan) {
  744. struct inode *inode;
  745. if (!(inode =
  746.       ext3_orphan_get(sb, le32_to_cpu(es->s_last_orphan)))) {
  747. es->s_last_orphan = 0;
  748. break;
  749. }
  750. list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
  751. if (inode->i_nlink) {
  752. printk(KERN_DEBUG __FUNCTION__
  753. ": truncating inode %ld to %Ld bytesn",
  754. inode->i_ino, inode->i_size);
  755. jbd_debug(2, "truncating inode %ld to %Ld bytesn",
  756.   inode->i_ino, inode->i_size);
  757. ext3_truncate(inode);
  758. nr_truncates++;
  759. } else {
  760. printk(KERN_DEBUG __FUNCTION__
  761. ": deleting unreferenced inode %ldn",
  762. inode->i_ino);
  763. jbd_debug(2, "deleting unreferenced inode %ldn",
  764.   inode->i_ino);
  765. nr_orphans++;
  766. }
  767. iput(inode);  /* The delete magic happens here! */
  768. }
  769. #define PLURAL(x) (x), ((x)==1) ? "" : "s"
  770. if (nr_orphans)
  771. printk(KERN_INFO "EXT3-fs: %s: %d orphan inode%s deletedn",
  772.        bdevname(sb->s_dev), PLURAL(nr_orphans));
  773. if (nr_truncates)
  774. printk(KERN_INFO "EXT3-fs: %s: %d truncate%s cleaned upn",
  775.        bdevname(sb->s_dev), PLURAL(nr_truncates));
  776. sb->s_flags = s_flags; /* Restore MS_RDONLY status */
  777. }
  778. #define log2(n) ffz(~(n))
  779. /*
  780.  * Maximal file size.  There is a direct, and {,double-,triple-}indirect
  781.  * block limit, and also a limit of (2^32 - 1) 512-byte sectors in i_blocks.
  782.  * We need to be 1 filesystem block less than the 2^32 sector limit.
  783.  */
  784. static loff_t ext3_max_size(int bits)
  785. {
  786. loff_t res = EXT3_NDIR_BLOCKS;
  787. res += 1LL << (bits-2);
  788. res += 1LL << (2*(bits-2));
  789. res += 1LL << (3*(bits-2));
  790. res <<= bits;
  791. if (res > (512LL << 32) - (1 << bits))
  792. res = (512LL << 32) - (1 << bits);
  793. return res;
  794. }
  795. struct super_block * ext3_read_super (struct super_block * sb, void * data,
  796.       int silent)
  797. {
  798. struct buffer_head * bh;
  799. struct ext3_super_block *es = 0;
  800. struct ext3_sb_info *sbi = EXT3_SB(sb);
  801. unsigned long sb_block = 1;
  802. unsigned long logic_sb_block = 1;
  803. unsigned long offset = 0;
  804. unsigned long journal_inum = 0;
  805. kdev_t dev = sb->s_dev;
  806. int blocksize;
  807. int hblock;
  808. int db_count;
  809. int i;
  810. int needs_recovery;
  811. #ifdef CONFIG_JBD_DEBUG
  812. ext3_ro_after = 0;
  813. #endif
  814. /*
  815.  * See what the current blocksize for the device is, and
  816.  * use that as the blocksize.  Otherwise (or if the blocksize
  817.  * is smaller than the default) use the default.
  818.  * This is important for devices that have a hardware
  819.  * sectorsize that is larger than the default.
  820.  */
  821. blocksize = EXT3_MIN_BLOCK_SIZE;
  822. hblock = get_hardsect_size(dev);
  823. if (blocksize < hblock)
  824. blocksize = hblock;
  825. sbi->s_mount_opt = 0;
  826. sbi->s_resuid = EXT3_DEF_RESUID;
  827. sbi->s_resgid = EXT3_DEF_RESGID;
  828. if (!parse_options ((char *) data, &sb_block, sbi, &journal_inum, 0)) {
  829. sb->s_dev = 0;
  830. goto out_fail;
  831. }
  832. sb->s_blocksize = blocksize;
  833. set_blocksize (dev, blocksize);
  834. /*
  835.  * The ext3 superblock will not be buffer aligned for other than 1kB
  836.  * block sizes.  We need to calculate the offset from buffer start.
  837.  */
  838. if (blocksize != EXT3_MIN_BLOCK_SIZE) {
  839. logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize;
  840. offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize;
  841. }
  842. if (!(bh = sb_bread(sb, logic_sb_block))) {
  843. printk (KERN_ERR "EXT3-fs: unable to read superblockn");
  844. goto out_fail;
  845. }
  846. /*
  847.  * Note: s_es must be initialized as soon as possible because
  848.  *       some ext3 macro-instructions depend on its value
  849.  */
  850. es = (struct ext3_super_block *) (((char *)bh->b_data) + offset);
  851. sbi->s_es = es;
  852. sb->s_magic = le16_to_cpu(es->s_magic);
  853. if (sb->s_magic != EXT3_SUPER_MAGIC) {
  854. if (!silent)
  855. printk(KERN_ERR 
  856.        "VFS: Can't find ext3 filesystem on dev %s.n",
  857.        bdevname(dev));
  858. goto failed_mount;
  859. }
  860. if (le32_to_cpu(es->s_rev_level) == EXT3_GOOD_OLD_REV &&
  861.     (EXT3_HAS_COMPAT_FEATURE(sb, ~0U) ||
  862.      EXT3_HAS_RO_COMPAT_FEATURE(sb, ~0U) ||
  863.      EXT3_HAS_INCOMPAT_FEATURE(sb, ~0U)))
  864. printk(KERN_WARNING 
  865.        "EXT3-fs warning: feature flags set on rev 0 fs, "
  866.        "running e2fsck is recommendedn");
  867. /*
  868.  * Check feature flags regardless of the revision level, since we
  869.  * previously didn't change the revision level when setting the flags,
  870.  * so there is a chance incompat flags are set on a rev 0 filesystem.
  871.  */
  872. if ((i = EXT3_HAS_INCOMPAT_FEATURE(sb, ~EXT3_FEATURE_INCOMPAT_SUPP))) {
  873. printk(KERN_ERR "EXT3-fs: %s: couldn't mount because of "
  874.        "unsupported optional features (%x).n",
  875.        bdevname(dev), i);
  876. goto failed_mount;
  877. }
  878. if (!(sb->s_flags & MS_RDONLY) &&
  879.     (i = EXT3_HAS_RO_COMPAT_FEATURE(sb, ~EXT3_FEATURE_RO_COMPAT_SUPP))){
  880. printk(KERN_ERR "EXT3-fs: %s: couldn't mount RDWR because of "
  881.        "unsupported optional features (%x).n",
  882.        bdevname(dev), i);
  883. goto failed_mount;
  884. }
  885. sb->s_blocksize_bits = le32_to_cpu(es->s_log_block_size) + 10;
  886. sb->s_blocksize = 1 << sb->s_blocksize_bits;
  887. if (sb->s_blocksize < EXT3_MIN_BLOCK_SIZE ||
  888.     sb->s_blocksize > EXT3_MAX_BLOCK_SIZE) {
  889. printk(KERN_ERR 
  890.        "EXT3-fs: Unsupported filesystem blocksize %d on %s.n",
  891.        blocksize, bdevname(dev));
  892. goto failed_mount;
  893. }
  894. sb->s_maxbytes = ext3_max_size(sb->s_blocksize_bits);
  895. if (sb->s_blocksize != blocksize) {
  896. blocksize = sb->s_blocksize;
  897. /*
  898.  * Make sure the blocksize for the filesystem is larger
  899.  * than the hardware sectorsize for the machine.
  900.  */
  901. if (sb->s_blocksize < hblock) {
  902. printk(KERN_ERR "EXT3-fs: blocksize %d too small for "
  903.        "device blocksize %d.n", blocksize, hblock);
  904. goto failed_mount;
  905. }
  906. brelse (bh);
  907. set_blocksize (dev, sb->s_blocksize);
  908. logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize;
  909. offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize;
  910. bh = sb_bread(sb, logic_sb_block);
  911. if (!bh) {
  912. printk(KERN_ERR 
  913.        "EXT3-fs: Can't read superblock on 2nd try.n");
  914. return NULL;
  915. }
  916. es = (struct ext3_super_block *)(((char *)bh->b_data) + offset);
  917. sbi->s_es = es;
  918. if (es->s_magic != le16_to_cpu(EXT3_SUPER_MAGIC)) {
  919. printk (KERN_ERR 
  920. "EXT3-fs: Magic mismatch, very weird !n");
  921. goto failed_mount;
  922. }
  923. }
  924. if (le32_to_cpu(es->s_rev_level) == EXT3_GOOD_OLD_REV) {
  925. sbi->s_inode_size = EXT3_GOOD_OLD_INODE_SIZE;
  926. sbi->s_first_ino = EXT3_GOOD_OLD_FIRST_INO;
  927. } else {
  928. sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
  929. sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
  930. if (sbi->s_inode_size != EXT3_GOOD_OLD_INODE_SIZE) {
  931. printk (KERN_ERR
  932. "EXT3-fs: unsupported inode size: %dn",
  933. sbi->s_inode_size);
  934. goto failed_mount;
  935. }
  936. }
  937. sbi->s_frag_size = EXT3_MIN_FRAG_SIZE <<
  938.    le32_to_cpu(es->s_log_frag_size);
  939. if (blocksize != sbi->s_frag_size) {
  940. printk(KERN_ERR
  941.        "EXT3-fs: fragsize %lu != blocksize %u (unsupported)n",
  942.        sbi->s_frag_size, blocksize);
  943. goto failed_mount;
  944. }
  945. sbi->s_frags_per_block = 1;
  946. sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
  947. sbi->s_frags_per_group = le32_to_cpu(es->s_frags_per_group);
  948. sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
  949. sbi->s_inodes_per_block = blocksize / EXT3_INODE_SIZE(sb);
  950. sbi->s_itb_per_group = sbi->s_inodes_per_group /sbi->s_inodes_per_block;
  951. sbi->s_desc_per_block = blocksize / sizeof(struct ext3_group_desc);
  952. sbi->s_sbh = bh;
  953. if (sbi->s_resuid == EXT3_DEF_RESUID)
  954. sbi->s_resuid = le16_to_cpu(es->s_def_resuid);
  955. if (sbi->s_resgid == EXT3_DEF_RESGID)
  956. sbi->s_resgid = le16_to_cpu(es->s_def_resgid);
  957. sbi->s_mount_state = le16_to_cpu(es->s_state);
  958. sbi->s_addr_per_block_bits = log2(EXT3_ADDR_PER_BLOCK(sb));
  959. sbi->s_desc_per_block_bits = log2(EXT3_DESC_PER_BLOCK(sb));
  960. if (sbi->s_blocks_per_group > blocksize * 8) {
  961. printk (KERN_ERR
  962. "EXT3-fs: #blocks per group too big: %lun",
  963. sbi->s_blocks_per_group);
  964. goto failed_mount;
  965. }
  966. if (sbi->s_frags_per_group > blocksize * 8) {
  967. printk (KERN_ERR
  968. "EXT3-fs: #fragments per group too big: %lun",
  969. sbi->s_frags_per_group);
  970. goto failed_mount;
  971. }
  972. if (sbi->s_inodes_per_group > blocksize * 8) {
  973. printk (KERN_ERR
  974. "EXT3-fs: #inodes per group too big: %lun",
  975. sbi->s_inodes_per_group);
  976. goto failed_mount;
  977. }
  978. sbi->s_groups_count = (le32_to_cpu(es->s_blocks_count) -
  979.        le32_to_cpu(es->s_first_data_block) +
  980.        EXT3_BLOCKS_PER_GROUP(sb) - 1) /
  981.       EXT3_BLOCKS_PER_GROUP(sb);
  982. db_count = (sbi->s_groups_count + EXT3_DESC_PER_BLOCK(sb) - 1) /
  983.    EXT3_DESC_PER_BLOCK(sb);
  984. sbi->s_group_desc = kmalloc(db_count * sizeof (struct buffer_head *),
  985.     GFP_KERNEL);
  986. if (sbi->s_group_desc == NULL) {
  987. printk (KERN_ERR "EXT3-fs: not enough memoryn");
  988. goto failed_mount;
  989. }
  990. for (i = 0; i < db_count; i++) {
  991. sbi->s_group_desc[i] = sb_bread(sb, logic_sb_block + i + 1);
  992. if (!sbi->s_group_desc[i]) {
  993. printk (KERN_ERR "EXT3-fs: "
  994. "can't read group descriptor %dn", i);
  995. db_count = i;
  996. goto failed_mount2;
  997. }
  998. }
  999. if (!ext3_check_descriptors (sb)) {
  1000. printk (KERN_ERR "EXT3-fs: group descriptors corrupted !n");
  1001. goto failed_mount2;
  1002. }
  1003. for (i = 0; i < EXT3_MAX_GROUP_LOADED; i++) {
  1004. sbi->s_inode_bitmap_number[i] = 0;
  1005. sbi->s_inode_bitmap[i] = NULL;
  1006. sbi->s_block_bitmap_number[i] = 0;
  1007. sbi->s_block_bitmap[i] = NULL;
  1008. }
  1009. sbi->s_loaded_inode_bitmaps = 0;
  1010. sbi->s_loaded_block_bitmaps = 0;
  1011. sbi->s_gdb_count = db_count;
  1012. get_random_bytes(&sbi->s_next_generation, sizeof(u32));
  1013. /*
  1014.  * set up enough so that it can read an inode
  1015.  */
  1016. sb->s_op = &ext3_sops;
  1017. INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
  1018. sb->s_root = 0;
  1019. needs_recovery = (es->s_last_orphan != 0 ||
  1020.   EXT3_HAS_INCOMPAT_FEATURE(sb,
  1021.     EXT3_FEATURE_INCOMPAT_RECOVER));
  1022. /*
  1023.  * The first inode we look at is the journal inode.  Don't try
  1024.  * root first: it may be modified in the journal!
  1025.  */
  1026. if (!test_opt(sb, NOLOAD) &&
  1027.     EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
  1028. if (ext3_load_journal(sb, es))
  1029. goto failed_mount2;
  1030. } else if (journal_inum) {
  1031. if (ext3_create_journal(sb, es, journal_inum))
  1032. goto failed_mount2;
  1033. } else {
  1034. if (!silent)
  1035. printk (KERN_ERR
  1036. "ext3: No journal on filesystem on %sn",
  1037. bdevname(dev));
  1038. goto failed_mount2;
  1039. }
  1040. /* We have now updated the journal if required, so we can
  1041.  * validate the data journaling mode. */
  1042. switch (test_opt(sb, DATA_FLAGS)) {
  1043. case 0:
  1044. /* No mode set, assume a default based on the journal
  1045.                    capabilities: ORDERED_DATA if the journal can
  1046.                    cope, else JOURNAL_DATA */
  1047. if (journal_check_available_features
  1048.     (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE))
  1049. set_opt(sbi->s_mount_opt, ORDERED_DATA);
  1050. else
  1051. set_opt(sbi->s_mount_opt, JOURNAL_DATA);
  1052. break;
  1053. case EXT3_MOUNT_ORDERED_DATA:
  1054. case EXT3_MOUNT_WRITEBACK_DATA:
  1055. if (!journal_check_available_features
  1056.     (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE)) {
  1057. printk(KERN_ERR "EXT3-fs: Journal does not support "
  1058.        "requested data journaling moden");
  1059. goto failed_mount3;
  1060. }
  1061. default:
  1062. break;
  1063. }
  1064. /*
  1065.  * The journal_load will have done any necessary log recovery,
  1066.  * so we can safely mount the rest of the filesystem now.
  1067.  */
  1068. sb->s_root = d_alloc_root(iget(sb, EXT3_ROOT_INO));
  1069. if (!sb->s_root || !S_ISDIR(sb->s_root->d_inode->i_mode) ||
  1070.     !sb->s_root->d_inode->i_blocks || !sb->s_root->d_inode->i_size) {
  1071. if (sb->s_root) {
  1072. dput(sb->s_root);
  1073. sb->s_root = NULL;
  1074. printk(KERN_ERR
  1075.        "EXT3-fs: corrupt root inode, run e2fsckn");
  1076. } else
  1077. printk(KERN_ERR "EXT3-fs: get root inode failedn");
  1078. goto failed_mount3;
  1079. }
  1080. ext3_setup_super (sb, es, sb->s_flags & MS_RDONLY);
  1081. /*
  1082.  * akpm: core read_super() calls in here with the superblock locked.
  1083.  * That deadlocks, because orphan cleanup needs to lock the superblock
  1084.  * in numerous places.  Here we just pop the lock - it's relatively
  1085.  * harmless, because we are now ready to accept write_super() requests,
  1086.  * and aviro says that's the only reason for hanging onto the
  1087.  * superblock lock.
  1088.  */
  1089. EXT3_SB(sb)->s_mount_state |= EXT3_ORPHAN_FS;
  1090. unlock_super(sb); /* akpm: sigh */
  1091. ext3_orphan_cleanup(sb, es);
  1092. lock_super(sb);
  1093. EXT3_SB(sb)->s_mount_state &= ~EXT3_ORPHAN_FS;
  1094. if (needs_recovery)
  1095. printk (KERN_INFO "EXT3-fs: recovery complete.n");
  1096. ext3_mark_recovery_complete(sb, es);
  1097. printk (KERN_INFO "EXT3-fs: mounted filesystem with %s data mode.n",
  1098. test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA ? "journal":
  1099. test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
  1100. "writeback");
  1101. return sb;
  1102. failed_mount3:
  1103. journal_destroy(sbi->s_journal);
  1104. failed_mount2:
  1105. for (i = 0; i < db_count; i++)
  1106. brelse(sbi->s_group_desc[i]);
  1107. kfree(sbi->s_group_desc);
  1108. failed_mount:
  1109. ext3_blkdev_remove(sbi);
  1110. brelse(bh);
  1111. out_fail:
  1112. return NULL;
  1113. }
  1114. static journal_t *ext3_get_journal(struct super_block *sb, int journal_inum)
  1115. {
  1116. struct inode *journal_inode;
  1117. journal_t *journal;
  1118. /* First, test for the existence of a valid inode on disk.  Bad
  1119.  * things happen if we iget() an unused inode, as the subsequent
  1120.  * iput() will try to delete it. */
  1121. journal_inode = iget(sb, journal_inum);
  1122. if (!journal_inode) {
  1123. printk(KERN_ERR "EXT3-fs: no journal found.n");
  1124. return NULL;
  1125. }
  1126. if (!journal_inode->i_nlink) {
  1127. make_bad_inode(journal_inode);
  1128. iput(journal_inode);
  1129. printk(KERN_ERR "EXT3-fs: journal inode is deleted.n");
  1130. return NULL;
  1131. }
  1132. jbd_debug(2, "Journal inode found at %p: %Ld bytesn",
  1133.   journal_inode, journal_inode->i_size);
  1134. if (is_bad_inode(journal_inode) || !S_ISREG(journal_inode->i_mode)) {
  1135. printk(KERN_ERR "EXT3-fs: invalid journal inode.n");
  1136. iput(journal_inode);
  1137. return NULL;
  1138. }
  1139. journal = journal_init_inode(journal_inode);
  1140. if (!journal) {
  1141. printk(KERN_ERR "EXT3-fs: Could not load journal inoden");
  1142. iput(journal_inode);
  1143. }
  1144. return journal;
  1145. }
  1146. static journal_t *ext3_get_dev_journal(struct super_block *sb,
  1147.        int dev)
  1148. {
  1149. struct buffer_head * bh;
  1150. journal_t *journal;
  1151. int start;
  1152. int len;
  1153. int hblock, blocksize;
  1154. unsigned long sb_block;
  1155. unsigned long offset;
  1156. kdev_t journal_dev = to_kdev_t(dev);
  1157. struct ext3_super_block * es;
  1158. struct block_device *bdev;
  1159. bdev = ext3_blkdev_get(journal_dev);
  1160. if (bdev == NULL)
  1161. return NULL;
  1162. blocksize = sb->s_blocksize;
  1163. hblock = get_hardsect_size(journal_dev);
  1164. if (blocksize < hblock) {
  1165. printk(KERN_ERR
  1166. "EXT3-fs: blocksize too small for journal device.n");
  1167. goto out_bdev;
  1168. }
  1169. sb_block = EXT3_MIN_BLOCK_SIZE / blocksize;
  1170. offset = EXT3_MIN_BLOCK_SIZE % blocksize;
  1171. set_blocksize(dev, blocksize);
  1172. if (!(bh = bread(dev, sb_block, blocksize))) {
  1173. printk(KERN_ERR "EXT3-fs: couldn't read superblock of "
  1174.        "external journaln");
  1175. goto out_bdev;
  1176. }
  1177. es = (struct ext3_super_block *) (((char *)bh->b_data) + offset);
  1178. if ((le16_to_cpu(es->s_magic) != EXT3_SUPER_MAGIC) ||
  1179.     !(le32_to_cpu(es->s_feature_incompat) &
  1180.       EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) {
  1181. printk(KERN_ERR "EXT3-fs: external journal has "
  1182. "bad superblockn");
  1183. brelse(bh);
  1184. goto out_bdev;
  1185. }
  1186. if (memcmp(EXT3_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) {
  1187. printk(KERN_ERR "EXT3-fs: journal UUID does not matchn");
  1188. brelse(bh);
  1189. goto out_bdev;
  1190. }
  1191. len = le32_to_cpu(es->s_blocks_count);
  1192. start = sb_block + 1;
  1193. brelse(bh); /* we're done with the superblock */
  1194. journal = journal_init_dev(journal_dev, sb->s_dev, 
  1195. start, len, blocksize);
  1196. if (!journal) {
  1197. printk(KERN_ERR "EXT3-fs: failed to create device journaln");
  1198. goto out_bdev;
  1199. }
  1200. ll_rw_block(READ, 1, &journal->j_sb_buffer);
  1201. wait_on_buffer(journal->j_sb_buffer);
  1202. if (!buffer_uptodate(journal->j_sb_buffer)) {
  1203. printk(KERN_ERR "EXT3-fs: I/O error on journal devicen");
  1204. goto out_journal;
  1205. }
  1206. if (ntohl(journal->j_superblock->s_nr_users) != 1) {
  1207. printk(KERN_ERR "EXT3-fs: External journal has more than one "
  1208. "user (unsupported) - %dn",
  1209. ntohl(journal->j_superblock->s_nr_users));
  1210. goto out_journal;
  1211. }
  1212. EXT3_SB(sb)->journal_bdev = bdev;
  1213. return journal;
  1214. out_journal:
  1215. journal_destroy(journal);
  1216. out_bdev:
  1217. ext3_blkdev_put(bdev);
  1218. return NULL;
  1219. }
  1220. static int ext3_load_journal(struct super_block * sb,
  1221.      struct ext3_super_block * es)
  1222. {
  1223. journal_t *journal;
  1224. int journal_inum = le32_to_cpu(es->s_journal_inum);
  1225. int journal_dev = le32_to_cpu(es->s_journal_dev);
  1226. int err = 0;
  1227. int really_read_only;
  1228. really_read_only = is_read_only(sb->s_dev);
  1229. /*
  1230.  * Are we loading a blank journal or performing recovery after a
  1231.  * crash?  For recovery, we need to check in advance whether we
  1232.  * can get read-write access to the device.
  1233.  */
  1234. if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER)) {
  1235. if (sb->s_flags & MS_RDONLY) {
  1236. printk(KERN_INFO "EXT3-fs: INFO: recovery "
  1237. "required on readonly filesystem.n");
  1238. if (really_read_only) {
  1239. printk(KERN_ERR "EXT3-fs: write access "
  1240. "unavailable, cannot proceed.n");
  1241. return -EROFS;
  1242. }
  1243. printk (KERN_INFO "EXT3-fs: write access will "
  1244. "be enabled during recovery.n");
  1245. }
  1246. }
  1247. if (journal_inum && journal_dev) {
  1248. printk(KERN_ERR "EXT3-fs: filesystem has both journal "
  1249.        "and inode journals!n");
  1250. return -EINVAL;
  1251. }
  1252. if (journal_inum) {
  1253. if (!(journal = ext3_get_journal(sb, journal_inum)))
  1254. return -EINVAL;
  1255. } else {
  1256. if (!(journal = ext3_get_dev_journal(sb, journal_dev)))
  1257. return -EINVAL;
  1258. }
  1259. if (!really_read_only && test_opt(sb, UPDATE_JOURNAL)) {
  1260. err = journal_update_format(journal);
  1261. if (err)  {
  1262. printk(KERN_ERR "EXT3-fs: error updating journal.n");
  1263. journal_destroy(journal);
  1264. return err;
  1265. }
  1266. }
  1267. if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER))
  1268. err = journal_wipe(journal, !really_read_only);
  1269. if (!err)
  1270. err = journal_load(journal);
  1271. if (err) {
  1272. printk(KERN_ERR "EXT3-fs: error loading journal.n");
  1273. journal_destroy(journal);
  1274. return err;
  1275. }
  1276. EXT3_SB(sb)->s_journal = journal;
  1277. ext3_clear_journal_err(sb, es);
  1278. return 0;
  1279. }
  1280. static int ext3_create_journal(struct super_block * sb,
  1281.        struct ext3_super_block * es,
  1282.        int journal_inum)
  1283. {
  1284. journal_t *journal;
  1285. if (sb->s_flags & MS_RDONLY) {
  1286. printk(KERN_ERR "EXT3-fs: readonly filesystem when trying to "
  1287. "create journal.n");
  1288. return -EROFS;
  1289. }
  1290. if (!(journal = ext3_get_journal(sb, journal_inum)))
  1291. return -EINVAL;
  1292. printk(KERN_INFO "EXT3-fs: creating new journal on inode %dn",
  1293.        journal_inum);
  1294. if (journal_create(journal)) {
  1295. printk(KERN_ERR "EXT3-fs: error creating journal.n");
  1296. journal_destroy(journal);
  1297. return -EIO;
  1298. }
  1299. EXT3_SB(sb)->s_journal = journal;
  1300. ext3_update_dynamic_rev(sb);
  1301. EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
  1302. EXT3_SET_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL);
  1303. es->s_journal_inum = cpu_to_le32(journal_inum);
  1304. sb->s_dirt = 1;
  1305. /* Make sure we flush the recovery flag to disk. */
  1306. ext3_commit_super(sb, es, 1);
  1307. return 0;
  1308. }
  1309. static void ext3_commit_super (struct super_block * sb,
  1310.        struct ext3_super_block * es,
  1311.        int sync)
  1312. {
  1313. es->s_wtime = cpu_to_le32(CURRENT_TIME);
  1314. BUFFER_TRACE(sb->u.ext3_sb.s_sbh, "marking dirty");
  1315. mark_buffer_dirty(sb->u.ext3_sb.s_sbh);
  1316. if (sync) {
  1317. ll_rw_block(WRITE, 1, &sb->u.ext3_sb.s_sbh);
  1318. wait_on_buffer(sb->u.ext3_sb.s_sbh);
  1319. }
  1320. }
  1321. /*
  1322.  * Have we just finished recovery?  If so, and if we are mounting (or
  1323.  * remounting) the filesystem readonly, then we will end up with a
  1324.  * consistent fs on disk.  Record that fact.
  1325.  */
  1326. static void ext3_mark_recovery_complete(struct super_block * sb,
  1327. struct ext3_super_block * es)
  1328. {
  1329. journal_flush(EXT3_SB(sb)->s_journal);
  1330. if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER) &&
  1331.     sb->s_flags & MS_RDONLY) {
  1332. EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
  1333. sb->s_dirt = 0;
  1334. ext3_commit_super(sb, es, 1);
  1335. }
  1336. }
  1337. /*
  1338.  * If we are mounting (or read-write remounting) a filesystem whose journal
  1339.  * has recorded an error from a previous lifetime, move that error to the
  1340.  * main filesystem now.
  1341.  */
  1342. static void ext3_clear_journal_err(struct super_block * sb,
  1343.    struct ext3_super_block * es)
  1344. {
  1345. journal_t *journal;
  1346. int j_errno;
  1347. const char *errstr;
  1348. journal = EXT3_SB(sb)->s_journal;
  1349. /*
  1350.  * Now check for any error status which may have been recorded in the
  1351.  * journal by a prior ext3_error() or ext3_abort()
  1352.  */
  1353. j_errno = journal_errno(journal);
  1354. if (j_errno) {
  1355. char nbuf[16];
  1356. errstr = ext3_decode_error(sb, j_errno, nbuf);
  1357. ext3_warning(sb, __FUNCTION__, "Filesystem error recorded "
  1358.      "from previous mount: %s", errstr);
  1359. ext3_warning(sb, __FUNCTION__, "Marking fs in need of "
  1360.      "filesystem check.");
  1361. sb->u.ext3_sb.s_mount_state |= EXT3_ERROR_FS;
  1362. es->s_state |= cpu_to_le16(EXT3_ERROR_FS);
  1363. ext3_commit_super (sb, es, 1);
  1364. journal_clear_err(journal);
  1365. }
  1366. }
  1367. /*
  1368.  * Force the running and committing transactions to commit,
  1369.  * and wait on the commit.
  1370.  */
  1371. int ext3_force_commit(struct super_block *sb)
  1372. {
  1373. journal_t *journal;
  1374. int ret;
  1375. if (sb->s_flags & MS_RDONLY)
  1376. return 0;
  1377. journal = EXT3_SB(sb)->s_journal;
  1378. sb->s_dirt = 0;
  1379. lock_kernel(); /* important: lock down j_running_transaction */
  1380. ret = ext3_journal_force_commit(journal);
  1381. unlock_kernel();
  1382. return ret;
  1383. }
  1384. /*
  1385.  * Ext3 always journals updates to the superblock itself, so we don't
  1386.  * have to propagate any other updates to the superblock on disk at this
  1387.  * point.  Just start an async writeback to get the buffers on their way
  1388.  * to the disk.
  1389.  *
  1390.  * This implicitly triggers the writebehind on sync().
  1391.  */
  1392. static int do_sync_supers = 0;
  1393. MODULE_PARM(do_sync_supers, "i");
  1394. MODULE_PARM_DESC(do_sync_supers, "Write superblocks synchronously");
  1395. void ext3_write_super (struct super_block * sb)
  1396. {
  1397. tid_t target;
  1398. if (down_trylock(&sb->s_lock) == 0)
  1399. BUG(); /* aviro detector */
  1400. sb->s_dirt = 0;
  1401. target = log_start_commit(EXT3_SB(sb)->s_journal, NULL);
  1402. if (do_sync_supers) {
  1403. unlock_super(sb);
  1404. log_wait_commit(EXT3_SB(sb)->s_journal, target);
  1405. lock_super(sb);
  1406. }
  1407. }
  1408. /*
  1409.  * LVM calls this function before a (read-only) snapshot is created.  This
  1410.  * gives us a chance to flush the journal completely and mark the fs clean.
  1411.  */
  1412. void ext3_write_super_lockfs(struct super_block *sb)
  1413. {
  1414. sb->s_dirt = 0;
  1415. lock_kernel(); /* 2.4.5 forgot to do this for us */
  1416. if (!(sb->s_flags & MS_RDONLY)) {
  1417. journal_t *journal = EXT3_SB(sb)->s_journal;
  1418. /* Now we set up the journal barrier. */
  1419. journal_lock_updates(journal);
  1420. journal_flush(journal);
  1421. /* Journal blocked and flushed, clear needs_recovery flag. */
  1422. EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
  1423. ext3_commit_super(sb, EXT3_SB(sb)->s_es, 1);
  1424. }
  1425. unlock_kernel();
  1426. }
  1427. /*
  1428.  * Called by LVM after the snapshot is done.  We need to reset the RECOVER
  1429.  * flag here, even though the filesystem is not technically dirty yet.
  1430.  */
  1431. void ext3_unlockfs(struct super_block *sb)
  1432. {
  1433. if (!(sb->s_flags & MS_RDONLY)) {
  1434. lock_kernel();
  1435. lock_super(sb);
  1436. /* Reser the needs_recovery flag before the fs is unlocked. */
  1437. EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
  1438. ext3_commit_super(sb, EXT3_SB(sb)->s_es, 1);
  1439. unlock_super(sb);
  1440. journal_unlock_updates(EXT3_SB(sb)->s_journal);
  1441. unlock_kernel();
  1442. }
  1443. }
  1444. int ext3_remount (struct super_block * sb, int * flags, char * data)
  1445. {
  1446. struct ext3_super_block * es;
  1447. struct ext3_sb_info *sbi = EXT3_SB(sb);
  1448. unsigned long tmp;
  1449. clear_ro_after(sb);
  1450. /*
  1451.  * Allow the "check" option to be passed as a remount option.
  1452.  */
  1453. if (!parse_options(data, &tmp, sbi, &tmp, 1))
  1454. return -EINVAL;
  1455. if (sbi->s_mount_opt & EXT3_MOUNT_ABORT)
  1456. ext3_abort(sb, __FUNCTION__, "Abort forced by user");
  1457. es = sbi->s_es;
  1458. if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY)) {
  1459. if (sbi->s_mount_opt & EXT3_MOUNT_ABORT)
  1460. return -EROFS;
  1461. if (*flags & MS_RDONLY) {
  1462. /*
  1463.  * First of all, the unconditional stuff we have to do
  1464.  * to disable replay of the journal when we next remount
  1465.  */
  1466. sb->s_flags |= MS_RDONLY;
  1467. /*
  1468.  * OK, test if we are remounting a valid rw partition
  1469.  * readonly, and if so set the rdonly flag and then
  1470.  * mark the partition as valid again.
  1471.  */
  1472. if (!(es->s_state & cpu_to_le16(EXT3_VALID_FS)) &&
  1473.     (sbi->s_mount_state & EXT3_VALID_FS))
  1474. es->s_state = cpu_to_le16(sbi->s_mount_state);
  1475. ext3_mark_recovery_complete(sb, es);
  1476. } else {
  1477. int ret;
  1478. if ((ret = EXT3_HAS_RO_COMPAT_FEATURE(sb,
  1479. ~EXT3_FEATURE_RO_COMPAT_SUPP))) {
  1480. printk(KERN_WARNING "EXT3-fs: %s: couldn't "
  1481.        "remount RDWR because of unsupported "
  1482.        "optional features (%x).n",
  1483.        bdevname(sb->s_dev), ret);
  1484. return -EROFS;
  1485. }
  1486. /*
  1487.  * Mounting a RDONLY partition read-write, so reread
  1488.  * and store the current valid flag.  (It may have
  1489.  * been changed by e2fsck since we originally mounted
  1490.  * the partition.)
  1491.  */
  1492. ext3_clear_journal_err(sb, es);
  1493. sbi->s_mount_state = le16_to_cpu(es->s_state);
  1494. if (!ext3_setup_super (sb, es, 0))
  1495. sb->s_flags &= ~MS_RDONLY;
  1496. }
  1497. }
  1498. setup_ro_after(sb);
  1499. return 0;
  1500. }
  1501. int ext3_statfs (struct super_block * sb, struct statfs * buf)
  1502. {
  1503. struct ext3_super_block *es = EXT3_SB(sb)->s_es;
  1504. unsigned long overhead;
  1505. int i;
  1506. if (test_opt (sb, MINIX_DF))
  1507. overhead = 0;
  1508. else {
  1509. /*
  1510.  * Compute the overhead (FS structures)
  1511.  */
  1512. /*
  1513.  * All of the blocks before first_data_block are
  1514.  * overhead
  1515.  */
  1516. overhead = le32_to_cpu(es->s_first_data_block);
  1517. /*
  1518.  * Add the overhead attributed to the superblock and
  1519.  * block group descriptors.  If the sparse superblocks
  1520.  * feature is turned on, then not all groups have this.
  1521.  */
  1522. for (i = 0; i < EXT3_SB(sb)->s_groups_count; i++)
  1523. overhead += ext3_bg_has_super(sb, i) +
  1524. ext3_bg_num_gdb(sb, i);
  1525. /*
  1526.  * Every block group has an inode bitmap, a block
  1527.  * bitmap, and an inode table.
  1528.  */
  1529. overhead += (EXT3_SB(sb)->s_groups_count *
  1530.      (2 + EXT3_SB(sb)->s_itb_per_group));
  1531. }
  1532. buf->f_type = EXT3_SUPER_MAGIC;
  1533. buf->f_bsize = sb->s_blocksize;
  1534. buf->f_blocks = le32_to_cpu(es->s_blocks_count) - overhead;
  1535. buf->f_bfree = ext3_count_free_blocks (sb);
  1536. buf->f_bavail = buf->f_bfree - le32_to_cpu(es->s_r_blocks_count);
  1537. if (buf->f_bfree < le32_to_cpu(es->s_r_blocks_count))
  1538. buf->f_bavail = 0;
  1539. buf->f_files = le32_to_cpu(es->s_inodes_count);
  1540. buf->f_ffree = ext3_count_free_inodes (sb);
  1541. buf->f_namelen = EXT3_NAME_LEN;
  1542. return 0;
  1543. }
  1544. static DECLARE_FSTYPE_DEV(ext3_fs_type, "ext3", ext3_read_super);
  1545. static int __init init_ext3_fs(void)
  1546. {
  1547.         return register_filesystem(&ext3_fs_type);
  1548. }
  1549. static void __exit exit_ext3_fs(void)
  1550. {
  1551. unregister_filesystem(&ext3_fs_type);
  1552. }
  1553. EXPORT_NO_SYMBOLS;
  1554. MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
  1555. MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
  1556. MODULE_LICENSE("GPL");
  1557. module_init(init_ext3_fs)
  1558. module_exit(exit_ext3_fs)