Hi!

El 24/05/15 a les 15:58, Antti Kantee ha escrit:
On 24/05/15 13:33, Robert Millan wrote:
Hi

Please consider attached patch:

     Add a few symlinks which are commonly expected by applications

     /dev/audio    -> audio0
     /dev/sound    -> sound0
     /dev/audioctl -> audioctl0
     /dev/mixer    -> mixer0

Your patch adds a vfs link dependency to a dev component.  vfs does not seem 
necessary for audio; consider in-kernel users that could access the audio 
facilities without going through /dev/audio.  Can you rework your patch to use 
an indirect call?  See what makedevnodes does.

Attached.

--
Robert Millan
diff --git a/sys/rump/dev/lib/libaudio/audio_component.c b/sys/rump/dev/lib/libaudio/audio_component.c
index 1e64985..a6999b7 100644
--- a/sys/rump/dev/lib/libaudio/audio_component.c
+++ b/sys/rump/dev/lib/libaudio/audio_component.c
@@ -57,13 +57,21 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV)
 	if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/audio", '0',
 	    cmaj, AUDIO_DEVICE, 4)) !=0)
 		panic("cannot create audio device nodes: %d", error);
+	if ((error = rump_vfs_makesymlink("audio0", "/dev/audio")) != 0)
+		panic("cannot create audio symlink: %d", error);
 	if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/sound", '0',
 	    cmaj, SOUND_DEVICE, 4)) !=0)
 		panic("cannot create sound device nodes: %d", error);
+	if ((error = rump_vfs_makesymlink("sound0", "/dev/sound")) != 0)
+		panic("cannot create sound symlink: %d", error);
 	if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/audioctl", '0',
 	    cmaj, AUDIOCTL_DEVICE, 4)) !=0)
 		panic("cannot create audioctl device nodes: %d", error);
+	if ((error = rump_vfs_makesymlink("audioctl0", "/dev/audioctl")) != 0)
+		panic("cannot create audioctl symlink: %d", error);
 	if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/mixer", '0',
 	    cmaj, MIXER_DEVICE, 4)) !=0)
 		panic("cannot create mixer device nodes: %d", error);
+	if ((error = rump_vfs_makesymlink("mixer0", "/dev/mixer")) != 0)
+		panic("cannot create mixer symlink: %d", error);
 }
diff --git a/sys/rump/librump/rumpkern/rump.c b/sys/rump/librump/rumpkern/rump.c
index ba23771..b66ab46 100644
--- a/sys/rump/librump/rumpkern/rump.c
+++ b/sys/rump/librump/rumpkern/rump.c
@@ -125,6 +125,7 @@ int  (*rump_vfs_makeonedevnode)(dev_t, const char *,
 				devmajor_t, devminor_t) = (void *)nullop;
 int  (*rump_vfs_makedevnodes)(dev_t, const char *, char,
 			      devmajor_t, devminor_t, int) = (void *)nullop;
+int  (*rump_vfs_makesymlink)(const char *, const char *) = (void *)nullop;
 
 rump_proc_vfs_init_fn rump_proc_vfs_init = (void *)nullop;
 rump_proc_vfs_release_fn rump_proc_vfs_release = (void *)nullop;
diff --git a/sys/rump/librump/rumpvfs/devnodes.c b/sys/rump/librump/rumpvfs/devnodes.c
index 1982f37..7dbb33b 100644
--- a/sys/rump/librump/rumpvfs/devnodes.c
+++ b/sys/rump/librump/rumpvfs/devnodes.c
@@ -87,6 +87,12 @@ makedevnodes(dev_t devtype, const char *basename, char minchar,
 	return error;
 }
 
+static int
+makesymlink(const char *dst, const char *src)
+{
+	return do_sys_symlink(dst, src, UIO_SYSSPACE);
+}
+
 enum { NOTEXIST, SAME, DIFFERENT };
 static int
 doesitexist(const char *path, bool isblk, devmajor_t dmaj, devminor_t dmin)
@@ -177,6 +183,7 @@ rump_vfs_builddevs(struct devsw_conv *dcvec, size_t dcvecsize)
 
 	rump_vfs_makeonedevnode = makeonedevnode;
 	rump_vfs_makedevnodes = makedevnodes;
+	rump_vfs_makesymlink = makesymlink;
 
 	for (i = 0; i < dcvecsize; i++) {
 		dc = &dcvec[i];
diff --git a/sys/rump/librump/rumpvfs/rump_vfs_private.h b/sys/rump/librump/rumpvfs/rump_vfs_private.h
index 770b7ee..891f182 100644
--- a/sys/rump/librump/rumpvfs/rump_vfs_private.h
+++ b/sys/rump/librump/rumpvfs/rump_vfs_private.h
@@ -50,6 +50,7 @@ extern int	(*rump_vfs_makeonedevnode)(dev_t, const char *,
 					   devmajor_t, devminor_t);
 extern int	(*rump_vfs_makedevnodes)(dev_t, const char *, char,
 					 devmajor_t, devminor_t, int);
+extern int	(*rump_vfs_makesymlink)(const char *, const char *);
 extern void	(*rump_vfs_drainbufs)(int);
 extern void	(*rump_vfs_fini)(void);
 

Reply via email to