From owner-svn-src-user@FreeBSD.ORG Fri Apr 17 00:05:35 2015 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 7C91E5F5; Fri, 17 Apr 2015 00:05:35 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5DD28C2C; Fri, 17 Apr 2015 00:05:35 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t3H05ZJ2071110; Fri, 17 Apr 2015 00:05:35 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t3H05Ytv071108; Fri, 17 Apr 2015 00:05:34 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201504170005.t3H05Ytv071108@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Fri, 17 Apr 2015 00:05:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r281631 - in user/delphij/zfs-arc-rebase/sys/cddl/compat/opensolaris: kern sys X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Apr 2015 00:05:35 -0000 Author: delphij Date: Fri Apr 17 00:05:34 2015 New Revision: 281631 URL: https://svnweb.freebsd.org/changeset/base/281631 Log: Implement a hacky implementation of ks_update callback. Modified: user/delphij/zfs-arc-rebase/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c user/delphij/zfs-arc-rebase/sys/cddl/compat/opensolaris/sys/kstat.h Modified: user/delphij/zfs-arc-rebase/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c ============================================================================== --- user/delphij/zfs-arc-rebase/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c Thu Apr 16 22:44:51 2015 (r281630) +++ user/delphij/zfs-arc-rebase/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c Fri Apr 17 00:05:34 2015 (r281631) @@ -56,6 +56,7 @@ kstat_create(char *module, int instance, */ ksp = malloc(sizeof(*ksp), M_KSTAT, M_WAITOK); ksp->ks_ndata = ndata; + ksp->ks_update = NULL; /* * Create sysctl tree for those statistics: @@ -96,6 +97,23 @@ kstat_create(char *module, int instance, } static int +kstat_update(SYSCTL_HANDLER_ARGS) +{ + kstat_t *ksp = arg1; + uint64_t val; + struct bintime bt; + + KASSERT(ksp->ks_update != NULL, + ("ksp(%p)->ks_update is NULL", ksp)); + + ksp->ks_update(ksp, KSTAT_READ); + bintime(&bt); + val = (uint64_t)(bttosbt(bt)); + + return sysctl_handle_64(oidp, &val, 0, req); +} + +static int kstat_sysctl(SYSCTL_HANDLER_ARGS) { kstat_named_t *ksent = arg1; @@ -112,6 +130,7 @@ kstat_install(kstat_t *ksp) u_int i; ksent = ksp->ks_data; + for (i = 0; i < ksp->ks_ndata; i++, ksent++) { KASSERT(ksent->data_type == KSTAT_DATA_UINT64, ("data_type=%d", ksent->data_type)); @@ -120,6 +139,17 @@ kstat_install(kstat_t *ksp) CTLTYPE_U64 | CTLFLAG_RD, ksent, sizeof(*ksent), kstat_sysctl, "QU", ksent->desc); } + /* + * If we have a ks_update callback, create an additional sysctl + * node that would refresh the subtree and return the system time + * after that. + */ + if (ksp->ks_update != NULL) { + SYSCTL_ADD_PROC(&ksp->ks_sysctl_ctx, + SYSCTL_CHILDREN(ksp->ks_sysctl_root), OID_AUTO, "snapshot_bintime", + CTLTYPE_U64 | CTLFLAG_RD, ksp, sizeof(*ksp), + kstat_update, "QU", "Snapshot time"); + } } void Modified: user/delphij/zfs-arc-rebase/sys/cddl/compat/opensolaris/sys/kstat.h ============================================================================== --- user/delphij/zfs-arc-rebase/sys/cddl/compat/opensolaris/sys/kstat.h Thu Apr 16 22:44:51 2015 (r281630) +++ user/delphij/zfs-arc-rebase/sys/cddl/compat/opensolaris/sys/kstat.h Fri Apr 17 00:05:34 2015 (r281631) @@ -35,10 +35,14 @@ #define KSTAT_FLAG_VIRTUAL 0x01 +#define KSTAT_READ 0 +#define KSTAT_WRITE 1 + typedef struct kstat { void *ks_data; u_int ks_ndata; #ifdef _KERNEL + int (*ks_update)(struct kstat *, int); /* dynamic update callback */ struct sysctl_ctx_list ks_sysctl_ctx; struct sysctl_oid *ks_sysctl_root; #endif