Merge tag 'f2fs-for-5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeu...
[linux-2.6-microblaze.git] / fs / gfs2 / super.c
index 4d4ceb0..6e00d15 100644 (file)
@@ -119,34 +119,6 @@ int gfs2_jdesc_check(struct gfs2_jdesc *jd)
        return 0;
 }
 
-static int init_threads(struct gfs2_sbd *sdp)
-{
-       struct task_struct *p;
-       int error = 0;
-
-       p = kthread_run(gfs2_logd, sdp, "gfs2_logd");
-       if (IS_ERR(p)) {
-               error = PTR_ERR(p);
-               fs_err(sdp, "can't start logd thread: %d\n", error);
-               return error;
-       }
-       sdp->sd_logd_process = p;
-
-       p = kthread_run(gfs2_quotad, sdp, "gfs2_quotad");
-       if (IS_ERR(p)) {
-               error = PTR_ERR(p);
-               fs_err(sdp, "can't start quotad thread: %d\n", error);
-               goto fail;
-       }
-       sdp->sd_quotad_process = p;
-       return 0;
-
-fail:
-       kthread_stop(sdp->sd_logd_process);
-       sdp->sd_logd_process = NULL;
-       return error;
-}
-
 /**
  * gfs2_make_fs_rw - Turn a Read-Only FS into a Read-Write one
  * @sdp: the filesystem
@@ -161,26 +133,17 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
        struct gfs2_log_header_host head;
        int error;
 
-       error = init_threads(sdp);
-       if (error) {
-               gfs2_withdraw_delayed(sdp);
-               return error;
-       }
-
        j_gl->gl_ops->go_inval(j_gl, DIO_METADATA);
-       if (gfs2_withdrawn(sdp)) {
-               error = -EIO;
-               goto fail;
-       }
+       if (gfs2_withdrawn(sdp))
+               return -EIO;
 
        error = gfs2_find_jhead(sdp->sd_jdesc, &head, false);
        if (error || gfs2_withdrawn(sdp))
-               goto fail;
+               return error;
 
        if (!(head.lh_flags & GFS2_LOG_HEAD_UNMOUNT)) {
                gfs2_consist(sdp);
-               error = -EIO;
-               goto fail;
+               return -EIO;
        }
 
        /*  Initialize some head of the log stuff  */
@@ -188,20 +151,8 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
        gfs2_log_pointers_init(sdp, head.lh_blkno);
 
        error = gfs2_quota_init(sdp);
-       if (error || gfs2_withdrawn(sdp))
-               goto fail;
-
-       set_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
-
-       return 0;
-
-fail:
-       if (sdp->sd_quotad_process)
-               kthread_stop(sdp->sd_quotad_process);
-       sdp->sd_quotad_process = NULL;
-       if (sdp->sd_logd_process)
-               kthread_stop(sdp->sd_logd_process);
-       sdp->sd_logd_process = NULL;
+       if (!error && !gfs2_withdrawn(sdp))
+               set_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags);
        return error;
 }
 
@@ -227,9 +178,8 @@ int gfs2_statfs_init(struct gfs2_sbd *sdp)
 {
        struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
        struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
-       struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
-       struct buffer_head *m_bh, *l_bh;
+       struct buffer_head *m_bh;
        struct gfs2_holder gh;
        int error;
 
@@ -248,21 +198,15 @@ int gfs2_statfs_init(struct gfs2_sbd *sdp)
                                      sizeof(struct gfs2_dinode));
                spin_unlock(&sdp->sd_statfs_spin);
        } else {
-               error = gfs2_meta_inode_buffer(l_ip, &l_bh);
-               if (error)
-                       goto out_m_bh;
-
                spin_lock(&sdp->sd_statfs_spin);
                gfs2_statfs_change_in(m_sc, m_bh->b_data +
                                      sizeof(struct gfs2_dinode));
-               gfs2_statfs_change_in(l_sc, l_bh->b_data +
+               gfs2_statfs_change_in(l_sc, sdp->sd_sc_bh->b_data +
                                      sizeof(struct gfs2_dinode));
                spin_unlock(&sdp->sd_statfs_spin);
 
-               brelse(l_bh);
        }
 
-out_m_bh:
        brelse(m_bh);
 out:
        gfs2_glock_dq_uninit(&gh);
@@ -275,22 +219,17 @@ void gfs2_statfs_change(struct gfs2_sbd *sdp, s64 total, s64 free,
        struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
        struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
-       struct buffer_head *l_bh;
        s64 x, y;
        int need_sync = 0;
-       int error;
-
-       error = gfs2_meta_inode_buffer(l_ip, &l_bh);
-       if (error)
-               return;
 
-       gfs2_trans_add_meta(l_ip->i_gl, l_bh);
+       gfs2_trans_add_meta(l_ip->i_gl, sdp->sd_sc_bh);
 
        spin_lock(&sdp->sd_statfs_spin);
        l_sc->sc_total += total;
        l_sc->sc_free += free;
        l_sc->sc_dinodes += dinodes;
-       gfs2_statfs_change_out(l_sc, l_bh->b_data + sizeof(struct gfs2_dinode));
+       gfs2_statfs_change_out(l_sc, sdp->sd_sc_bh->b_data +
+                              sizeof(struct gfs2_dinode));
        if (sdp->sd_args.ar_statfs_percent) {
                x = 100 * l_sc->sc_free;
                y = m_sc->sc_free * sdp->sd_args.ar_statfs_percent;
@@ -299,20 +238,18 @@ void gfs2_statfs_change(struct gfs2_sbd *sdp, s64 total, s64 free,
        }
        spin_unlock(&sdp->sd_statfs_spin);
 
-       brelse(l_bh);
        if (need_sync)
                gfs2_wake_up_statfs(sdp);
 }
 
-void update_statfs(struct gfs2_sbd *sdp, struct buffer_head *m_bh,
-                  struct buffer_head *l_bh)
+void update_statfs(struct gfs2_sbd *sdp, struct buffer_head *m_bh)
 {
        struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
        struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
        struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
 
-       gfs2_trans_add_meta(l_ip->i_gl, l_bh);
+       gfs2_trans_add_meta(l_ip->i_gl, sdp->sd_sc_bh);
        gfs2_trans_add_meta(m_ip->i_gl, m_bh);
 
        spin_lock(&sdp->sd_statfs_spin);
@@ -320,7 +257,7 @@ void update_statfs(struct gfs2_sbd *sdp, struct buffer_head *m_bh,
        m_sc->sc_free += l_sc->sc_free;
        m_sc->sc_dinodes += l_sc->sc_dinodes;
        memset(l_sc, 0, sizeof(struct gfs2_statfs_change));
-       memset(l_bh->b_data + sizeof(struct gfs2_dinode),
+       memset(sdp->sd_sc_bh->b_data + sizeof(struct gfs2_dinode),
               0, sizeof(struct gfs2_statfs_change));
        gfs2_statfs_change_out(m_sc, m_bh->b_data + sizeof(struct gfs2_dinode));
        spin_unlock(&sdp->sd_statfs_spin);
@@ -330,11 +267,10 @@ int gfs2_statfs_sync(struct super_block *sb, int type)
 {
        struct gfs2_sbd *sdp = sb->s_fs_info;
        struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
-       struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
        struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
        struct gfs2_holder gh;
-       struct buffer_head *m_bh, *l_bh;
+       struct buffer_head *m_bh;
        int error;
 
        error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, GL_NOCACHE,
@@ -355,21 +291,15 @@ int gfs2_statfs_sync(struct super_block *sb, int type)
        }
        spin_unlock(&sdp->sd_statfs_spin);
 
-       error = gfs2_meta_inode_buffer(l_ip, &l_bh);
-       if (error)
-               goto out_bh;
-
        error = gfs2_trans_begin(sdp, 2 * RES_DINODE, 0);
        if (error)
-               goto out_bh2;
+               goto out_bh;
 
-       update_statfs(sdp, m_bh, l_bh);
+       update_statfs(sdp, m_bh);
        sdp->sd_statfs_force_sync = 0;
 
        gfs2_trans_end(sdp);
 
-out_bh2:
-       brelse(l_bh);
 out_bh:
        brelse(m_bh);
 out_unlock:
@@ -675,6 +605,7 @@ restart:
                        gfs2_glock_dq_uninit(&sdp->sd_journal_gh);
                if (gfs2_holder_initialized(&sdp->sd_jinode_gh))
                        gfs2_glock_dq_uninit(&sdp->sd_jinode_gh);
+               brelse(sdp->sd_sc_bh);
                gfs2_glock_dq_uninit(&sdp->sd_sc_gh);
                gfs2_glock_dq_uninit(&sdp->sd_qc_gh);
                free_local_statfs_inodes(sdp);
@@ -1016,7 +947,7 @@ static int gfs2_drop_inode(struct inode *inode)
                gfs2_glock_hold(gl);
                if (!gfs2_queue_delete_work(gl, 0))
                        gfs2_glock_queue_put(gl);
-               return false;
+               return 0;
        }
 
        return generic_drop_inode(inode);