FreeBSD Bugzilla – Attachment 166792 Details for
Bug 207049
net-mgmt/collectd5: fix lost functionality in disk plugin
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
collectd5.diff (text/plain), 3.92 KB, created by
Guido Falsi
on 2016-02-09 09:56:01 UTC
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Guido Falsi
Created:
2016-02-09 09:56:01 UTC
Size:
3.92 KB
patch
obsolete
>Index: Makefile >=================================================================== >--- Makefile (revision 408543) >+++ Makefile (working copy) >@@ -3,6 +3,7 @@ > > PORTNAME= collectd > PORTVERSION= 5.5.1 >+PORTREVISION= 1 > CATEGORIES= net-mgmt > MASTER_SITES= https://collectd.org/files/ \ > http://collectd.org/files/ >Index: files/patch-src_disk.c >=================================================================== >--- files/patch-src_disk.c (revision 408543) >+++ files/patch-src_disk.c (working copy) >@@ -43,3 +43,118 @@ > #elif HAVE_LIBKSTAT > kstat_t *ksp_chain; > >+@@ -505,6 +527,114 @@ static int disk_read (void) >+ IOObjectRelease (disk_list); >+ /* #endif HAVE_IOKIT_IOKITLIB_H */ >+ >++#elif KERNEL_FREEBSD >++ int retry, dirty; >++ >++ void *snap = NULL; >++ struct devstat *snap_iter; >++ >++ struct gident *geom_id; >++ >++ const char *disk_name; >++ long double read_time, write_time; >++ >++ for (retry = 0, dirty = 1; retry < 5 && dirty == 1; retry++) { >++ if (snap != NULL) >++ geom_stats_snapshot_free(snap); >++ >++ /* Get a fresh copy of stats snapshot */ >++ snap = geom_stats_snapshot_get(); >++ if (snap == NULL) { >++ ERROR("disk plugin: geom_stats_snapshot_get() failed."); >++ return (-1); >++ } >++ >++ /* Check if we have dirty read from this snapshot */ >++ dirty = 0; >++ geom_stats_snapshot_reset(snap); >++ while ((snap_iter = geom_stats_snapshot_next(snap)) != NULL) { >++ if (snap_iter->id == NULL) >++ continue; >++ geom_id = geom_lookupid(&geom_tree, snap_iter->id); >++ >++ /* New device? refresh GEOM tree */ >++ if (geom_id == NULL) { >++ geom_deletetree(&geom_tree); >++ if (geom_gettree(&geom_tree) != 0) { >++ ERROR("disk plugin: geom_gettree() failed"); >++ geom_stats_snapshot_free(snap); >++ return (-1); >++ } >++ geom_id = geom_lookupid(&geom_tree, snap_iter->id); >++ } >++ /* >++ * This should be rare: the device come right before we take the >++ * snapshot and went away right after it. We will handle this >++ * case later, so don't mark dirty but silently ignore it. >++ */ >++ if (geom_id == NULL) >++ continue; >++ >++ /* Only collect PROVIDER data */ >++ if (geom_id->lg_what != ISPROVIDER) >++ continue; >++ >++ /* Only collect data when rank is 1 (physical devices) */ >++ if (((struct gprovider *)(geom_id->lg_ptr))->lg_geom->lg_rank != 1) >++ continue; >++ >++ /* Check if this is a dirty read quit for another try */ >++ if (snap_iter->sequence0 != snap_iter->sequence1) { >++ dirty = 1; >++ break; >++ } >++ } >++ } >++ >++ /* Reset iterator */ >++ geom_stats_snapshot_reset(snap); >++ for (;;) { >++ snap_iter = geom_stats_snapshot_next(snap); >++ if (snap_iter == NULL) >++ break; >++ >++ if (snap_iter->id == NULL) >++ continue; >++ geom_id = geom_lookupid(&geom_tree, snap_iter->id); >++ if (geom_id == NULL) >++ continue; >++ if (geom_id->lg_what != ISPROVIDER) >++ continue; >++ if (((struct gprovider *)(geom_id->lg_ptr))->lg_geom->lg_rank != 1) >++ continue; >++ /* Skip dirty reads, if present */ >++ if (dirty && (snap_iter->sequence0 != snap_iter->sequence1)) >++ continue; >++ >++ disk_name = ((struct gprovider *)geom_id->lg_ptr)->lg_name; >++ >++ if ((snap_iter->bytes[1] != 0) || (snap_iter->bytes[2] != 0)) { >++ disk_submit(disk_name, "disk_octets", >++ (derive_t)snap_iter->bytes[1], >++ (derive_t)snap_iter->bytes[2]); >++ } >++ >++ if ((snap_iter->operations[1] != 0) || (snap_iter->operations[2] != 0)) { >++ disk_submit(disk_name, "disk_ops", >++ (derive_t)snap_iter->operations[1], >++ (derive_t)snap_iter->operations[2]); >++ } >++ >++ read_time = devstat_compute_etime(&snap_iter->duration[DEVSTAT_READ], NULL); >++ write_time = devstat_compute_etime(&snap_iter->duration[DEVSTAT_WRITE], NULL); >++ if ((read_time != 0) || (write_time != 0)) { >++ disk_submit (disk_name, "disk_time", >++ (derive_t)(read_time*1000), (derive_t)(write_time*1000)); >++ } >++ } >++ geom_stats_snapshot_free(snap); >++/* #endif KERNEL_FREEBSD */ >++ >+ #elif KERNEL_LINUX >+ FILE *fh; >+ char buffer[1024];
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
ports
:
maintainer-approval+
Actions:
View
|
Diff
Attachments on
bug 207049
: 166792