rmdir() can't remove mountpoints
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 13 Sep 2010 23:57:17 +0000 (16:57 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:54 +0000 (17:35 -0700)
kern/src/manager.c
kern/src/vfs.c

index 139c90e..160129d 100644 (file)
@@ -113,6 +113,11 @@ void manager_brho(void)
        static struct proc *p;
        struct file *temp_f;
 
+       /* I usually want this */
+       schedule();
+       printk("No work to do (schedule returned)\n");
+       monitor(0);
+
        // for testing taking cores, check in case 1 for usage
        uint32_t corelist[MAX_NUM_CPUS];
        uint32_t num = 3;
index 51374cd..26ee24d 100644 (file)
@@ -1556,6 +1556,10 @@ int do_rmdir(char *path)
                set_errno(ENOTDIR);
                goto out_dentry;
        }
+       if (dentry->d_mount_point) {
+               set_errno(EBUSY);
+               goto out_dentry;
+       }
        /* TODO: make sure we aren't a mount or processes root (EBUSY) */
        /* Now for the removal.  the FSs will check if they are empty */
        parent_i = nd->dentry->d_inode;