On Wed, Oct 06, 2010 at 02:05:44AM -0300, Gustavo Sverzut Barbieri wrote:
> +        /* umount all mountpoints, swaps, and loopback devices */
> +        retries = FINALIZE_ATTEMPTS;
> +        while (need_umount || need_swapoff || need_loop_detach) {
> +                if (need_umount) {
> +                        log_info("Unmounting Filesystems");
> +                        r = umount_all();
> +                        if (r == 0)
> +                                need_umount = false;
> +                        else
> +                                log_warning("Not all filesystems unmounted");
> +                }
> +
> +                if (need_swapoff) {
> +                        log_info("Disabling Swaps");
> +                        r = swapoff_all();
> +                        if (r == 0)
> +                                need_swapoff = false;
> +                        else
> +                                log_warning("Not all swaps are off ");
> +                }

 it's probably better to call swapoff_all before umount_all (hint:
 Linux supports swap-area in regular files).

> +                if (need_loop_detach) {
> +                        log_info("Umounting and Detaching Loopback Devices");
> +                        r = loopback_detach_all();
> +                        if (r == 0)
> +                                need_loop_detach = false;
> +                        else
> +                                log_warning("Not all loop devices detached");
> +                }
> +
> +                if (need_umount || need_swapoff || need_loop_detach) {
> +                        retries--;
> +
> +                        if (retries <= FINALIZE_CRITICAL_ATTEMPTS) {
> +                                log_warning("Approaching critical level to 
> finalize filesystem and devices, try to kill all processes.");
> +                                rescue_send_signal(SIGTERM);
> +                                rescue_send_signal(SIGKILL);
> +                        }
> +
> +                        if (retries > 0)
> +                                log_info("Action still required, %d tries 
> left", retries);
> +                        else {
> +                                log_error("Tried enough but still action 
> required need_umount=%d, need_swapoff=%d, need_loop_detach=%d", need_umount, 
> need_swapoff, need_loop_detach);
> +                                r = -EBUSY;
> +                                goto error;
> +                        }
> +                }
> +        }

 what about
 
    exec( swapoff -a );
    exec( umount -a );


    Karel

-- 
 Karel Zak  <k...@redhat.com>
 http://karelzak.blogspot.com
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to