From 978266fe4beba21292daad2d341fe5ff22e08aba Mon Sep 17 00:00:00 2001 From: Sander Vrijders Date: Thu, 30 Apr 2020 11:49:30 +0200 Subject: 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 Signed-off-by: Dimitri Staessens --- src/lib/rib.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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); -- cgit v1.2.3