Skip to content

Commit

Permalink
create /proc/sys/kernel/spl/gitrev with git hash
Browse files Browse the repository at this point in the history
The existing mechanisms for determining what code is running in the
kernel do not always correctly report the git hash.  The versions
reported there do not reflect changes made since `configure` was run
(i.e. incremental builds do not update the version) and they are
misleading if git tags are not set up properly.  This applies to
`modinfo zfs`, `dmesg`, and `/sys/module/zfs/version`.

There are complicated requirements on how the existing version is
generated.  Therefore we are leaving that alone, and adding a new
mechanism to record and retrieve the git hash:
`cat /proc/sys/kernel/spl/gitrev`

The gitrev is re-generated at compile time, when running `make`
(including for incremental builds).  The value is the output of `git
describe` (or "unknown" if not in a git repo or there are uncommitted
changes).

We're also removing /proc/sys/kernel/spl/version, which was never very
useful.

Signed-off-by: Matthew Ahrens <mahrens@delphix.com>
  • Loading branch information
ahrens committed Sep 27, 2018
1 parent a7165d7 commit 3db9092
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 6 deletions.
6 changes: 6 additions & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ EXTRA_DIST += META AUTHORS COPYRIGHT LICENSE NEWS NOTICE README.md

@CODE_COVERAGE_RULES@

.PHONY: gitrev
gitrev:
-${top_srcdir}/scripts/make_gitrev.sh

BUILT_SOURCES = gitrev

distclean-local::
-$(RM) -R autom4te*.cache
-find . \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \
Expand Down
2 changes: 1 addition & 1 deletion include/spl/sys/sysmacros.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@
#define DTRACE_PROBE4(a, b, c, d, e, f, g, h, i) ((void)0)

/* Missing globals */
extern char spl_version[32];
extern char spl_gitrev[64];
extern unsigned long spl_hostid;

/* Missing misc functions */
Expand Down
5 changes: 3 additions & 2 deletions module/spl/spl-generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,10 @@
#include <sys/random.h>
#include <sys/strings.h>
#include <linux/kmod.h>
#include <sys/zfs_gitrev.h>

char spl_version[32] = "SPL v" ZFS_META_VERSION "-" ZFS_META_RELEASE;
EXPORT_SYMBOL(spl_version);
char spl_gitrev[64] = ZFS_META_GITREV;
EXPORT_SYMBOL(spl_gitrev);

/* BEGIN CSTYLED */
unsigned long spl_hostid = 0;
Expand Down
6 changes: 3 additions & 3 deletions module/spl/spl-proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -659,9 +659,9 @@ static struct ctl_table spl_table[] = {
* sysctl(8) prefers to go via /proc for portability.
*/
{
.procname = "version",
.data = spl_version,
.maxlen = sizeof (spl_version),
.procname = "gitrev",
.data = spl_gitrev,
.maxlen = sizeof (spl_gitrev),
.mode = 0444,
.proc_handler = &proc_dostring,
},
Expand Down
24 changes: 24 additions & 0 deletions scripts/make_gitrev.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/sh

file=include/spl/sys/zfs_gitrev.h

#
# Set default file contents in case we bail.
#
rm -f $file
echo "#define\tZFS_META_GITREV \"unknown\"" >>$file

#
# Check if we are in a git repo.
#
git rev-parse --git-dir > /dev/null 2>&1 || exit

#
# Check if there are uncommitted changes
#
git diff-index --quiet HEAD -- || exit

rev=$(git describe 2>/dev/null)

rm -f $file
echo "#define\tZFS_META_GITREV \"${rev}\"" >>$file

0 comments on commit 3db9092

Please sign in to comment.