]> err.no Git - linux-2.6/blobdiff - fs/gfs2/ops_fstype.c
Factor outstanding I/O error handling
[linux-2.6] / fs / gfs2 / ops_fstype.c
index 178b339118434004a25c383de97bd0b64eab3cf9..2c5f8e7def0dc21413ccd5e1fb2e38939d36d907 100644 (file)
@@ -237,7 +237,7 @@ fail:
 }
 
 static struct inode *gfs2_lookup_root(struct super_block *sb,
-                                     struct gfs2_inum *inum)
+                                     struct gfs2_inum_host *inum)
 {
        return gfs2_inode_lookup(sb, inum, DT_DIR);
 }
@@ -246,7 +246,7 @@ static int init_sb(struct gfs2_sbd *sdp, int silent, int undo)
 {
        struct super_block *sb = sdp->sd_vfs;
        struct gfs2_holder sb_gh;
-       struct gfs2_inum *inum;
+       struct gfs2_inum_host *inum;
        struct inode *inode;
        int error = 0;
 
@@ -690,6 +690,8 @@ static int fill_super(struct super_block *sb, void *data, int silent)
        if (error)
                goto fail;
 
+       gfs2_create_debugfs_file(sdp);
+
        error = gfs2_sys_fs_add(sdp);
        if (error)
                goto fail;
@@ -754,6 +756,7 @@ fail_lm:
 fail_sys:
        gfs2_sys_fs_del(sdp);
 fail:
+       gfs2_delete_debugfs_file(sdp);
        kfree(sdp);
        sb->s_fs_info = NULL;
        return error;
@@ -794,8 +797,8 @@ static int fill_super_meta(struct super_block *sb, struct super_block *new,
                fs_err(sdp, "can't get root dentry\n");
                error = -ENOMEM;
                iput(inode);
-       }
-       new->s_root->d_op = &gfs2_dops;
+       } else
+               new->s_root->d_op = &gfs2_dops;
 
        return error;
 }
@@ -840,7 +843,7 @@ static struct super_block* get_gfs2_sb(const char *dev_name)
        }
 
        printk(KERN_WARNING "GFS2: Unrecognized block device or "
-              "mount point %s", dev_name);
+              "mount point %s\n", dev_name);
 
 free_nd:
        path_release(&nd);
@@ -854,7 +857,6 @@ static int gfs2_get_sb_meta(struct file_system_type *fs_type, int flags,
        int error = 0;
        struct super_block *sb = NULL, *new;
        struct gfs2_sbd *sdp;
-       char *gfs2mnt = NULL;
 
        sb = get_gfs2_sb(dev_name);
        if (!sb) {
@@ -868,9 +870,9 @@ static int gfs2_get_sb_meta(struct file_system_type *fs_type, int flags,
                error = -EBUSY;
                goto error;
        }
-       mutex_lock(&sb->s_bdev->bd_mount_mutex);
+       down(&sb->s_bdev->bd_mount_sem);
        new = sget(fs_type, test_bdev_super, set_bdev_super, sb->s_bdev);
-       mutex_unlock(&sb->s_bdev->bd_mount_mutex);
+       up(&sb->s_bdev->bd_mount_sem);
        if (IS_ERR(new)) {
                error = PTR_ERR(new);
                goto error;
@@ -892,13 +894,12 @@ static int gfs2_get_sb_meta(struct file_system_type *fs_type, int flags,
        atomic_inc(&sdp->sd_gfs2mnt->mnt_count);
        return simple_set_mnt(mnt, new);
 error:
-       if (gfs2mnt)
-               kfree(gfs2mnt);
        return error;
 }
 
 static void gfs2_kill_sb(struct super_block *sb)
 {
+       gfs2_delete_debugfs_file(sb->s_fs_info);
        kill_block_super(sb);
 }