bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 3/3] Add the mountee to the list of merged filesystems.


From: Sergiu Ivanov
Subject: [PATCH 3/3] Add the mountee to the list of merged filesystems.
Date: Tue, 17 Nov 2009 12:09:34 +0200
User-agent: Mutt/1.5.20 (2009-06-14)

* mount.c (start_mountee): Add the mountee's filesystem to the
list of merged filesystems.
* node.c (node_init_root): Take into consideration the fact that
an empty string refers to the mountee root.
* ulfs.c (ulfs_check): Likewise.
(ulfs_register): Don't check whether "" is a valid directory.
---

Hello,

On Thu, Nov 05, 2009 at 12:58:02PM +0100, olafBuddenhagen@gmx.net wrote:
> On Wed, Nov 04, 2009 at 07:08:45PM +0200, Sergiu Ivanov wrote:
> > On Fri, Oct 30, 2009 at 10:13:09AM +0100, olafBuddenhagen@gmx.net
> > wrote:
> > > On Mon, Aug 17, 2009 at 08:55:37PM +0300, Sergiu Ivanov wrote:
> 
> > > > I've added the corresponding comment to ulfs_register, but I
> > > > didn't add anything to variable or structure declarations, because
> > > > I'm not sure whether it would be suitable to describe the
> > > > convention in the comment to the declaration of struct ulfs or in
> > > > the comment to the declaration of ulfs_chain.
> > > 
> > > The latter I'd say -- it's not really a property of the ulfs
> > > structure itself, but rather a special entry in the list...
> 
> Whoops, sorry, I wasn't paying attention :-(
> 
> After looking at the patch, it immediately became clear that indeed the
> comment belongs in the ulfs structure itself, not the chain -- it
> describes a special value of a particular field in the structure, while
> the chain only links the structures.

OK :-) I've moved the corresponding comment to the declaration of the
structure.
 
> > I have eventually commented both the data structures and the
> > functions, which, I hope, is not a problem :-)
> 
> Only in the sense that more redundancy means more things to update if
> something should change there... But I'm not too worried about that :-)

Neither am I :-)

Regards,
scolobb

---
 mount.c |   14 +++++++++++++-
 mount.h |    4 +++-
 node.c  |   15 ++++++++++++---
 ulfs.c  |   19 +++++++++++++++----
 ulfs.h  |    8 ++++++--
 5 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/mount.c b/mount.c
index 01d9ccd..7da6822 100644
--- a/mount.c
+++ b/mount.c
@@ -27,6 +27,7 @@
 
 #include "mount.h"
 #include "lib.h"
+#include "ulfs.h"
 
 /* The command line for starting the mountee.  */
 char * mountee_argz;
@@ -142,7 +143,9 @@ start_mountee (node_t * np, char * argz, size_t argz_len, 
mach_port_t * port)
   return err;
 }                              /* start_mountee */
 
-/* Sets up a proxy node and sets the translator on it.  */
+/* Sets up a proxy node, sets the translator on it, and registers the
+   filesystem published by the translator in the list of merged
+   filesystems.  */
 error_t
 setup_unionmount (void)
 {
@@ -164,6 +167,15 @@ setup_unionmount (void)
   if (err)
     return err;
 
+  /* A path equal to "" will mean that the current ULFS entry is the
+     mountee port.  */
+  ulfs_register ("", 0, 0);
+
+  /* Reinitialize the list of merged filesystems to take into account
+     the newly added mountee's filesystem.  */
+  ulfs_check ();
+  node_init_root (netfs_root_node);
+
   mountee_started = 1;
 
   return 0;
diff --git a/mount.h b/mount.h
index fd265f0..fb5758d 100644
--- a/mount.h
+++ b/mount.h
@@ -42,7 +42,9 @@ extern int mountee_started;
 error_t
 start_mountee (node_t * np, char * argz, size_t argz_len, mach_port_t * port);
 
-/* Sets up a proxy node and sets the translator on it.  */
+/* Sets up a proxy node, sets the translator on it, and registers the
+   filesystem published by the translator in the list of merged
+   filesystems.  */
 error_t
 setup_unionmount (void);
 
diff --git a/node.c b/node.c
index cf9a8b4..f8ad886 100644
--- a/node.c
+++ b/node.c
@@ -1,7 +1,10 @@
 /* Hurd unionfs
-   Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2005, 2009 Free Software Foundation, Inc.
+
    Written by Moritz Schulte <moritz@duesseldorf.ccc.de>.
 
+   Adapted for unionmount by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2 of the
@@ -33,6 +36,7 @@
 #include "node.h"
 #include "ulfs.h"
 #include "lib.h"
+#include "mount.h"
 
 /* Declarations for functions only used in this file.  */
 
@@ -535,8 +539,13 @@ node_init_root (node_t *node)
          break;
 
       if (ulfs->path)
-       node_ulfs->port = file_name_lookup (ulfs->path,
-                                           O_READ | O_DIRECTORY, 0);
+       {
+         if (!ulfs->path[0])
+           node_ulfs->port = mountee_root;
+         else
+           node_ulfs->port = file_name_lookup (ulfs->path,
+                                               O_READ | O_DIRECTORY, 0);
+       }
       else
        node_ulfs->port = underlying_node;
          
diff --git a/ulfs.c b/ulfs.c
index 3c565a5..2626a90 100644
--- a/ulfs.c
+++ b/ulfs.c
@@ -1,7 +1,10 @@
 /* Hurd unionfs
-   Copyright (C) 2001, 2002, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2005, 2009 Free Software Foundation, Inc.
+
    Written by Moritz Schulte <moritz@duesseldorf.ccc.de>.
 
+   Adapted for unionmount by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2 of the
@@ -31,6 +34,7 @@
 
 #include "lib.h"
 #include "ulfs.h"
+#include "mount.h"
 
 /* The start of the ulfs chain.  */
 ulfs_t *ulfs_chain_start;
@@ -212,14 +216,16 @@ ulfs_for_each_under_priv (char *path_under,
   return err;
 }
 
-/* Register a new underlying filesystem.  */
+/* Register a new underlying filesystem.  A null path refers to the
+   underlying filesystem; a path equal to an empty string refers to
+   the filesystem of the mountee.  */
 error_t
 ulfs_register (char *path, int flags, int priority)
 {
   ulfs_t *ulfs;
   error_t err;
 
-  if (path)
+  if (path && path[0])
     {
       err = check_dir (path);
       if (err)
@@ -261,7 +267,12 @@ ulfs_check ()
     {
       
       if (u->path)
-       p = file_name_lookup (u->path, O_READ | O_DIRECTORY, 0);
+       {
+         if (!u->path[0])
+           p = mountee_root;
+         else
+           p = file_name_lookup (u->path, O_READ | O_DIRECTORY, 0);
+       }
       else
        p = underlying_node;
          
diff --git a/ulfs.h b/ulfs.h
index 532e3c7..46eb7ff 100644
--- a/ulfs.h
+++ b/ulfs.h
@@ -22,7 +22,9 @@
 #ifndef INCLUDED_ULFS_H
 #define INCLUDED_ULFS_H
 
-/* The structure for each registered underlying filesystem.  */
+/* The structure for each registered underlying filesystem.  A null
+   path refers to the underlying filesystem; a path equal to an empty
+   string refers to the filesystem of the mountee.  */
 typedef struct ulfs
 {
   char *path;
@@ -49,7 +51,9 @@ extern unsigned int ulfs_num;
 /* The lock protecting the ulfs data structures.  */
 extern struct mutex ulfs_lock;
 
-/* Register a new underlying filesystem.  */
+/* Register a new underlying filesystem.  A null path refers to the
+   underlying filesystem; a path equal to an empty string refers to
+   the filesystem of the mountee.  */
 error_t ulfs_register (char *path, int flags, int priority);
 
 /* Unregister an underlying filesystem.  */
-- 
1.6.5.2





reply via email to

[Prev in Thread] Current Thread [Next in Thread]