chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
umount: don't try to umount /dev/console, since we are using it
[elogind.git]
/
src
/
umount.c
diff --git
a/src/umount.c
b/src/umount.c
index 67be42ea337397b57ec3f045f0a8425765a2a526..57d25e8945af19da0881945345ad5c65a8318a8f 100644
(file)
--- a/
src/umount.c
+++ b/
src/umount.c
@@
-6,16
+6,16
@@
Copyright 2010 ProFUSION embedded systems
systemd is free software; you can redistribute it and/or modify it
Copyright 2010 ProFUSION embedded systems
systemd 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 License, or
+ under the terms of the GNU
Lesser
General Public License as published by
+ the Free Software Foundation; either version 2
.1
of the License, or
(at your option) any later version.
systemd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
(at your option) any later version.
systemd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+
Lesser
General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU
Lesser
General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
@@
-114,7
+114,12
@@
static int mount_points_list_get(MountPoint **head) {
goto finish;
}
goto finish;
}
- if (mount_point_is_api(p) || mount_point_ignore(p)) {
+ /* Ignore mount points we can't unmount because they
+ * are API or because we are keeping them open (like
+ * /dev/console) */
+ if (mount_point_is_api(p) ||
+ mount_point_ignore(p) ||
+ path_streq(p, "/dev/console")) {
free(p);
continue;
}
free(p);
continue;
}
@@
-410,7
+415,11
@@
static int mount_points_list_umount(MountPoint **head, bool *changed, bool log_e
assert(head);
LIST_FOREACH_SAFE(mount_point, m, n, *head) {
assert(head);
LIST_FOREACH_SAFE(mount_point, m, n, *head) {
- if (streq(m->path, "/")) {
+ if (path_equal(m->path, "/")
+#ifndef HAVE_SPLIT_USR
+ || path_equal(m->path, "/usr")
+#endif
+ ) {
n_failed++;
continue;
}
n_failed++;
continue;
}
@@
-565,10
+574,13
@@
int umount_all(bool *changed) {
/* retry umount, until nothing can be umounted anymore */
do {
umount_changed = false;
/* retry umount, until nothing can be umounted anymore */
do {
umount_changed = false;
- r = mount_points_list_umount(&mp_list_head, &umount_changed, false);
+
+ mount_points_list_umount(&mp_list_head, &umount_changed, false);
if (umount_changed)
*changed = true;
if (umount_changed)
*changed = true;
- } while(umount_changed);
+
+ } while (umount_changed);
+
/* umount one more time with logging enabled */
r = mount_points_list_umount(&mp_list_head, &umount_changed, true);
if (r <= 0)
/* umount one more time with logging enabled */
r = mount_points_list_umount(&mp_list_head, &umount_changed, true);
if (r <= 0)