diff options
Diffstat (limited to 'fs/jbd/journal.c')
-rw-r--r-- | fs/jbd/journal.c | 74 |
1 files changed, 34 insertions, 40 deletions
diff --git a/fs/jbd/journal.c b/fs/jbd/journal.c index f66724ce443a..2fc66c3e6681 100644 --- a/fs/jbd/journal.c +++ b/fs/jbd/journal.c | |||
@@ -181,7 +181,7 @@ loop: | |||
181 | transaction->t_expires)) | 181 | transaction->t_expires)) |
182 | should_sleep = 0; | 182 | should_sleep = 0; |
183 | if (journal->j_flags & JFS_UNMOUNT) | 183 | if (journal->j_flags & JFS_UNMOUNT) |
184 | should_sleep = 0; | 184 | should_sleep = 0; |
185 | if (should_sleep) { | 185 | if (should_sleep) { |
186 | spin_unlock(&journal->j_state_lock); | 186 | spin_unlock(&journal->j_state_lock); |
187 | schedule(); | 187 | schedule(); |
@@ -271,7 +271,7 @@ static void journal_kill_thread(journal_t *journal) | |||
271 | int journal_write_metadata_buffer(transaction_t *transaction, | 271 | int journal_write_metadata_buffer(transaction_t *transaction, |
272 | struct journal_head *jh_in, | 272 | struct journal_head *jh_in, |
273 | struct journal_head **jh_out, | 273 | struct journal_head **jh_out, |
274 | int blocknr) | 274 | unsigned long blocknr) |
275 | { | 275 | { |
276 | int need_copy_out = 0; | 276 | int need_copy_out = 0; |
277 | int done_copy_out = 0; | 277 | int done_copy_out = 0; |
@@ -578,7 +578,7 @@ int journal_next_log_block(journal_t *journal, unsigned long *retp) | |||
578 | * this is a no-op. If needed, we can use j_blk_offset - everything is | 578 | * this is a no-op. If needed, we can use j_blk_offset - everything is |
579 | * ready. | 579 | * ready. |
580 | */ | 580 | */ |
581 | int journal_bmap(journal_t *journal, unsigned long blocknr, | 581 | int journal_bmap(journal_t *journal, unsigned long blocknr, |
582 | unsigned long *retp) | 582 | unsigned long *retp) |
583 | { | 583 | { |
584 | int err = 0; | 584 | int err = 0; |
@@ -696,13 +696,13 @@ fail: | |||
696 | * @bdev: Block device on which to create the journal | 696 | * @bdev: Block device on which to create the journal |
697 | * @fs_dev: Device which hold journalled filesystem for this journal. | 697 | * @fs_dev: Device which hold journalled filesystem for this journal. |
698 | * @start: Block nr Start of journal. | 698 | * @start: Block nr Start of journal. |
699 | * @len: Lenght of the journal in blocks. | 699 | * @len: Length of the journal in blocks. |
700 | * @blocksize: blocksize of journalling device | 700 | * @blocksize: blocksize of journalling device |
701 | * @returns: a newly created journal_t * | 701 | * @returns: a newly created journal_t * |
702 | * | 702 | * |
703 | * journal_init_dev creates a journal which maps a fixed contiguous | 703 | * journal_init_dev creates a journal which maps a fixed contiguous |
704 | * range of blocks on an arbitrary block device. | 704 | * range of blocks on an arbitrary block device. |
705 | * | 705 | * |
706 | */ | 706 | */ |
707 | journal_t * journal_init_dev(struct block_device *bdev, | 707 | journal_t * journal_init_dev(struct block_device *bdev, |
708 | struct block_device *fs_dev, | 708 | struct block_device *fs_dev, |
@@ -739,11 +739,11 @@ journal_t * journal_init_dev(struct block_device *bdev, | |||
739 | 739 | ||
740 | return journal; | 740 | return journal; |
741 | } | 741 | } |
742 | 742 | ||
743 | /** | 743 | /** |
744 | * journal_t * journal_init_inode () - creates a journal which maps to a inode. | 744 | * journal_t * journal_init_inode () - creates a journal which maps to a inode. |
745 | * @inode: An inode to create the journal in | 745 | * @inode: An inode to create the journal in |
746 | * | 746 | * |
747 | * journal_init_inode creates a journal which maps an on-disk inode as | 747 | * journal_init_inode creates a journal which maps an on-disk inode as |
748 | * the journal. The inode must exist already, must support bmap() and | 748 | * the journal. The inode must exist already, must support bmap() and |
749 | * must have all data blocks preallocated. | 749 | * must have all data blocks preallocated. |
@@ -763,7 +763,7 @@ journal_t * journal_init_inode (struct inode *inode) | |||
763 | journal->j_inode = inode; | 763 | journal->j_inode = inode; |
764 | jbd_debug(1, | 764 | jbd_debug(1, |
765 | "journal %p: inode %s/%ld, size %Ld, bits %d, blksize %ld\n", | 765 | "journal %p: inode %s/%ld, size %Ld, bits %d, blksize %ld\n", |
766 | journal, inode->i_sb->s_id, inode->i_ino, | 766 | journal, inode->i_sb->s_id, inode->i_ino, |
767 | (long long) inode->i_size, | 767 | (long long) inode->i_size, |
768 | inode->i_sb->s_blocksize_bits, inode->i_sb->s_blocksize); | 768 | inode->i_sb->s_blocksize_bits, inode->i_sb->s_blocksize); |
769 | 769 | ||
@@ -798,10 +798,10 @@ journal_t * journal_init_inode (struct inode *inode) | |||
798 | return journal; | 798 | return journal; |
799 | } | 799 | } |
800 | 800 | ||
801 | /* | 801 | /* |
802 | * If the journal init or create aborts, we need to mark the journal | 802 | * If the journal init or create aborts, we need to mark the journal |
803 | * superblock as being NULL to prevent the journal destroy from writing | 803 | * superblock as being NULL to prevent the journal destroy from writing |
804 | * back a bogus superblock. | 804 | * back a bogus superblock. |
805 | */ | 805 | */ |
806 | static void journal_fail_superblock (journal_t *journal) | 806 | static void journal_fail_superblock (journal_t *journal) |
807 | { | 807 | { |
@@ -820,7 +820,7 @@ static void journal_fail_superblock (journal_t *journal) | |||
820 | static int journal_reset(journal_t *journal) | 820 | static int journal_reset(journal_t *journal) |
821 | { | 821 | { |
822 | journal_superblock_t *sb = journal->j_superblock; | 822 | journal_superblock_t *sb = journal->j_superblock; |
823 | unsigned int first, last; | 823 | unsigned long first, last; |
824 | 824 | ||
825 | first = be32_to_cpu(sb->s_first); | 825 | first = be32_to_cpu(sb->s_first); |
826 | last = be32_to_cpu(sb->s_maxlen); | 826 | last = be32_to_cpu(sb->s_maxlen); |
@@ -844,13 +844,13 @@ static int journal_reset(journal_t *journal) | |||
844 | return 0; | 844 | return 0; |
845 | } | 845 | } |
846 | 846 | ||
847 | /** | 847 | /** |
848 | * int journal_create() - Initialise the new journal file | 848 | * int journal_create() - Initialise the new journal file |
849 | * @journal: Journal to create. This structure must have been initialised | 849 | * @journal: Journal to create. This structure must have been initialised |
850 | * | 850 | * |
851 | * Given a journal_t structure which tells us which disk blocks we can | 851 | * Given a journal_t structure which tells us which disk blocks we can |
852 | * use, create a new journal superblock and initialise all of the | 852 | * use, create a new journal superblock and initialise all of the |
853 | * journal fields from scratch. | 853 | * journal fields from scratch. |
854 | **/ | 854 | **/ |
855 | int journal_create(journal_t *journal) | 855 | int journal_create(journal_t *journal) |
856 | { | 856 | { |
@@ -915,7 +915,7 @@ int journal_create(journal_t *journal) | |||
915 | return journal_reset(journal); | 915 | return journal_reset(journal); |
916 | } | 916 | } |
917 | 917 | ||
918 | /** | 918 | /** |
919 | * void journal_update_superblock() - Update journal sb on disk. | 919 | * void journal_update_superblock() - Update journal sb on disk. |
920 | * @journal: The journal to update. | 920 | * @journal: The journal to update. |
921 | * @wait: Set to '0' if you don't want to wait for IO completion. | 921 | * @wait: Set to '0' if you don't want to wait for IO completion. |
@@ -939,7 +939,7 @@ void journal_update_superblock(journal_t *journal, int wait) | |||
939 | journal->j_transaction_sequence) { | 939 | journal->j_transaction_sequence) { |
940 | jbd_debug(1,"JBD: Skipping superblock update on recovered sb " | 940 | jbd_debug(1,"JBD: Skipping superblock update on recovered sb " |
941 | "(start %ld, seq %d, errno %d)\n", | 941 | "(start %ld, seq %d, errno %d)\n", |
942 | journal->j_tail, journal->j_tail_sequence, | 942 | journal->j_tail, journal->j_tail_sequence, |
943 | journal->j_errno); | 943 | journal->j_errno); |
944 | goto out; | 944 | goto out; |
945 | } | 945 | } |
@@ -1062,7 +1062,7 @@ static int load_superblock(journal_t *journal) | |||
1062 | /** | 1062 | /** |
1063 | * int journal_load() - Read journal from disk. | 1063 | * int journal_load() - Read journal from disk. |
1064 | * @journal: Journal to act on. | 1064 | * @journal: Journal to act on. |
1065 | * | 1065 | * |
1066 | * Given a journal_t structure which tells us which disk blocks contain | 1066 | * Given a journal_t structure which tells us which disk blocks contain |
1067 | * a journal, read the journal from disk to initialise the in-memory | 1067 | * a journal, read the journal from disk to initialise the in-memory |
1068 | * structures. | 1068 | * structures. |
@@ -1094,7 +1094,7 @@ int journal_load(journal_t *journal) | |||
1094 | /* | 1094 | /* |
1095 | * Create a slab for this blocksize | 1095 | * Create a slab for this blocksize |
1096 | */ | 1096 | */ |
1097 | err = journal_create_jbd_slab(cpu_to_be32(sb->s_blocksize)); | 1097 | err = journal_create_jbd_slab(be32_to_cpu(sb->s_blocksize)); |
1098 | if (err) | 1098 | if (err) |
1099 | return err; | 1099 | return err; |
1100 | 1100 | ||
@@ -1172,9 +1172,9 @@ void journal_destroy(journal_t *journal) | |||
1172 | * @compat: bitmask of compatible features | 1172 | * @compat: bitmask of compatible features |
1173 | * @ro: bitmask of features that force read-only mount | 1173 | * @ro: bitmask of features that force read-only mount |
1174 | * @incompat: bitmask of incompatible features | 1174 | * @incompat: bitmask of incompatible features |
1175 | * | 1175 | * |
1176 | * Check whether the journal uses all of a given set of | 1176 | * Check whether the journal uses all of a given set of |
1177 | * features. Return true (non-zero) if it does. | 1177 | * features. Return true (non-zero) if it does. |
1178 | **/ | 1178 | **/ |
1179 | 1179 | ||
1180 | int journal_check_used_features (journal_t *journal, unsigned long compat, | 1180 | int journal_check_used_features (journal_t *journal, unsigned long compat, |
@@ -1203,7 +1203,7 @@ int journal_check_used_features (journal_t *journal, unsigned long compat, | |||
1203 | * @compat: bitmask of compatible features | 1203 | * @compat: bitmask of compatible features |
1204 | * @ro: bitmask of features that force read-only mount | 1204 | * @ro: bitmask of features that force read-only mount |
1205 | * @incompat: bitmask of incompatible features | 1205 | * @incompat: bitmask of incompatible features |
1206 | * | 1206 | * |
1207 | * Check whether the journaling code supports the use of | 1207 | * Check whether the journaling code supports the use of |
1208 | * all of a given set of features on this journal. Return true | 1208 | * all of a given set of features on this journal. Return true |
1209 | * (non-zero) if it can. */ | 1209 | * (non-zero) if it can. */ |
@@ -1241,7 +1241,7 @@ int journal_check_available_features (journal_t *journal, unsigned long compat, | |||
1241 | * @incompat: bitmask of incompatible features | 1241 | * @incompat: bitmask of incompatible features |
1242 | * | 1242 | * |
1243 | * Mark a given journal feature as present on the | 1243 | * Mark a given journal feature as present on the |
1244 | * superblock. Returns true if the requested features could be set. | 1244 | * superblock. Returns true if the requested features could be set. |
1245 | * | 1245 | * |
1246 | */ | 1246 | */ |
1247 | 1247 | ||
@@ -1327,7 +1327,7 @@ static int journal_convert_superblock_v1(journal_t *journal, | |||
1327 | /** | 1327 | /** |
1328 | * int journal_flush () - Flush journal | 1328 | * int journal_flush () - Flush journal |
1329 | * @journal: Journal to act on. | 1329 | * @journal: Journal to act on. |
1330 | * | 1330 | * |
1331 | * Flush all data for a given journal to disk and empty the journal. | 1331 | * Flush all data for a given journal to disk and empty the journal. |
1332 | * Filesystems can use this when remounting readonly to ensure that | 1332 | * Filesystems can use this when remounting readonly to ensure that |
1333 | * recovery does not need to happen on remount. | 1333 | * recovery does not need to happen on remount. |
@@ -1394,7 +1394,7 @@ int journal_flush(journal_t *journal) | |||
1394 | * int journal_wipe() - Wipe journal contents | 1394 | * int journal_wipe() - Wipe journal contents |
1395 | * @journal: Journal to act on. | 1395 | * @journal: Journal to act on. |
1396 | * @write: flag (see below) | 1396 | * @write: flag (see below) |
1397 | * | 1397 | * |
1398 | * Wipe out all of the contents of a journal, safely. This will produce | 1398 | * Wipe out all of the contents of a journal, safely. This will produce |
1399 | * a warning if the journal contains any valid recovery information. | 1399 | * a warning if the journal contains any valid recovery information. |
1400 | * Must be called between journal_init_*() and journal_load(). | 1400 | * Must be called between journal_init_*() and journal_load(). |
@@ -1449,7 +1449,7 @@ static const char *journal_dev_name(journal_t *journal, char *buffer) | |||
1449 | 1449 | ||
1450 | /* | 1450 | /* |
1451 | * Journal abort has very specific semantics, which we describe | 1451 | * Journal abort has very specific semantics, which we describe |
1452 | * for journal abort. | 1452 | * for journal abort. |
1453 | * | 1453 | * |
1454 | * Two internal function, which provide abort to te jbd layer | 1454 | * Two internal function, which provide abort to te jbd layer |
1455 | * itself are here. | 1455 | * itself are here. |
@@ -1504,7 +1504,7 @@ static void __journal_abort_soft (journal_t *journal, int errno) | |||
1504 | * Perform a complete, immediate shutdown of the ENTIRE | 1504 | * Perform a complete, immediate shutdown of the ENTIRE |
1505 | * journal (not of a single transaction). This operation cannot be | 1505 | * journal (not of a single transaction). This operation cannot be |
1506 | * undone without closing and reopening the journal. | 1506 | * undone without closing and reopening the journal. |
1507 | * | 1507 | * |
1508 | * The journal_abort function is intended to support higher level error | 1508 | * The journal_abort function is intended to support higher level error |
1509 | * recovery mechanisms such as the ext2/ext3 remount-readonly error | 1509 | * recovery mechanisms such as the ext2/ext3 remount-readonly error |
1510 | * mode. | 1510 | * mode. |
@@ -1538,7 +1538,7 @@ static void __journal_abort_soft (journal_t *journal, int errno) | |||
1538 | * supply an errno; a null errno implies that absolutely no further | 1538 | * supply an errno; a null errno implies that absolutely no further |
1539 | * writes are done to the journal (unless there are any already in | 1539 | * writes are done to the journal (unless there are any already in |
1540 | * progress). | 1540 | * progress). |
1541 | * | 1541 | * |
1542 | */ | 1542 | */ |
1543 | 1543 | ||
1544 | void journal_abort(journal_t *journal, int errno) | 1544 | void journal_abort(journal_t *journal, int errno) |
@@ -1546,7 +1546,7 @@ void journal_abort(journal_t *journal, int errno) | |||
1546 | __journal_abort_soft(journal, errno); | 1546 | __journal_abort_soft(journal, errno); |
1547 | } | 1547 | } |
1548 | 1548 | ||
1549 | /** | 1549 | /** |
1550 | * int journal_errno () - returns the journal's error state. | 1550 | * int journal_errno () - returns the journal's error state. |
1551 | * @journal: journal to examine. | 1551 | * @journal: journal to examine. |
1552 | * | 1552 | * |
@@ -1570,7 +1570,7 @@ int journal_errno(journal_t *journal) | |||
1570 | return err; | 1570 | return err; |
1571 | } | 1571 | } |
1572 | 1572 | ||
1573 | /** | 1573 | /** |
1574 | * int journal_clear_err () - clears the journal's error state | 1574 | * int journal_clear_err () - clears the journal's error state |
1575 | * @journal: journal to act on. | 1575 | * @journal: journal to act on. |
1576 | * | 1576 | * |
@@ -1590,7 +1590,7 @@ int journal_clear_err(journal_t *journal) | |||
1590 | return err; | 1590 | return err; |
1591 | } | 1591 | } |
1592 | 1592 | ||
1593 | /** | 1593 | /** |
1594 | * void journal_ack_err() - Ack journal err. | 1594 | * void journal_ack_err() - Ack journal err. |
1595 | * @journal: journal to act on. | 1595 | * @journal: journal to act on. |
1596 | * | 1596 | * |
@@ -1612,7 +1612,7 @@ int journal_blocks_per_page(struct inode *inode) | |||
1612 | 1612 | ||
1613 | /* | 1613 | /* |
1614 | * Simple support for retrying memory allocations. Introduced to help to | 1614 | * Simple support for retrying memory allocations. Introduced to help to |
1615 | * debug different VM deadlock avoidance strategies. | 1615 | * debug different VM deadlock avoidance strategies. |
1616 | */ | 1616 | */ |
1617 | void * __jbd_kmalloc (const char *where, size_t size, gfp_t flags, int retry) | 1617 | void * __jbd_kmalloc (const char *where, size_t size, gfp_t flags, int retry) |
1618 | { | 1618 | { |
@@ -2047,13 +2047,7 @@ static int __init journal_init(void) | |||
2047 | { | 2047 | { |
2048 | int ret; | 2048 | int ret; |
2049 | 2049 | ||
2050 | /* Static check for data structure consistency. There's no code | 2050 | BUILD_BUG_ON(sizeof(struct journal_superblock_s) != 1024); |
2051 | * invoked --- we'll just get a linker failure if things aren't right. | ||
2052 | */ | ||
2053 | extern void journal_bad_superblock_size(void); | ||
2054 | if (sizeof(struct journal_superblock_s) != 1024) | ||
2055 | journal_bad_superblock_size(); | ||
2056 | |||
2057 | 2051 | ||
2058 | ret = journal_init_caches(); | 2052 | ret = journal_init_caches(); |
2059 | if (ret != 0) | 2053 | if (ret != 0) |