Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Jun 2008 19:26:18 GMT
From:      Mateusz Guzik <mjguzik@gmail.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/124881: [devfs.rules][patch][request] Add possibility to check which ruleset is assigned to specified mount-point
Message-ID:  <200806221926.m5MJQIMC019203@www.freebsd.org>
Resent-Message-ID: <200806221930.m5MJU0kR058344@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         124881
>Category:       kern
>Synopsis:       [devfs.rules][patch][request] Add possibility to check which ruleset is assigned to specified mount-point
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jun 22 19:30:00 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Mateusz Guzik
>Release:        8.0-CURRENT
>Organization:
>Environment:
FreeBSD eternal 8.0-CURRENT FreeBSD 8.0-CURRENT #11: Sun Jun 22 20:56:53 CEST 2008     f@eternal:/usr/obj/usr/src/sys/ETERNAL  i386

>Description:
Manual page devd(8) does not mention how one can check which ruleset is assigned to specified mount-point and after reading sources I still couldn't find any way to do it. 



>How-To-Repeat:

>Fix:
Proposed patch adds support for `rule showset' to devfs.

Example usage:
[21:07] eternal:~ # devfs rule showset
0
[21:07] eternal:~ # devfs ruleset 10  
[21:07] eternal:~ # devfs rule showset
10


Patch attached with submission follows:

--- sys/fs/devfs/devfs.h.orig	2008-06-22 14:09:46.000000000 +0200
+++ sys/fs/devfs/devfs.h	2008-06-22 15:27:46.000000000 +0200
@@ -111,10 +111,11 @@
 #define	DEVFSIO_RGETNEXT       	_IOWR('D', 4, struct devfs_rule)
 
 #define	DEVFSIO_SUSE		_IOW('D', 10, devfs_rsnum)
 #define	DEVFSIO_SAPPLY		_IOW('D', 11, devfs_rsnum)
 #define	DEVFSIO_SGETNEXT	_IOWR('D', 12, devfs_rsnum)
+#define	DEVFSIO_SGETCURRENT	_IOWR('D', 13, devfs_rsnum)
 
 /* XXX: DEVFSIO_RS_GET_INFO for refcount, active if any, etc. */
 
 #ifdef _KERNEL
 
--- sys/fs/devfs/devfs_rule.c.orig	2008-03-20 17:08:42.000000000 +0100
+++ sys/fs/devfs/devfs_rule.c	2008-06-22 15:58:30.000000000 +0200
@@ -285,10 +285,13 @@
 			error = ESRCH;
 			break;
 		}
 		devfs_ruleset_applydm(ds, dm);
 		break;
+	case DEVFSIO_SGETCURRENT:
+		*(devfs_rsnum *)data = dm->dm_ruleset;
+		break;
 	case DEVFSIO_SGETNEXT:
 		rsnum = *(devfs_rsnum *)data;
 		TAILQ_FOREACH(ds, &devfs_rulesets, ds_list) {
 			if (ds->ds_number > rsnum)
 				break;
--- sbin/devfs/rule.c.orig	2008-06-22 15:19:59.000000000 +0200
+++ sbin/devfs/rule.c	2008-06-22 15:20:03.000000000 +0200
@@ -53,19 +53,20 @@
 static void rulespec_intok(struct devfs_rule *dr, int ac, char **av,
     devfs_rsnum rsnum);
 static void rulespec_outfp(FILE *fp, struct devfs_rule *dr);
 
 static command_t rule_add, rule_apply, rule_applyset;
-static command_t rule_del, rule_delset, rule_show, rule_showsets;
+static command_t rule_del, rule_delset, rule_show, rule_showset, rule_showsets;
 
 static ctbl_t ctbl_rule = {
 	{ "add",		rule_add },
 	{ "apply",		rule_apply },
 	{ "applyset",		rule_applyset },
 	{ "del",		rule_del },
 	{ "delset",		rule_delset },
 	{ "show",		rule_show },
+	{ "showset",		rule_showset },
 	{ "showsets",		rule_showsets },
 	{ NULL,			NULL }
 };
 
 static struct intstr ist_type[] = {
@@ -227,10 +228,26 @@
 	}
 	return (0);
 }
 
 static int
+rule_showset(int ac, char **av __unused)
+{
+	devfs_rsnum rsnum;
+
+	if (ac != 1)
+		usage();
+
+	if (ioctl(mpfd, DEVFSIO_SGETCURRENT, &rsnum) != -1)
+		printf("%d\n", rsnum);
+
+	if (errno != 0)
+		err(1, "ioctl DEVFSIO_SGETCURRENT");
+	return (0);
+}
+
+static int
 rule_showsets(int ac, char **av __unused)
 {
 	devfs_rsnum rsnum;
 
 	if (ac != 1)
--- sbin/devfs/devfs.8.orig	2006-12-29 23:45:12.000000000 +0100
+++ sbin/devfs/devfs.8	2008-06-22 15:40:06.000000000 +0200
@@ -132,10 +132,12 @@
 Display the rule number
 .Ar rulenum ,
 or all the rules in the ruleset.
 The output lines (one line per rule) are expected to be valid
 .Ar rulespec Ns s .
+.It Cm rule showset
+Display the number of the ruleset associated with the mount-point.
 .It Cm rule showsets
 Report the numbers of existing rulesets.
 .It Cm ruleset Ar ruleset
 Set ruleset number
 .Ar ruleset


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200806221926.m5MJQIMC019203>