GFS2: Make two similar quota code fragments into a function
There should be no functional change bar the removal of a test of the MS_READONLY flag which would never be reachable. This merges the common code from qd_fish and qd_trylock into a single function and calls it from both those places. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com> Cc: Abhijith Das <adas@redhat.com>
This commit is contained in:
parent
bef292a72d
commit
1bf59bf6de
1 changed files with 27 additions and 35 deletions
|
@ -383,6 +383,25 @@ static void bh_put(struct gfs2_quota_data *qd)
|
||||||
mutex_unlock(&sdp->sd_quota_mutex);
|
mutex_unlock(&sdp->sd_quota_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int qd_check_sync(struct gfs2_sbd *sdp, struct gfs2_quota_data *qd,
|
||||||
|
u64 *sync_gen)
|
||||||
|
{
|
||||||
|
if (test_bit(QDF_LOCKED, &qd->qd_flags) ||
|
||||||
|
!test_bit(QDF_CHANGE, &qd->qd_flags) ||
|
||||||
|
(sync_gen && (qd->qd_sync_gen >= *sync_gen)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
list_move_tail(&qd->qd_list, &sdp->sd_quota_list);
|
||||||
|
|
||||||
|
set_bit(QDF_LOCKED, &qd->qd_flags);
|
||||||
|
gfs2_assert_warn(sdp, atomic_read(&qd->qd_count));
|
||||||
|
atomic_inc(&qd->qd_count);
|
||||||
|
qd->qd_change_sync = qd->qd_change;
|
||||||
|
gfs2_assert_warn(sdp, qd->qd_slot_count);
|
||||||
|
qd->qd_slot_count++;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
|
static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
|
||||||
{
|
{
|
||||||
struct gfs2_quota_data *qd = NULL;
|
struct gfs2_quota_data *qd = NULL;
|
||||||
|
@ -397,22 +416,9 @@ static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
|
||||||
spin_lock(&qd_lru_lock);
|
spin_lock(&qd_lru_lock);
|
||||||
|
|
||||||
list_for_each_entry(qd, &sdp->sd_quota_list, qd_list) {
|
list_for_each_entry(qd, &sdp->sd_quota_list, qd_list) {
|
||||||
if (test_bit(QDF_LOCKED, &qd->qd_flags) ||
|
found = qd_check_sync(sdp, qd, &sdp->sd_quota_sync_gen);
|
||||||
!test_bit(QDF_CHANGE, &qd->qd_flags) ||
|
if (found)
|
||||||
qd->qd_sync_gen >= sdp->sd_quota_sync_gen)
|
break;
|
||||||
continue;
|
|
||||||
|
|
||||||
list_move_tail(&qd->qd_list, &sdp->sd_quota_list);
|
|
||||||
|
|
||||||
set_bit(QDF_LOCKED, &qd->qd_flags);
|
|
||||||
gfs2_assert_warn(sdp, atomic_read(&qd->qd_count));
|
|
||||||
atomic_inc(&qd->qd_count);
|
|
||||||
qd->qd_change_sync = qd->qd_change;
|
|
||||||
gfs2_assert_warn(sdp, qd->qd_slot_count);
|
|
||||||
qd->qd_slot_count++;
|
|
||||||
found = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!found)
|
if (!found)
|
||||||
|
@ -439,29 +445,15 @@ static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
|
||||||
static int qd_trylock(struct gfs2_quota_data *qd)
|
static int qd_trylock(struct gfs2_quota_data *qd)
|
||||||
{
|
{
|
||||||
struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd;
|
struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd;
|
||||||
|
int found;
|
||||||
if (sdp->sd_vfs->s_flags & MS_RDONLY)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
spin_lock(&qd_lru_lock);
|
spin_lock(&qd_lru_lock);
|
||||||
|
found = qd_check_sync(sdp, qd, NULL);
|
||||||
if (test_bit(QDF_LOCKED, &qd->qd_flags) ||
|
|
||||||
!test_bit(QDF_CHANGE, &qd->qd_flags)) {
|
|
||||||
spin_unlock(&qd_lru_lock);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
list_move_tail(&qd->qd_list, &sdp->sd_quota_list);
|
|
||||||
|
|
||||||
set_bit(QDF_LOCKED, &qd->qd_flags);
|
|
||||||
gfs2_assert_warn(sdp, atomic_read(&qd->qd_count));
|
|
||||||
atomic_inc(&qd->qd_count);
|
|
||||||
qd->qd_change_sync = qd->qd_change;
|
|
||||||
gfs2_assert_warn(sdp, qd->qd_slot_count);
|
|
||||||
qd->qd_slot_count++;
|
|
||||||
|
|
||||||
spin_unlock(&qd_lru_lock);
|
spin_unlock(&qd_lru_lock);
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
return 0;
|
||||||
|
|
||||||
gfs2_assert_warn(sdp, qd->qd_change_sync);
|
gfs2_assert_warn(sdp, qd->qd_change_sync);
|
||||||
if (bh_get(qd)) {
|
if (bh_get(qd)) {
|
||||||
clear_bit(QDF_LOCKED, &qd->qd_flags);
|
clear_bit(QDF_LOCKED, &qd->qd_flags);
|
||||||
|
|
Loading…
Add table
Reference in a new issue