summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorSander Vrijders <sander@ouroboros.rocks>2020-04-30 11:49:30 +0200
committerDimitri Staessens <dimitri@ouroboros.rocks>2020-04-30 12:32:53 +0200
commit978266fe4beba21292daad2d341fe5ff22e08aba (patch)
treed432100d7d40f4ece133fdb56233509f86839f8d /src/lib
parentf6ae2ac9f0735846c58e0e953c01c3d834dd7d08 (diff)
downloadouroboros-978266fe4beba21292daad2d341fe5ff22e08aba.tar.gz
ouroboros-978266fe4beba21292daad2d341fe5ff22e08aba.zip
lib: Unmount stale RIB directories
If Ouroboros crashed, the RIB directory might still be mounted. This checks if this is the case, then unmounts it. Signed-off-by: Sander Vrijders <sander@ouroboros.rocks> Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/rib.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/lib/rib.c b/src/lib/rib.c
index 684c5dcd..6aacb0be 100644
--- a/src/lib/rib.c
+++ b/src/lib/rib.c
@@ -271,6 +271,7 @@ int rib_init(const char * mountpt)
{
#ifdef HAVE_FUSE
struct stat st;
+ struct stat prefix_st;
char * argv[] = {"-f",
"-o",
"ro,"
@@ -280,7 +281,7 @@ int rib_init(const char * mountpt)
NULL};
struct fuse_args args = FUSE_ARGS_INIT(3, argv);
- if (stat(FUSE_PREFIX, &st) == -1)
+ if (stat(FUSE_PREFIX, &prefix_st) == -1)
return -1;
sprintf(rib.mnt, FUSE_PREFIX "/%s", mountpt);
@@ -298,6 +299,14 @@ int rib_init(const char * mountpt)
return -1;
}
+ /*
+ * If parent directory is a different filesystem,
+ * then directory was already mounted in a previous
+ * Ouroboros instance that was killed.
+ */
+ if (st.st_dev != prefix_st.st_dev)
+ fuse_unmount(rib.mnt, rib.ch);
+
fuse_opt_parse(&args, NULL, NULL, NULL);
list_head_init(&rib.reg_comps);