OSDN Git Service

fs: Enable bmap() function to properly return errors
[tomoyo/tomoyo-test1.git] / fs / jbd2 / journal.c
index 5e408ee..01fa5d2 100644 (file)
@@ -795,18 +795,23 @@ int jbd2_journal_bmap(journal_t *journal, unsigned long blocknr,
 {
        int err = 0;
        unsigned long long ret;
+       sector_t block = 0;
 
        if (journal->j_inode) {
-               ret = bmap(journal->j_inode, blocknr);
-               if (ret)
-                       *retp = ret;
-               else {
+               block = blocknr;
+               ret = bmap(journal->j_inode, &block);
+
+               if (ret || !block) {
                        printk(KERN_ALERT "%s: journal block not found "
                                        "at offset %lu on %s\n",
                               __func__, blocknr, journal->j_devname);
                        err = -EIO;
                        __journal_abort_soft(journal, err);
+
+               } else {
+                       *retp = block;
                }
+
        } else {
                *retp = blocknr; /* +journal->j_blk_offset */
        }
@@ -1244,11 +1249,14 @@ journal_t *jbd2_journal_init_dev(struct block_device *bdev,
 journal_t *jbd2_journal_init_inode(struct inode *inode)
 {
        journal_t *journal;
+       sector_t blocknr;
        char *p;
-       unsigned long long blocknr;
+       int err = 0;
+
+       blocknr = 0;
+       err = bmap(inode, &blocknr);
 
-       blocknr = bmap(inode, 0);
-       if (!blocknr) {
+       if (err || !blocknr) {
                pr_err("%s: Cannot locate journal superblock\n",
                        __func__);
                return NULL;