Skip to content

Commit

Permalink
GFS2: Make two similar quota code fragments into a function
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Steven Whitehouse committed Oct 4, 2013
1 parent bef292a commit 1bf59bf
Showing 1 changed file with 26 additions and 34 deletions.
60 changes: 26 additions & 34 deletions fs/gfs2/quota.c
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,25 @@ static void bh_put(struct gfs2_quota_data *qd)
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)
{
struct gfs2_quota_data *qd = NULL;
Expand All @@ -397,22 +416,9 @@ static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
spin_lock(&qd_lru_lock);

list_for_each_entry(qd, &sdp->sd_quota_list, qd_list) {
if (test_bit(QDF_LOCKED, &qd->qd_flags) ||
!test_bit(QDF_CHANGE, &qd->qd_flags) ||
qd->qd_sync_gen >= sdp->sd_quota_sync_gen)
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;
found = qd_check_sync(sdp, qd, &sdp->sd_quota_sync_gen);
if (found)
break;
}

if (!found)
Expand All @@ -439,28 +445,14 @@ static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
static int qd_trylock(struct gfs2_quota_data *qd)
{
struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd;

if (sdp->sd_vfs->s_flags & MS_RDONLY)
return 0;
int found;

spin_lock(&qd_lru_lock);
found = qd_check_sync(sdp, qd, NULL);
spin_unlock(&qd_lru_lock);

if (test_bit(QDF_LOCKED, &qd->qd_flags) ||
!test_bit(QDF_CHANGE, &qd->qd_flags)) {
spin_unlock(&qd_lru_lock);
if (!found)
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);

gfs2_assert_warn(sdp, qd->qd_change_sync);
if (bh_get(qd)) {
Expand Down

0 comments on commit 1bf59bf

Please sign in to comment.