diff options
author | Justus Winter <justus@gnupg.org> | 2017-08-10 23:26:25 +0200 |
---|---|---|
committer | Justus Winter <justus@gnupg.org> | 2017-09-12 12:23:46 +0200 |
commit | 89a49ec8b3a847f3b770cff6a4a80b98b94ad7bf (patch) | |
tree | 1b0a22717e14702e7db94d83252e43927fbffd65 /libdiskfs/init-startup.c | |
parent | 86ecc3fc9aa88091ac77ec35688d08634567d169 (diff) | |
download | hurd-89a49ec8b3a847f3b770cff6a4a80b98b94ad7bf.tar.gz hurd-89a49ec8b3a847f3b770cff6a4a80b98b94ad7bf.tar.bz2 hurd-89a49ec8b3a847f3b770cff6a4a80b98b94ad7bf.zip |
libdiskfs: Shutdown pagers on startup_dosync.
* libdiskfs/init-startup.c (diskfs_S_startup_dosync): Simplify the
code by just using 'diskfs_shutdown' with the force flag. This also
shuts down pagers, which potentially affects other tasks, but getting
rid of the pagers allows us to commit a clean and consistent state to
the disk before shutting down. Crashing other tasks just before the
system powers down seems like a small price to pay.
Diffstat (limited to 'libdiskfs/init-startup.c')
-rw-r--r-- | libdiskfs/init-startup.c | 34 |
1 files changed, 1 insertions, 33 deletions
diff --git a/libdiskfs/init-startup.c b/libdiskfs/init-startup.c index a2e3638d..4251e0b3 100644 --- a/libdiskfs/init-startup.c +++ b/libdiskfs/init-startup.c @@ -126,47 +126,15 @@ diskfs_startup_diskfs (mach_port_t bootstrap, int flags) error_t diskfs_S_startup_dosync (mach_port_t handle) { - error_t err = 0; struct port_info *pi = ports_lookup_port (diskfs_port_bucket, handle, diskfs_shutdown_notification_class); if (!pi) return EOPNOTSUPP; - - if (! diskfs_readonly) - { - /* First start a sync so that if something goes wrong - we at least get this much done. */ - diskfs_sync_everything (0); - diskfs_set_hypermetadata (0, 0); - - pthread_rwlock_wrlock (&diskfs_fsys_lock); - - /* Permit all the current RPC's to finish, and then suspend new ones */ - err = ports_inhibit_class_rpcs (diskfs_protid_class); - if (! err) - { - diskfs_sync_everything (1); - diskfs_set_hypermetadata (1, 1); - _diskfs_diskdirty = 0; - - /* XXX: if some application writes something after that, we will - * crash. That is still better than creating pending writes before - * poweroff, and thus fsck on next reboot. - */ - diskfs_readonly = 1; - diskfs_readonly_changed (1); - - ports_resume_class_rpcs (diskfs_protid_class); - } - - pthread_rwlock_unlock (&diskfs_fsys_lock); - } - ports_port_deref (pi); - return err; + return diskfs_shutdown (FSYS_GOAWAY_FORCE || FSYS_GOAWAY_RECURSE); } /* This is called when we have an ordinary environment, complete |