X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fmountd.git;a=blobdiff_plain;f=mount.c;h=bf5fbfdd2fdeaba22b6f6e1aee49b29bdb63c35c;hp=2d34a91be518cda9fb051527a9dccf0b9af13f26;hb=04b897f8feaca344d4d6fbefc65f1cbd10743390;hpb=ed4270f23e7df70414fcb09203bcbc86f1b85a81 diff --git a/mount.c b/mount.c index 2d34a91..bf5fbfd 100644 --- a/mount.c +++ b/mount.c @@ -38,11 +38,13 @@ static struct list_head mounts; * * @STATUS_UNMOUNTED: currently not mounted * @STATUS_MOUNTED: mounted & ready for usage + * @STATUS_EXPIRED: mount expired & *temporary* unmounted * @STATUS_IGNORE: entry should be ignored and never mounted */ enum status { STATUS_UNMOUNTED = 0, STATUS_MOUNTED, + STATUS_EXPIRED, STATUS_IGNORE, }; @@ -323,14 +325,14 @@ int mount_remove(char *path, char *dev) char tmp[256]; int ret; snprintf(tmp, 256, "%s%s", path, dev); - log_printf("%s has expired... unmounting\n", tmp); + log_printf("device %s has expired... unmounting %s\n", dev, tmp); ret = system_printf("/bin/umount %s", tmp); if(ret != 0) return 0; rmdir(tmp); mount = mount_find(0, dev); if(mount) - mount->status = STATUS_UNMOUNTED; + mount->status = STATUS_EXPIRED; log_printf("finished unmounting\n"); mount_dump_uci_state(); return 0; @@ -585,13 +587,10 @@ static void mount_dev_del(struct mount *mount) char tmp[256]; if (mount->status == STATUS_MOUNTED) { - snprintf(tmp, 256, "%s%s", "/tmp/run/mountd/", mount->name); - log_printf("%s has dissappeared ... unmounting\n", tmp); snprintf(tmp, 256, "%s%s", "/tmp/run/mountd/", mount->dev); + log_printf("device %s has disappeared ... unmounting %s\n", mount->dev, tmp); system_printf("/bin/umount %s", tmp); rmdir(tmp); - snprintf(tmp, 64, "%s%s", uci_path, mount->name); - unlink(tmp); mount_dump_uci_state(); } } @@ -761,11 +760,9 @@ static void mount_enum_drives(void) p->prev->next = p->next; p->next->prev = p->prev; p = p->next; - log_printf("removing %s\n", q->dev); - if (q->status == STATUS_MOUNTED) { - snprintf(tmp, 64, "%s%s", "/tmp/run/mountd/", q->dev); - rmdir(tmp); + if (q->status == STATUS_MOUNTED || q->status == STATUS_EXPIRED) { snprintf(tmp, 64, "%s%s", uci_path, q->name); + log_printf("unlinking %s\n", tmp); unlink(tmp); system_printf("ACTION=remove DEVICE=%s NAME=%s /sbin/hotplug-call mount", q->dev, q->name); }