ocfs2 patch to track delayed orphan scan timer statistics
authorSrinivas Eeda <srinivas.eeda@oracle.com>
Thu, 4 Jun 2009 00:02:56 +0000 (17:02 -0700)
committerJoel Becker <joel.becker@oracle.com>
Thu, 4 Jun 2009 02:14:31 +0000 (19:14 -0700)
Patch to track delayed orphan scan timer statistics.

Modifies ocfs2_osb_dump to print the following:
  Orphan Scan=> Local: 10  Global: 21  Last Scan: 67 seconds ago

Signed-off-by: Srinivas Eeda <srinivas.eeda@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
fs/ocfs2/journal.c
fs/ocfs2/ocfs2.h
fs/ocfs2/super.c

index 44ed768..4a3b9e6 100644 (file)
@@ -1900,6 +1900,8 @@ void ocfs2_queue_orphan_scan(struct ocfs2_super *osb)
         * number and update LVB so other node will skip the scan for a while
         */
        seqno++;
+       os->os_count++;
+       os->os_scantime = CURRENT_TIME;
 unlock:
        ocfs2_orphan_scan_unlock(osb, seqno, DLM_LOCK_EX);
 out:
@@ -1939,6 +1941,8 @@ int ocfs2_orphan_scan_init(struct ocfs2_super *osb)
 
        os = &osb->osb_orphan_scan;
        os->os_osb = osb;
+       os->os_count = 0;
+       os->os_scantime = CURRENT_TIME;
        mutex_init(&os->os_lock);
 
        INIT_DELAYED_WORK(&os->os_orphan_scan_work,
index 1fde52c..ab285be 100644 (file)
@@ -156,7 +156,9 @@ struct ocfs2_orphan_scan {
        struct ocfs2_super      *os_osb;
        struct ocfs2_lock_res   os_lockres;     /* lock to synchronize scans */
        struct delayed_work     os_orphan_scan_work;
-       u32                     os_seqno;       /* incremented on every scan */
+       struct timespec         os_scantime;  /* time this node ran the scan */
+       u32                     os_count;      /* tracks node specific scans */
+       u32                     os_seqno;       /* tracks cluster wide scans */
 };
 
 struct ocfs2_dlm_debug {
index 44ac27e..d05f3ca 100644 (file)
@@ -208,6 +208,7 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
        int i;
        struct ocfs2_cluster_connection *cconn = osb->cconn;
        struct ocfs2_recovery_map *rm = osb->recovery_map;
+       struct ocfs2_orphan_scan *os;
 
        out += snprintf(buf + out, len - out,
                        "%10s => Id: %-s  Uuid: %-s  Gen: 0x%X  Label: %-s\n",
@@ -309,6 +310,13 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
                                i, osb->slot_recovery_generations[i]);
        }
 
+       os = &osb->osb_orphan_scan;
+       out += snprintf(buf + out, len - out, "Orphan Scan=> ");
+       out += snprintf(buf + out, len - out, "Local: %u  Global: %u ",
+                       os->os_count, os->os_seqno);
+       out += snprintf(buf + out, len - out, " Last Scan: %lu seconds ago\n",
+                       (get_seconds() - os->os_scantime.tv_sec));
+
        return out;
 }