]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
gfs2: Dump nrpages for inodes and their glocks
authorBob Peterson <rpeterso@redhat.com>
Wed, 18 Apr 2018 19:05:01 +0000 (12:05 -0700)
committerAndreas Gruenbacher <agruenba@redhat.com>
Wed, 12 Dec 2018 11:33:23 +0000 (12:33 +0100)
This patch is based on an idea from Steve Whitehouse. The idea is
to dump the number of pages for inodes in the glock dumps.
The additional locking required me to drop const from quite a few
places.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/glock.c
fs/gfs2/glock.h
fs/gfs2/glops.c
fs/gfs2/incore.h
fs/gfs2/rgrp.c
fs/gfs2/rgrp.h

index 05431324b262b265683bf7efdb439f8bbf6cf8e7..b92740edc4169998772d8251010deac232f8405e 100644 (file)
@@ -1777,7 +1777,7 @@ static const char *gflags2str(char *buf, const struct gfs2_glock *gl)
  *
  */
 
-void gfs2_dump_glock(struct seq_file *seq, const struct gfs2_glock *gl)
+void gfs2_dump_glock(struct seq_file *seq, struct gfs2_glock *gl)
 {
        const struct gfs2_glock_operations *glops = gl->gl_ops;
        unsigned long long dtime;
index 5e12220cc0c241100337723719e2bf14f026f836..8949bf28b249f94ed9f2c8ee4c70bdd4dbb12857 100644 (file)
@@ -202,7 +202,7 @@ extern int gfs2_glock_nq_num(struct gfs2_sbd *sdp, u64 number,
                             struct gfs2_holder *gh);
 extern int gfs2_glock_nq_m(unsigned int num_gh, struct gfs2_holder *ghs);
 extern void gfs2_glock_dq_m(unsigned int num_gh, struct gfs2_holder *ghs);
-extern void gfs2_dump_glock(struct seq_file *seq, const struct gfs2_glock *gl);
+extern void gfs2_dump_glock(struct seq_file *seq, struct gfs2_glock *gl);
 #define GLOCK_BUG_ON(gl,x) do { if (unlikely(x)) { gfs2_dump_glock(NULL, gl); BUG(); } } while(0)
 extern __printf(2, 3)
 void gfs2_print_dbg(struct seq_file *seq, const char *fmt, ...);
index f79ef9525e33ac2f508fac41977699dc31365590..f15b4c57c4bd72b6ee112d1fa5936042f8229e26 100644 (file)
@@ -467,17 +467,25 @@ static int inode_go_lock(struct gfs2_holder *gh)
  *
  */
 
-static void inode_go_dump(struct seq_file *seq, const struct gfs2_glock *gl)
+static void inode_go_dump(struct seq_file *seq, struct gfs2_glock *gl)
 {
-       const struct gfs2_inode *ip = gl->gl_object;
+       struct gfs2_inode *ip = gl->gl_object;
+       struct inode *inode = &ip->i_inode;
+       unsigned long nrpages;
+
        if (ip == NULL)
                return;
-       gfs2_print_dbg(seq, " I: n:%llu/%llu t:%u f:0x%02lx d:0x%08x s:%llu\n",
+
+       xa_lock_irq(&inode->i_data.i_pages);
+       nrpages = inode->i_data.nrpages;
+       xa_unlock_irq(&inode->i_data.i_pages);
+
+       gfs2_print_dbg(seq, " I: n:%llu/%llu t:%u f:0x%02lx d:0x%08x s:%llu p:%lu\n",
                  (unsigned long long)ip->i_no_formal_ino,
                  (unsigned long long)ip->i_no_addr,
                  IF2DT(ip->i_inode.i_mode), ip->i_flags,
                  (unsigned int)ip->i_diskflags,
-                 (unsigned long long)i_size_read(&ip->i_inode));
+                 (unsigned long long)i_size_read(inode), nrpages);
 }
 
 /**
index 663759abe60d74a2ded5f1b8542b9b9dd8c237a2..e10e0b0a7cd58e513e4798b2ee3ef8184d9d8bad 100644 (file)
@@ -243,7 +243,7 @@ struct gfs2_glock_operations {
        int (*go_demote_ok) (const struct gfs2_glock *gl);
        int (*go_lock) (struct gfs2_holder *gh);
        void (*go_unlock) (struct gfs2_holder *gh);
-       void (*go_dump)(struct seq_file *seq, const struct gfs2_glock *gl);
+       void (*go_dump)(struct seq_file *seq, struct gfs2_glock *gl);
        void (*go_callback)(struct gfs2_glock *gl, bool remote);
        const int go_type;
        const unsigned long go_flags;
index 8d79165703621479cb5184cac89ef8f52c336a60..831d7cb5a49c4bf4fdaa2f208938ecc607d9016b 100644 (file)
@@ -2256,7 +2256,7 @@ static void rgblk_free(struct gfs2_sbd *sdp, struct gfs2_rgrpd *rgd,
  *
  */
 
-void gfs2_rgrp_dump(struct seq_file *seq, const struct gfs2_glock *gl)
+void gfs2_rgrp_dump(struct seq_file *seq, struct gfs2_glock *gl)
 {
        struct gfs2_rgrpd *rgd = gl->gl_object;
        struct gfs2_blkreserv *trs;
index b596c3d179888124902594a8f4613daee7923e24..499079a9dbbed6cb3e11837732f7a568fcae31db 100644 (file)
@@ -72,7 +72,7 @@ extern void gfs2_rlist_add(struct gfs2_inode *ip, struct gfs2_rgrp_list *rlist,
 extern void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist);
 extern void gfs2_rlist_free(struct gfs2_rgrp_list *rlist);
 extern u64 gfs2_ri_total(struct gfs2_sbd *sdp);
-extern void gfs2_rgrp_dump(struct seq_file *seq, const struct gfs2_glock *gl);
+extern void gfs2_rgrp_dump(struct seq_file *seq, struct gfs2_glock *gl);
 extern int gfs2_rgrp_send_discards(struct gfs2_sbd *sdp, u64 offset,
                                   struct buffer_head *bh,
                                   const struct gfs2_bitmap *bi, unsigned minlen, u64 *ptrimmed);