summaryrefslogtreecommitdiff
path: root/src/fsck.c
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2010-10-29 19:54:02 +0200
committerKay Sievers <kay.sievers@vrfy.org>2010-10-29 19:55:21 +0200
commita84f519214bf245052ad6be7b57fb68ac817cb7e (patch)
tree1c256a2c717f7dfa472411d5b9ed1017a8f63994 /src/fsck.c
parent6c6a7c015368e9f2d192c0dc45fc1f016502f0f9 (diff)
fsck: skip checking / if it is writable
Diffstat (limited to 'src/fsck.c')
-rw-r--r--src/fsck.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/fsck.c b/src/fsck.c
index bfa35f2e56..3c1652bc22 100644
--- a/src/fsck.c
+++ b/src/fsck.c
@@ -24,6 +24,7 @@
#include <string.h>
#include <errno.h>
#include <unistd.h>
+#include <fcntl.h>
#include <libudev.h>
#include <dbus/dbus.h>
@@ -170,6 +171,7 @@ int main(int argc, char *argv[]) {
root_directory = false;
} else {
struct stat st;
+ struct timespec times[2];
/* Find root device */
@@ -182,6 +184,14 @@ int main(int argc, char *argv[]) {
if (major(st.st_dev) == 0)
return 0;
+ /* check if we are already writable */
+ times[0] = st.st_atim;
+ times[1] = st.st_mtim;
+ if (utimensat(AT_FDCWD, "/", times, 0) == 0) {
+ log_error("Root directory is writable, skip check.");
+ goto finish;
+ }
+
if (!(udev = udev_new())) {
log_error("Out of memory");
goto finish;