diff options
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/glock.c | 13 | ||||
-rw-r--r-- | fs/gfs2/incore.h | 2 | ||||
-rw-r--r-- | fs/gfs2/meta_io.c | 2 | ||||
-rw-r--r-- | fs/gfs2/trace_gfs2.h | 10 |
4 files changed, 21 insertions, 6 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index 1019183232fe..0c6c69090140 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c | |||
@@ -170,6 +170,7 @@ void gfs2_glock_add_to_lru(struct gfs2_glock *gl) | |||
170 | atomic_inc(&lru_count); | 170 | atomic_inc(&lru_count); |
171 | 171 | ||
172 | list_add_tail(&gl->gl_lru, &lru_list); | 172 | list_add_tail(&gl->gl_lru, &lru_list); |
173 | set_bit(GLF_LRU, &gl->gl_flags); | ||
173 | spin_unlock(&lru_lock); | 174 | spin_unlock(&lru_lock); |
174 | } | 175 | } |
175 | 176 | ||
@@ -1364,6 +1365,7 @@ static int gfs2_shrink_glock_memory(struct shrinker *shrink, int nr, gfp_t gfp_m | |||
1364 | while(nr && !list_empty(&lru_list)) { | 1365 | while(nr && !list_empty(&lru_list)) { |
1365 | gl = list_entry(lru_list.next, struct gfs2_glock, gl_lru); | 1366 | gl = list_entry(lru_list.next, struct gfs2_glock, gl_lru); |
1366 | list_del_init(&gl->gl_lru); | 1367 | list_del_init(&gl->gl_lru); |
1368 | clear_bit(GLF_LRU, &gl->gl_flags); | ||
1367 | atomic_dec(&lru_count); | 1369 | atomic_dec(&lru_count); |
1368 | 1370 | ||
1369 | /* Test for being demotable */ | 1371 | /* Test for being demotable */ |
@@ -1386,6 +1388,7 @@ static int gfs2_shrink_glock_memory(struct shrinker *shrink, int nr, gfp_t gfp_m | |||
1386 | } | 1388 | } |
1387 | nr_skipped++; | 1389 | nr_skipped++; |
1388 | list_add(&gl->gl_lru, &skipped); | 1390 | list_add(&gl->gl_lru, &skipped); |
1391 | set_bit(GLF_LRU, &gl->gl_flags); | ||
1389 | } | 1392 | } |
1390 | list_splice(&skipped, &lru_list); | 1393 | list_splice(&skipped, &lru_list); |
1391 | atomic_add(nr_skipped, &lru_count); | 1394 | atomic_add(nr_skipped, &lru_count); |
@@ -1598,9 +1601,11 @@ static int dump_holder(struct seq_file *seq, const struct gfs2_holder *gh) | |||
1598 | return 0; | 1601 | return 0; |
1599 | } | 1602 | } |
1600 | 1603 | ||
1601 | static const char *gflags2str(char *buf, const unsigned long *gflags) | 1604 | static const char *gflags2str(char *buf, const struct gfs2_glock *gl) |
1602 | { | 1605 | { |
1606 | const unsigned long *gflags = &gl->gl_flags; | ||
1603 | char *p = buf; | 1607 | char *p = buf; |
1608 | |||
1604 | if (test_bit(GLF_LOCK, gflags)) | 1609 | if (test_bit(GLF_LOCK, gflags)) |
1605 | *p++ = 'l'; | 1610 | *p++ = 'l'; |
1606 | if (test_bit(GLF_DEMOTE, gflags)) | 1611 | if (test_bit(GLF_DEMOTE, gflags)) |
@@ -1623,6 +1628,10 @@ static const char *gflags2str(char *buf, const unsigned long *gflags) | |||
1623 | *p++ = 'F'; | 1628 | *p++ = 'F'; |
1624 | if (test_bit(GLF_QUEUED, gflags)) | 1629 | if (test_bit(GLF_QUEUED, gflags)) |
1625 | *p++ = 'q'; | 1630 | *p++ = 'q'; |
1631 | if (test_bit(GLF_LRU, gflags)) | ||
1632 | *p++ = 'L'; | ||
1633 | if (gl->gl_object) | ||
1634 | *p++ = 'o'; | ||
1626 | *p = 0; | 1635 | *p = 0; |
1627 | return buf; | 1636 | return buf; |
1628 | } | 1637 | } |
@@ -1661,7 +1670,7 @@ static int __dump_glock(struct seq_file *seq, const struct gfs2_glock *gl) | |||
1661 | state2str(gl->gl_state), | 1670 | state2str(gl->gl_state), |
1662 | gl->gl_name.ln_type, | 1671 | gl->gl_name.ln_type, |
1663 | (unsigned long long)gl->gl_name.ln_number, | 1672 | (unsigned long long)gl->gl_name.ln_number, |
1664 | gflags2str(gflags_buf, &gl->gl_flags), | 1673 | gflags2str(gflags_buf, gl), |
1665 | state2str(gl->gl_target), | 1674 | state2str(gl->gl_target), |
1666 | state2str(gl->gl_demote_state), dtime, | 1675 | state2str(gl->gl_demote_state), dtime, |
1667 | atomic_read(&gl->gl_ail_count), | 1676 | atomic_read(&gl->gl_ail_count), |
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index 870a89d6d4dc..48eb1eed51b5 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h | |||
@@ -200,6 +200,8 @@ enum { | |||
200 | GLF_INITIAL = 10, | 200 | GLF_INITIAL = 10, |
201 | GLF_FROZEN = 11, | 201 | GLF_FROZEN = 11, |
202 | GLF_QUEUED = 12, | 202 | GLF_QUEUED = 12, |
203 | GLF_LRU = 13, | ||
204 | GLF_OBJECT = 14, /* Used only for tracing */ | ||
203 | }; | 205 | }; |
204 | 206 | ||
205 | struct gfs2_glock { | 207 | struct gfs2_glock { |
diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c index 675349b5a133..747238cd9f96 100644 --- a/fs/gfs2/meta_io.c +++ b/fs/gfs2/meta_io.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include "rgrp.h" | 31 | #include "rgrp.h" |
32 | #include "trans.h" | 32 | #include "trans.h" |
33 | #include "util.h" | 33 | #include "util.h" |
34 | #include "trace_gfs2.h" | ||
34 | 35 | ||
35 | static int gfs2_aspace_writepage(struct page *page, struct writeback_control *wbc) | 36 | static int gfs2_aspace_writepage(struct page *page, struct writeback_control *wbc) |
36 | { | 37 | { |
@@ -310,6 +311,7 @@ void gfs2_remove_from_journal(struct buffer_head *bh, struct gfs2_trans *tr, int | |||
310 | struct gfs2_bufdata *bd = bh->b_private; | 311 | struct gfs2_bufdata *bd = bh->b_private; |
311 | 312 | ||
312 | if (test_clear_buffer_pinned(bh)) { | 313 | if (test_clear_buffer_pinned(bh)) { |
314 | trace_gfs2_pin(bd, 0); | ||
313 | atomic_dec(&sdp->sd_log_pinned); | 315 | atomic_dec(&sdp->sd_log_pinned); |
314 | list_del_init(&bd->bd_le.le_list); | 316 | list_del_init(&bd->bd_le.le_list); |
315 | if (meta) { | 317 | if (meta) { |
diff --git a/fs/gfs2/trace_gfs2.h b/fs/gfs2/trace_gfs2.h index cedb0bb96d96..9133d0aaac26 100644 --- a/fs/gfs2/trace_gfs2.h +++ b/fs/gfs2/trace_gfs2.h | |||
@@ -40,7 +40,9 @@ | |||
40 | {(1UL << GLF_REPLY_PENDING), "r" }, \ | 40 | {(1UL << GLF_REPLY_PENDING), "r" }, \ |
41 | {(1UL << GLF_INITIAL), "I" }, \ | 41 | {(1UL << GLF_INITIAL), "I" }, \ |
42 | {(1UL << GLF_FROZEN), "F" }, \ | 42 | {(1UL << GLF_FROZEN), "F" }, \ |
43 | {(1UL << GLF_QUEUED), "q" }) | 43 | {(1UL << GLF_QUEUED), "q" }, \ |
44 | {(1UL << GLF_LRU), "L" }, \ | ||
45 | {(1UL << GLF_OBJECT), "o" }) | ||
44 | 46 | ||
45 | #ifndef NUMPTY | 47 | #ifndef NUMPTY |
46 | #define NUMPTY | 48 | #define NUMPTY |
@@ -94,7 +96,7 @@ TRACE_EVENT(gfs2_glock_state_change, | |||
94 | __entry->new_state = glock_trace_state(new_state); | 96 | __entry->new_state = glock_trace_state(new_state); |
95 | __entry->tgt_state = glock_trace_state(gl->gl_target); | 97 | __entry->tgt_state = glock_trace_state(gl->gl_target); |
96 | __entry->dmt_state = glock_trace_state(gl->gl_demote_state); | 98 | __entry->dmt_state = glock_trace_state(gl->gl_demote_state); |
97 | __entry->flags = gl->gl_flags; | 99 | __entry->flags = gl->gl_flags | (gl->gl_object ? (1UL<<GLF_OBJECT) : 0); |
98 | ), | 100 | ), |
99 | 101 | ||
100 | TP_printk("%u,%u glock %d:%lld state %s to %s tgt:%s dmt:%s flags:%s", | 102 | TP_printk("%u,%u glock %d:%lld state %s to %s tgt:%s dmt:%s flags:%s", |
@@ -127,7 +129,7 @@ TRACE_EVENT(gfs2_glock_put, | |||
127 | __entry->gltype = gl->gl_name.ln_type; | 129 | __entry->gltype = gl->gl_name.ln_type; |
128 | __entry->glnum = gl->gl_name.ln_number; | 130 | __entry->glnum = gl->gl_name.ln_number; |
129 | __entry->cur_state = glock_trace_state(gl->gl_state); | 131 | __entry->cur_state = glock_trace_state(gl->gl_state); |
130 | __entry->flags = gl->gl_flags; | 132 | __entry->flags = gl->gl_flags | (gl->gl_object ? (1UL<<GLF_OBJECT) : 0); |
131 | ), | 133 | ), |
132 | 134 | ||
133 | TP_printk("%u,%u glock %d:%lld state %s => %s flags:%s", | 135 | TP_printk("%u,%u glock %d:%lld state %s => %s flags:%s", |
@@ -161,7 +163,7 @@ TRACE_EVENT(gfs2_demote_rq, | |||
161 | __entry->glnum = gl->gl_name.ln_number; | 163 | __entry->glnum = gl->gl_name.ln_number; |
162 | __entry->cur_state = glock_trace_state(gl->gl_state); | 164 | __entry->cur_state = glock_trace_state(gl->gl_state); |
163 | __entry->dmt_state = glock_trace_state(gl->gl_demote_state); | 165 | __entry->dmt_state = glock_trace_state(gl->gl_demote_state); |
164 | __entry->flags = gl->gl_flags; | 166 | __entry->flags = gl->gl_flags | (gl->gl_object ? (1UL<<GLF_OBJECT) : 0); |
165 | ), | 167 | ), |
166 | 168 | ||
167 | TP_printk("%u,%u glock %d:%lld demote %s to %s flags:%s", | 169 | TP_printk("%u,%u glock %d:%lld demote %s to %s flags:%s", |