Code

Implemented first version of `ping_setopt'
[collectd.git] / src / disk.c
index f6234c22837e6e2642ab515be68d0f0b5097226c..ea4971757b4d5903e2630c6e287bc4d6c34622fb 100644 (file)
@@ -65,6 +65,9 @@ typedef struct diskstats
 {
        char *name;
 
+       /* This overflows in roughly 1361 year */
+       unsigned int poll_count;
+
        unsigned int read_sectors;
        unsigned int write_sectors;
 
@@ -138,6 +141,7 @@ static void partition_write (char *host, char *inst, char *val)
        rrd_update_file (host, file, val, part_ds_def, part_ds_num);
 }
 
+#if DISK_HAVE_READ
 #define BUFSIZE 512
 static void disk_submit (char *disk_name,
                unsigned long long read_count,
@@ -179,7 +183,6 @@ static void partition_submit (char *part_name,
 }
 #undef BUFSIZE
 
-#if DISK_HAVE_READ
 static void disk_read (void)
 {
 #ifdef KERNEL_LINUX
@@ -300,6 +303,10 @@ static void disk_read (void)
                read_bytes  = ds->read_bytes;
                write_bytes = ds->write_bytes;
 
+               /* Don't write to the RRDs if we've just started.. */
+               ds->poll_count++;
+               if (ds->poll_count <= 6)
+                       continue;
 
                if ((read_count == 0) && (write_count == 0))
                        continue;
@@ -337,18 +344,14 @@ static void disk_read (void)
        }
 #endif /* defined(HAVE_LIBKSTAT) */
 } /* static void disk_read (void) */
+#else
+# define disk_read NULL
 #endif /* DISK_HAVE_READ */
 
 void module_register (void)
 {
        plugin_register ("partition", NULL, NULL, partition_write);
-       plugin_register (MODULE_NAME, disk_init,
-#if DISK_HAVE_READ
-                       disk_read,
-#else
-                       NULL,
-#endif
-                       disk_write);
+       plugin_register (MODULE_NAME, disk_init, disk_read, disk_write);
 }
 
 #undef MODULE_NAME