diff options
Diffstat (limited to 'fs/gfs2/glock.c')
-rw-r--r-- | fs/gfs2/glock.c | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 438146904b58..fb1960b7fdde 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c | |||
@@ -971,8 +971,6 @@ static void drop_bh(struct gfs2_glock *gl, unsigned int ret) | |||
971 | const struct gfs2_glock_operations *glops = gl->gl_ops; | 971 | const struct gfs2_glock_operations *glops = gl->gl_ops; |
972 | struct gfs2_holder *gh = gl->gl_req_gh; | 972 | struct gfs2_holder *gh = gl->gl_req_gh; |
973 | 973 | ||
974 | clear_bit(GLF_PREFETCH, &gl->gl_flags); | ||
975 | |||
976 | gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags)); | 974 | gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags)); |
977 | gfs2_assert_warn(sdp, queue_empty(gl, &gl->gl_holders)); | 975 | gfs2_assert_warn(sdp, queue_empty(gl, &gl->gl_holders)); |
978 | gfs2_assert_warn(sdp, !ret); | 976 | gfs2_assert_warn(sdp, !ret); |
@@ -1227,8 +1225,6 @@ restart: | |||
1227 | } | 1225 | } |
1228 | } | 1226 | } |
1229 | 1227 | ||
1230 | clear_bit(GLF_PREFETCH, &gl->gl_flags); | ||
1231 | |||
1232 | return error; | 1228 | return error; |
1233 | } | 1229 | } |
1234 | 1230 | ||
@@ -1320,36 +1316,6 @@ void gfs2_glock_dq(struct gfs2_holder *gh) | |||
1320 | spin_unlock(&gl->gl_spin); | 1316 | spin_unlock(&gl->gl_spin); |
1321 | } | 1317 | } |
1322 | 1318 | ||
1323 | /** | ||
1324 | * gfs2_glock_prefetch - Try to prefetch a glock | ||
1325 | * @gl: the glock | ||
1326 | * @state: the state to prefetch in | ||
1327 | * @flags: flags passed to go_xmote_th() | ||
1328 | * | ||
1329 | */ | ||
1330 | |||
1331 | static void gfs2_glock_prefetch(struct gfs2_glock *gl, unsigned int state, | ||
1332 | int flags) | ||
1333 | { | ||
1334 | const struct gfs2_glock_operations *glops = gl->gl_ops; | ||
1335 | |||
1336 | spin_lock(&gl->gl_spin); | ||
1337 | |||
1338 | if (test_bit(GLF_LOCK, &gl->gl_flags) || !list_empty(&gl->gl_holders) || | ||
1339 | !list_empty(&gl->gl_waiters1) || !list_empty(&gl->gl_waiters2) || | ||
1340 | !list_empty(&gl->gl_waiters3) || | ||
1341 | relaxed_state_ok(gl->gl_state, state, flags)) { | ||
1342 | spin_unlock(&gl->gl_spin); | ||
1343 | return; | ||
1344 | } | ||
1345 | |||
1346 | set_bit(GLF_PREFETCH, &gl->gl_flags); | ||
1347 | set_bit(GLF_LOCK, &gl->gl_flags); | ||
1348 | spin_unlock(&gl->gl_spin); | ||
1349 | |||
1350 | glops->go_xmote_th(gl, state, flags); | ||
1351 | } | ||
1352 | |||
1353 | static void greedy_work(struct work_struct *work) | 1319 | static void greedy_work(struct work_struct *work) |
1354 | { | 1320 | { |
1355 | struct greedy *gr = container_of(work, struct greedy, gr_work.work); | 1321 | struct greedy *gr = container_of(work, struct greedy, gr_work.work); |
@@ -1618,34 +1584,6 @@ void gfs2_glock_dq_uninit_m(unsigned int num_gh, struct gfs2_holder *ghs) | |||
1618 | } | 1584 | } |
1619 | 1585 | ||
1620 | /** | 1586 | /** |
1621 | * gfs2_glock_prefetch_num - prefetch a glock based on lock number | ||
1622 | * @sdp: the filesystem | ||
1623 | * @number: the lock number | ||
1624 | * @glops: the glock operations for the type of glock | ||
1625 | * @state: the state to acquire the glock in | ||
1626 | * @flags: modifier flags for the aquisition | ||
1627 | * | ||
1628 | * Returns: errno | ||
1629 | */ | ||
1630 | |||
1631 | void gfs2_glock_prefetch_num(struct gfs2_sbd *sdp, u64 number, | ||
1632 | const struct gfs2_glock_operations *glops, | ||
1633 | unsigned int state, int flags) | ||
1634 | { | ||
1635 | struct gfs2_glock *gl; | ||
1636 | int error; | ||
1637 | |||
1638 | if (atomic_read(&sdp->sd_reclaim_count) < | ||
1639 | gfs2_tune_get(sdp, gt_reclaim_limit)) { | ||
1640 | error = gfs2_glock_get(sdp, number, glops, CREATE, &gl); | ||
1641 | if (!error) { | ||
1642 | gfs2_glock_prefetch(gl, state, flags); | ||
1643 | gfs2_glock_put(gl); | ||
1644 | } | ||
1645 | } | ||
1646 | } | ||
1647 | |||
1648 | /** | ||
1649 | * gfs2_lvb_hold - attach a LVB from a glock | 1587 | * gfs2_lvb_hold - attach a LVB from a glock |
1650 | * @gl: The glock in question | 1588 | * @gl: The glock in question |
1651 | * | 1589 | * |
@@ -1781,15 +1719,11 @@ void gfs2_glock_cb(void *cb_data, unsigned int type, void *data) | |||
1781 | 1719 | ||
1782 | static int demote_ok(struct gfs2_glock *gl) | 1720 | static int demote_ok(struct gfs2_glock *gl) |
1783 | { | 1721 | { |
1784 | struct gfs2_sbd *sdp = gl->gl_sbd; | ||
1785 | const struct gfs2_glock_operations *glops = gl->gl_ops; | 1722 | const struct gfs2_glock_operations *glops = gl->gl_ops; |
1786 | int demote = 1; | 1723 | int demote = 1; |
1787 | 1724 | ||
1788 | if (test_bit(GLF_STICKY, &gl->gl_flags)) | 1725 | if (test_bit(GLF_STICKY, &gl->gl_flags)) |
1789 | demote = 0; | 1726 | demote = 0; |
1790 | else if (test_bit(GLF_PREFETCH, &gl->gl_flags)) | ||
1791 | demote = time_after_eq(jiffies, gl->gl_stamp + | ||
1792 | gfs2_tune_get(sdp, gt_prefetch_secs) * HZ); | ||
1793 | else if (glops->go_demote_ok) | 1727 | else if (glops->go_demote_ok) |
1794 | demote = glops->go_demote_ok(gl); | 1728 | demote = glops->go_demote_ok(gl); |
1795 | 1729 | ||