Kernel can report mount point as expired and when that happens mountd
unmounts it. When such a device disappears it's still important to:
1) Cleanup directories
2) Call hotplug scripts
Fix this by adding a new EXPIRED status and checking it when block
device disappears.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
*
* @STATUS_UNMOUNTED: currently not mounted
* @STATUS_MOUNTED: mounted & ready for usage
*
* @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_IGNORE: entry should be ignored and never mounted
*/
enum status {
STATUS_UNMOUNTED = 0,
STATUS_MOUNTED,
rmdir(tmp);
mount = mount_find(0, dev);
if(mount)
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;
log_printf("finished unmounting\n");
mount_dump_uci_state();
return 0;
p->next->prev = p->prev;
p = p->next;
log_printf("removing %s\n", q->dev);
p->next->prev = p->prev;
p = p->next;
log_printf("removing %s\n", q->dev);
- if (q->status == STATUS_MOUNTED) {
+ if (q->status == STATUS_MOUNTED || q->status == STATUS_EXPIRED) {
snprintf(tmp, 64, "%s%s", "/tmp/run/mountd/", q->dev);
rmdir(tmp);
snprintf(tmp, 64, "%s%s", uci_path, q->name);
snprintf(tmp, 64, "%s%s", "/tmp/run/mountd/", q->dev);
rmdir(tmp);
snprintf(tmp, 64, "%s%s", uci_path, q->name);