>From 190cae3ebd013ac5e168fae9b9f50456e3d4679a Mon Sep 17 00:00:00 2001 From: Sergiu Ivanov <unlimitedscol...@gmail.com> Date: Sun, 5 Jul 2009 23:49:14 +0300 Subject: [PATCH] Enable the mountee to be started after initialization.
* main.c (main): Schedule an update to start the mountee. * mount.c (setup_unionmount): Don't force the update of the lists of filesystems. * netfs.c (netfs_validate_stat): Don't start the mountee. * update.c (_root_update_thread): Start the mountee at the first invocation. --- This patch is an improved version: by invoking setup_unionmount in a different place of _root_update_thread, it removes the necessity of forcing a (repeated, actually) update of the list of filesystems in setup_unionmount. --- main.c | 10 +++++++++- mount.c | 4 ---- netfs.c | 8 -------- update.c | 13 ++++++++++++- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/main.c b/main.c index c33b065..9b8b5e7 100644 --- a/main.c +++ b/main.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 <mor...@duesseldorf.ccc.de>. + Adapted for unionmount by Sergiu Ivanov <unlimitedscol...@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 @@ -128,6 +131,11 @@ main (int argc, char **argv) fshelp_touch (&netfs_root_node->nn_stat, TOUCH_ATIME | TOUCH_MTIME | TOUCH_CTIME, maptime); + /* The update thread will start the mountee when unionfs will be + ready for servicing RPCs (will have completed the + initialization). */ + root_update_schedule (); + /* Start serving clients. */ for (;;) netfs_server_loop (); diff --git a/mount.c b/mount.c index 8671ae6..40c53c1 100644 --- a/mount.c +++ b/mount.c @@ -208,10 +208,6 @@ setup_unionmount (void) mountee port. */ ulfs_register ("", 0, 0); - /* Initialize the list of merged filesystems. */ - ulfs_check (); - node_init_root (netfs_root_node); - mountee_started = 1; return err; diff --git a/netfs.c b/netfs.c index 01e8ae9..1c9541e 100644 --- a/netfs.c +++ b/netfs.c @@ -40,7 +40,6 @@ #include "lib.h" #include "ncache.h" #include "options.h" -#include "mount.h" /* Return an argz string describing the current options. Fill *ARGZ with a pointer to newly malloced storage holding the list and *LEN @@ -170,13 +169,6 @@ netfs_validate_stat (struct node *np, struct iouser *cred) } else { - if (!mountee_started) - { - err = setup_unionmount (); - if (err) - error (EXIT_FAILURE, err, "failed to setup the mountee"); - } - _get_node_size (np, &np->nn_stat.st_size); } diff --git a/update.c b/update.c index 8ec6688..1c85ccc 100644 --- a/update.c +++ b/update.c @@ -1,7 +1,10 @@ /* Hurd unionfs - Copyright (C) 2005 Free Software Foundation, Inc. + Copyright (C) 2005, 2009 Free Software Foundation, Inc. + Written by Gianluca Guida <glgu...@gmail.com>. + Adapted for unionmount by Sergiu Ivanov <unlimitedscol...@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 @@ -30,6 +33,7 @@ #include "ncache.h" #include "node.h" #include "ulfs.h" +#include "mount.h" /* Reader lock is used by threads that are going to add/remove an ulfs; writer lock is hold by the @@ -50,6 +54,13 @@ _root_update_thread () rwlock_writer_lock (&update_rwlock); + if (!mountee_started) + { + err = setup_unionmount (); + if (err) + error (EXIT_FAILURE, err, "failed to setup the mountee"); + } + do { ulfs_check(); -- 1.6.3.3