diff options
author | Justus Winter <justus@gnupg.org> | 2016-10-05 15:38:58 +0200 |
---|---|---|
committer | Justus Winter <justus@gnupg.org> | 2017-09-12 10:41:35 +0200 |
commit | 5fef1b7f22ec0ee3730b80bbf972dbf9a8995091 (patch) | |
tree | 29890aef362b5a8ebffb4721a1967b818a22a3af /libdiskfs/shutdown.c | |
parent | 116552c075abf1d22057a608fee9d27684bcbbe5 (diff) | |
download | hurd-5fef1b7f22ec0ee3730b80bbf972dbf9a8995091.tar.gz hurd-5fef1b7f22ec0ee3730b80bbf972dbf9a8995091.tar.bz2 hurd-5fef1b7f22ec0ee3730b80bbf972dbf9a8995091.zip |
libfshelp: Add function to map over all active translators.
* libdiskfs/file-syncfs.c (diskfs_S_file_syncfs): Use the new function.
* libdiskfs/fsys-options.c (diskfs_S_fsys_set_options): Likewise.
* libdiskfs/fsys-syncfs.c (diskfs_S_fsys_syncfs): Likewise.
* libdiskfs/shutdown.c (diskfs_shutdown): Likewise.
* libfshelp/fshelp.h (fshelp_map_active_translators): New declaration.
* libfshelp/translator-list.c (fshelp_map_active_translators): New
function.
* libnetfs/file-syncfs.c (netfs_S_file_syncfs): Use the new function.
* libnetfs/fsys-set-options.c (netfs_S_fsys_set_options): Likewise.
* libnetfs/fsys-syncfs.c (netfs_S_fsys_syncfs): Likewise.
* libnetfs/shutdown.c (netfs_shutdown): Likewise.
Diffstat (limited to 'libdiskfs/shutdown.c')
-rw-r--r-- | libdiskfs/shutdown.c | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/libdiskfs/shutdown.c b/libdiskfs/shutdown.c index 2436d528..3f774c31 100644 --- a/libdiskfs/shutdown.c +++ b/libdiskfs/shutdown.c @@ -22,35 +22,30 @@ #include "priv.h" #include <hurd/fsys.h> +struct args +{ + int flags; +}; + +static error_t +helper (void *cookie, const char *name, mach_port_t control) +{ + struct args *args = cookie; + error_t err; + (void) name; + err = fsys_goaway (control, args->flags); + if (err == MIG_SERVER_DIED || err == MACH_SEND_INVALID_DEST) + err = 0; + return err; +} + /* Shutdown the filesystem; flags are as for fsys_goaway. */ error_t diskfs_shutdown (int flags) { int nports = -1; - int err; - - error_t - helper (struct node *np) - { - error_t error; - mach_port_t control; - - error = fshelp_fetch_control (&np->transbox, &control); - pthread_mutex_unlock (&np->lock); - if (!error && (control != MACH_PORT_NULL)) - { - error = fsys_goaway (control, flags); - mach_port_deallocate (mach_task_self (), control); - } - else - error = 0; - pthread_mutex_lock (&np->lock); - - if ((error == MIG_SERVER_DIED) || (error == MACH_SEND_INVALID_DEST)) - error = 0; - - return error; - } + error_t err; + struct args args = { flags }; if ((flags & FSYS_GOAWAY_UNLINK) && S_ISDIR (diskfs_root_node->dn_stat.st_mode)) @@ -58,7 +53,7 @@ diskfs_shutdown (int flags) if (flags & FSYS_GOAWAY_RECURSE) { - err = diskfs_node_iterate (helper); + err = fshelp_map_active_translators (helper, &args); if (err) return err; } |