Merge tag 'pci-v4.8-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
[cascardo/linux.git] / fs / nilfs2 / the_nilfs.c
index e9fd241..2dd75bf 100644 (file)
@@ -56,12 +56,12 @@ void nilfs_set_last_segment(struct the_nilfs *nilfs,
 
 /**
  * alloc_nilfs - allocate a nilfs object
- * @bdev: block device to which the_nilfs is related
+ * @sb: super block instance
  *
  * Return Value: On success, pointer to the_nilfs is returned.
  * On error, NULL is returned.
  */
-struct the_nilfs *alloc_nilfs(struct block_device *bdev)
+struct the_nilfs *alloc_nilfs(struct super_block *sb)
 {
        struct the_nilfs *nilfs;
 
@@ -69,7 +69,8 @@ struct the_nilfs *alloc_nilfs(struct block_device *bdev)
        if (!nilfs)
                return NULL;
 
-       nilfs->ns_bdev = bdev;
+       nilfs->ns_sb = sb;
+       nilfs->ns_bdev = sb->s_bdev;
        atomic_set(&nilfs->ns_ndirtyblks, 0);
        init_rwsem(&nilfs->ns_sem);
        mutex_init(&nilfs->ns_snapshot_mount_mutex);
@@ -191,7 +192,10 @@ static int nilfs_store_log_cursor(struct the_nilfs *nilfs,
                nilfs_get_segnum_of_block(nilfs, nilfs->ns_last_pseg);
        nilfs->ns_cno = nilfs->ns_last_cno + 1;
        if (nilfs->ns_segnum >= nilfs->ns_nsegments) {
-               printk(KERN_ERR "NILFS invalid last segment number.\n");
+               nilfs_msg(nilfs->ns_sb, KERN_ERR,
+                         "pointed segment number is out of range: segnum=%llu, nsegments=%lu",
+                         (unsigned long long)nilfs->ns_segnum,
+                         nilfs->ns_nsegments);
                ret = -EINVAL;
        }
        return ret;
@@ -215,12 +219,12 @@ int load_nilfs(struct the_nilfs *nilfs, struct super_block *sb)
        int err;
 
        if (!valid_fs) {
-               printk(KERN_WARNING "NILFS warning: mounting unchecked fs\n");
+               nilfs_msg(sb, KERN_WARNING, "mounting unchecked fs");
                if (s_flags & MS_RDONLY) {
-                       printk(KERN_INFO "NILFS: INFO: recovery "
-                              "required for readonly filesystem.\n");
-                       printk(KERN_INFO "NILFS: write access will "
-                              "be enabled during recovery.\n");
+                       nilfs_msg(sb, KERN_INFO,
+                                 "recovery required for readonly filesystem");
+                       nilfs_msg(sb, KERN_INFO,
+                                 "write access will be enabled during recovery");
                }
        }
 
@@ -235,13 +239,12 @@ int load_nilfs(struct the_nilfs *nilfs, struct super_block *sb)
                        goto scan_error;
 
                if (!nilfs_valid_sb(sbp[1])) {
-                       printk(KERN_WARNING
-                              "NILFS warning: unable to fall back to spare"
-                              "super block\n");
+                       nilfs_msg(sb, KERN_WARNING,
+                                 "unable to fall back to spare super block");
                        goto scan_error;
                }
-               printk(KERN_INFO
-                      "NILFS: try rollback from an earlier position\n");
+               nilfs_msg(sb, KERN_INFO,
+                         "trying rollback from an earlier position");
 
                /*
                 * restore super block with its spare and reconfigure
@@ -254,10 +257,9 @@ int load_nilfs(struct the_nilfs *nilfs, struct super_block *sb)
                /* verify consistency between two super blocks */
                blocksize = BLOCK_SIZE << le32_to_cpu(sbp[0]->s_log_block_size);
                if (blocksize != nilfs->ns_blocksize) {
-                       printk(KERN_WARNING
-                              "NILFS warning: blocksize differs between "
-                              "two super blocks (%d != %d)\n",
-                              blocksize, nilfs->ns_blocksize);
+                       nilfs_msg(sb, KERN_WARNING,
+                                 "blocksize differs between two super blocks (%d != %d)",
+                                 blocksize, nilfs->ns_blocksize);
                        goto scan_error;
                }
 
@@ -276,7 +278,8 @@ int load_nilfs(struct the_nilfs *nilfs, struct super_block *sb)
 
        err = nilfs_load_super_root(nilfs, sb, ri.ri_super_root);
        if (unlikely(err)) {
-               printk(KERN_ERR "NILFS: error loading super root.\n");
+               nilfs_msg(sb, KERN_ERR, "error %d while loading super root",
+                         err);
                goto failed;
        }
 
@@ -287,30 +290,29 @@ int load_nilfs(struct the_nilfs *nilfs, struct super_block *sb)
                __u64 features;
 
                if (nilfs_test_opt(nilfs, NORECOVERY)) {
-                       printk(KERN_INFO "NILFS: norecovery option specified. "
-                              "skipping roll-forward recovery\n");
+                       nilfs_msg(sb, KERN_INFO,
+                                 "norecovery option specified, skipping roll-forward recovery");
                        goto skip_recovery;
                }
                features = le64_to_cpu(nilfs->ns_sbp[0]->s_feature_compat_ro) &
                        ~NILFS_FEATURE_COMPAT_RO_SUPP;
                if (features) {
-                       printk(KERN_ERR "NILFS: couldn't proceed with "
-                              "recovery because of unsupported optional "
-                              "features (%llx)\n",
-                              (unsigned long long)features);
+                       nilfs_msg(sb, KERN_ERR,
+                                 "couldn't proceed with recovery because of unsupported optional features (%llx)",
+                                 (unsigned long long)features);
                        err = -EROFS;
                        goto failed_unload;
                }
                if (really_read_only) {
-                       printk(KERN_ERR "NILFS: write access "
-                              "unavailable, cannot proceed.\n");
+                       nilfs_msg(sb, KERN_ERR,
+                                 "write access unavailable, cannot proceed");
                        err = -EROFS;
                        goto failed_unload;
                }
                sb->s_flags &= ~MS_RDONLY;
        } else if (nilfs_test_opt(nilfs, NORECOVERY)) {
-               printk(KERN_ERR "NILFS: recovery cancelled because norecovery "
-                      "option was specified for a read/write mount\n");
+               nilfs_msg(sb, KERN_ERR,
+                         "recovery cancelled because norecovery option was specified for a read/write mount");
                err = -EINVAL;
                goto failed_unload;
        }
@@ -325,11 +327,12 @@ int load_nilfs(struct the_nilfs *nilfs, struct super_block *sb)
        up_write(&nilfs->ns_sem);
 
        if (err) {
-               printk(KERN_ERR "NILFS: failed to update super block. "
-                      "recovery unfinished.\n");
+               nilfs_msg(sb, KERN_ERR,
+                         "error %d updating super block. recovery unfinished.",
+                         err);
                goto failed_unload;
        }
-       printk(KERN_INFO "NILFS: recovery complete.\n");
+       nilfs_msg(sb, KERN_INFO, "recovery complete");
 
  skip_recovery:
        nilfs_clear_recovery_info(&ri);
@@ -337,7 +340,7 @@ int load_nilfs(struct the_nilfs *nilfs, struct super_block *sb)
        return 0;
 
  scan_error:
-       printk(KERN_ERR "NILFS: error searching super root.\n");
+       nilfs_msg(sb, KERN_ERR, "error %d while searching super root", err);
        goto failed;
 
  failed_unload:
@@ -384,12 +387,11 @@ static int nilfs_store_disk_layout(struct the_nilfs *nilfs,
                                   struct nilfs_super_block *sbp)
 {
        if (le32_to_cpu(sbp->s_rev_level) < NILFS_MIN_SUPP_REV) {
-               printk(KERN_ERR "NILFS: unsupported revision "
-                      "(superblock rev.=%d.%d, current rev.=%d.%d). "
-                      "Please check the version of mkfs.nilfs.\n",
-                      le32_to_cpu(sbp->s_rev_level),
-                      le16_to_cpu(sbp->s_minor_rev_level),
-                      NILFS_CURRENT_REV, NILFS_MINOR_REV);
+               nilfs_msg(nilfs->ns_sb, KERN_ERR,
+                         "unsupported revision (superblock rev.=%d.%d, current rev.=%d.%d). Please check the version of mkfs.nilfs(2).",
+                         le32_to_cpu(sbp->s_rev_level),
+                         le16_to_cpu(sbp->s_minor_rev_level),
+                         NILFS_CURRENT_REV, NILFS_MINOR_REV);
                return -EINVAL;
        }
        nilfs->ns_sbsize = le16_to_cpu(sbp->s_bytes);
@@ -398,12 +400,14 @@ static int nilfs_store_disk_layout(struct the_nilfs *nilfs,
 
        nilfs->ns_inode_size = le16_to_cpu(sbp->s_inode_size);
        if (nilfs->ns_inode_size > nilfs->ns_blocksize) {
-               printk(KERN_ERR "NILFS: too large inode size: %d bytes.\n",
-                      nilfs->ns_inode_size);
+               nilfs_msg(nilfs->ns_sb, KERN_ERR,
+                         "too large inode size: %d bytes",
+                         nilfs->ns_inode_size);
                return -EINVAL;
        } else if (nilfs->ns_inode_size < NILFS_MIN_INODE_SIZE) {
-               printk(KERN_ERR "NILFS: too small inode size: %d bytes.\n",
-                      nilfs->ns_inode_size);
+               nilfs_msg(nilfs->ns_sb, KERN_ERR,
+                         "too small inode size: %d bytes",
+                         nilfs->ns_inode_size);
                return -EINVAL;
        }
 
@@ -411,7 +415,9 @@ static int nilfs_store_disk_layout(struct the_nilfs *nilfs,
 
        nilfs->ns_blocks_per_segment = le32_to_cpu(sbp->s_blocks_per_segment);
        if (nilfs->ns_blocks_per_segment < NILFS_SEG_MIN_BLOCKS) {
-               printk(KERN_ERR "NILFS: too short segment.\n");
+               nilfs_msg(nilfs->ns_sb, KERN_ERR,
+                         "too short segment: %lu blocks",
+                         nilfs->ns_blocks_per_segment);
                return -EINVAL;
        }
 
@@ -420,7 +426,9 @@ static int nilfs_store_disk_layout(struct the_nilfs *nilfs,
                le32_to_cpu(sbp->s_r_segments_percentage);
        if (nilfs->ns_r_segments_percentage < 1 ||
            nilfs->ns_r_segments_percentage > 99) {
-               printk(KERN_ERR "NILFS: invalid reserved segments percentage.\n");
+               nilfs_msg(nilfs->ns_sb, KERN_ERR,
+                         "invalid reserved segments percentage: %lu",
+                         nilfs->ns_r_segments_percentage);
                return -EINVAL;
        }
 
@@ -504,16 +512,16 @@ static int nilfs_load_super_block(struct the_nilfs *nilfs,
 
        if (!sbp[0]) {
                if (!sbp[1]) {
-                       printk(KERN_ERR "NILFS: unable to read superblock\n");
+                       nilfs_msg(sb, KERN_ERR, "unable to read superblock");
                        return -EIO;
                }
-               printk(KERN_WARNING
-                      "NILFS warning: unable to read primary superblock "
-                      "(blocksize = %d)\n", blocksize);
+               nilfs_msg(sb, KERN_WARNING,
+                         "unable to read primary superblock (blocksize = %d)",
+                         blocksize);
        } else if (!sbp[1]) {
-               printk(KERN_WARNING
-                      "NILFS warning: unable to read secondary superblock "
-                      "(blocksize = %d)\n", blocksize);
+               nilfs_msg(sb, KERN_WARNING,
+                         "unable to read secondary superblock (blocksize = %d)",
+                         blocksize);
        }
 
        /*
@@ -535,14 +543,14 @@ static int nilfs_load_super_block(struct the_nilfs *nilfs,
        }
        if (!valid[swp]) {
                nilfs_release_super_block(nilfs);
-               printk(KERN_ERR "NILFS: Can't find nilfs on dev %s.\n",
-                      sb->s_id);
+               nilfs_msg(sb, KERN_ERR, "couldn't find nilfs on the device");
                return -EINVAL;
        }
 
        if (!valid[!swp])
-               printk(KERN_WARNING "NILFS warning: broken superblock. "
-                      "using spare superblock (blocksize = %d).\n", blocksize);
+               nilfs_msg(sb, KERN_WARNING,
+                         "broken superblock, retrying with spare superblock (blocksize = %d)",
+                         blocksize);
        if (swp)
                nilfs_swap_super_block(nilfs);
 
@@ -576,7 +584,7 @@ int init_nilfs(struct the_nilfs *nilfs, struct super_block *sb, char *data)
 
        blocksize = sb_min_blocksize(sb, NILFS_MIN_BLOCK_SIZE);
        if (!blocksize) {
-               printk(KERN_ERR "NILFS: unable to set blocksize\n");
+               nilfs_msg(sb, KERN_ERR, "unable to set blocksize");
                err = -EINVAL;
                goto out;
        }
@@ -595,8 +603,9 @@ int init_nilfs(struct the_nilfs *nilfs, struct super_block *sb, char *data)
        blocksize = BLOCK_SIZE << le32_to_cpu(sbp->s_log_block_size);
        if (blocksize < NILFS_MIN_BLOCK_SIZE ||
            blocksize > NILFS_MAX_BLOCK_SIZE) {
-               printk(KERN_ERR "NILFS: couldn't mount because of unsupported "
-                      "filesystem blocksize %d\n", blocksize);
+               nilfs_msg(sb, KERN_ERR,
+                         "couldn't mount because of unsupported filesystem blocksize %d",
+                         blocksize);
                err = -EINVAL;
                goto failed_sbh;
        }
@@ -604,10 +613,9 @@ int init_nilfs(struct the_nilfs *nilfs, struct super_block *sb, char *data)
                int hw_blocksize = bdev_logical_block_size(sb->s_bdev);
 
                if (blocksize < hw_blocksize) {
-                       printk(KERN_ERR
-                              "NILFS: blocksize %d too small for device "
-                              "(sector-size = %d).\n",
-                              blocksize, hw_blocksize);
+                       nilfs_msg(sb, KERN_ERR,
+                                 "blocksize %d too small for device (sector-size = %d)",
+                                 blocksize, hw_blocksize);
                        err = -EINVAL;
                        goto failed_sbh;
                }