]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/jbd2/journal.c
Merge tag 'juno-fix-5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/sudeep...
[linux.git] / fs / jbd2 / journal.c
index 60bf8ff7891324b680bfbe8c4f5ba9db7704fc87..a49d0e670ddf82bdb98382312101481af2943c2b 100644 (file)
@@ -794,18 +794,22 @@ 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;
                        jbd2_journal_abort(journal, err);
+               } else {
+                       *retp = block;
                }
+
        } else {
                *retp = blocknr; /* +journal->j_blk_offset */
        }
@@ -1074,12 +1078,11 @@ static int jbd2_seq_info_release(struct inode *inode, struct file *file)
        return seq_release(inode, file);
 }
 
-static const struct file_operations jbd2_seq_info_fops = {
-       .owner          = THIS_MODULE,
-       .open           = jbd2_seq_info_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = jbd2_seq_info_release,
+static const struct proc_ops jbd2_info_proc_ops = {
+       .proc_open      = jbd2_seq_info_open,
+       .proc_read      = seq_read,
+       .proc_lseek     = seq_lseek,
+       .proc_release   = jbd2_seq_info_release,
 };
 
 static struct proc_dir_entry *proc_jbd2_stats;
@@ -1089,7 +1092,7 @@ static void jbd2_stats_proc_init(journal_t *journal)
        journal->j_proc_entry = proc_mkdir(journal->j_devname, proc_jbd2_stats);
        if (journal->j_proc_entry) {
                proc_create_data("info", S_IRUGO, journal->j_proc_entry,
-                                &jbd2_seq_info_fops, journal);
+                                &jbd2_info_proc_ops, journal);
        }
 }
 
@@ -1244,11 +1247,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;