GFS2: Move four functions from super.c
The functions which are being moved can all be marked static in their new locations, since they only have a single caller each. Their new locations are more logical than before and some of the functions are small enough that the compiler might well inline them. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
164
fs/gfs2/super.c
164
fs/gfs2/super.c
@@ -96,39 +96,6 @@ struct gfs2_jdesc *gfs2_jdesc_find(struct gfs2_sbd *sdp, unsigned int jid)
|
||||
return jd;
|
||||
}
|
||||
|
||||
void gfs2_jdesc_make_dirty(struct gfs2_sbd *sdp, unsigned int jid)
|
||||
{
|
||||
struct gfs2_jdesc *jd;
|
||||
|
||||
spin_lock(&sdp->sd_jindex_spin);
|
||||
jd = jdesc_find_i(&sdp->sd_jindex_list, jid);
|
||||
if (jd)
|
||||
jd->jd_dirty = 1;
|
||||
spin_unlock(&sdp->sd_jindex_spin);
|
||||
}
|
||||
|
||||
struct gfs2_jdesc *gfs2_jdesc_find_dirty(struct gfs2_sbd *sdp)
|
||||
{
|
||||
struct gfs2_jdesc *jd;
|
||||
int found = 0;
|
||||
|
||||
spin_lock(&sdp->sd_jindex_spin);
|
||||
|
||||
list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) {
|
||||
if (jd->jd_dirty) {
|
||||
jd->jd_dirty = 0;
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
spin_unlock(&sdp->sd_jindex_spin);
|
||||
|
||||
if (!found)
|
||||
jd = NULL;
|
||||
|
||||
return jd;
|
||||
}
|
||||
|
||||
int gfs2_jdesc_check(struct gfs2_jdesc *jd)
|
||||
{
|
||||
struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
|
||||
@@ -353,137 +320,6 @@ out:
|
||||
return error;
|
||||
}
|
||||
|
||||
/**
|
||||
* gfs2_statfs_i - Do a statfs
|
||||
* @sdp: the filesystem
|
||||
* @sg: the sg structure
|
||||
*
|
||||
* Returns: errno
|
||||
*/
|
||||
|
||||
int gfs2_statfs_i(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
|
||||
{
|
||||
struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
|
||||
struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
|
||||
|
||||
spin_lock(&sdp->sd_statfs_spin);
|
||||
|
||||
*sc = *m_sc;
|
||||
sc->sc_total += l_sc->sc_total;
|
||||
sc->sc_free += l_sc->sc_free;
|
||||
sc->sc_dinodes += l_sc->sc_dinodes;
|
||||
|
||||
spin_unlock(&sdp->sd_statfs_spin);
|
||||
|
||||
if (sc->sc_free < 0)
|
||||
sc->sc_free = 0;
|
||||
if (sc->sc_free > sc->sc_total)
|
||||
sc->sc_free = sc->sc_total;
|
||||
if (sc->sc_dinodes < 0)
|
||||
sc->sc_dinodes = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* statfs_fill - fill in the sg for a given RG
|
||||
* @rgd: the RG
|
||||
* @sc: the sc structure
|
||||
*
|
||||
* Returns: 0 on success, -ESTALE if the LVB is invalid
|
||||
*/
|
||||
|
||||
static int statfs_slow_fill(struct gfs2_rgrpd *rgd,
|
||||
struct gfs2_statfs_change_host *sc)
|
||||
{
|
||||
gfs2_rgrp_verify(rgd);
|
||||
sc->sc_total += rgd->rd_data;
|
||||
sc->sc_free += rgd->rd_free;
|
||||
sc->sc_dinodes += rgd->rd_dinodes;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* gfs2_statfs_slow - Stat a filesystem using asynchronous locking
|
||||
* @sdp: the filesystem
|
||||
* @sc: the sc info that will be returned
|
||||
*
|
||||
* Any error (other than a signal) will cause this routine to fall back
|
||||
* to the synchronous version.
|
||||
*
|
||||
* FIXME: This really shouldn't busy wait like this.
|
||||
*
|
||||
* Returns: errno
|
||||
*/
|
||||
|
||||
int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change_host *sc)
|
||||
{
|
||||
struct gfs2_holder ri_gh;
|
||||
struct gfs2_rgrpd *rgd_next;
|
||||
struct gfs2_holder *gha, *gh;
|
||||
unsigned int slots = 64;
|
||||
unsigned int x;
|
||||
int done;
|
||||
int error = 0, err;
|
||||
|
||||
memset(sc, 0, sizeof(struct gfs2_statfs_change_host));
|
||||
gha = kcalloc(slots, sizeof(struct gfs2_holder), GFP_KERNEL);
|
||||
if (!gha)
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_rindex_hold(sdp, &ri_gh);
|
||||
if (error)
|
||||
goto out;
|
||||
|
||||
rgd_next = gfs2_rgrpd_get_first(sdp);
|
||||
|
||||
for (;;) {
|
||||
done = 1;
|
||||
|
||||
for (x = 0; x < slots; x++) {
|
||||
gh = gha + x;
|
||||
|
||||
if (gh->gh_gl && gfs2_glock_poll(gh)) {
|
||||
err = gfs2_glock_wait(gh);
|
||||
if (err) {
|
||||
gfs2_holder_uninit(gh);
|
||||
error = err;
|
||||
} else {
|
||||
if (!error)
|
||||
error = statfs_slow_fill(
|
||||
gh->gh_gl->gl_object, sc);
|
||||
gfs2_glock_dq_uninit(gh);
|
||||
}
|
||||
}
|
||||
|
||||
if (gh->gh_gl)
|
||||
done = 0;
|
||||
else if (rgd_next && !error) {
|
||||
error = gfs2_glock_nq_init(rgd_next->rd_gl,
|
||||
LM_ST_SHARED,
|
||||
GL_ASYNC,
|
||||
gh);
|
||||
rgd_next = gfs2_rgrpd_get_next(rgd_next);
|
||||
done = 0;
|
||||
}
|
||||
|
||||
if (signal_pending(current))
|
||||
error = -ERESTARTSYS;
|
||||
}
|
||||
|
||||
if (done)
|
||||
break;
|
||||
|
||||
yield();
|
||||
}
|
||||
|
||||
gfs2_glock_dq_uninit(&ri_gh);
|
||||
|
||||
out:
|
||||
kfree(gha);
|
||||
return error;
|
||||
}
|
||||
|
||||
struct lfcc {
|
||||
struct list_head list;
|
||||
struct gfs2_holder gh;
|
||||
|
Reference in New Issue
Block a user