--- a/subfs-0.9/subfs.c 2004-02-26 23:54:58.000000000 +0100 +++ b/subfs-0.9/subfs.c 2006-01-19 14:12:26.000000000 +0100 @@ -221,14 +221,14 @@ struct vfsmount *child; /* This is ugly, but prevents a lockup during mount. */ - up(&dir->i_sem); + mutex_lock(&dir->i_mutex); if (down_interruptible(&sfs_mnt->sem)) { - down(&dir->i_sem);/*put the dir sem back down if interrupted*/ + mutex_unlock(&dir->i_mutex); return ERR_PTR(-ERESTARTSYS); } child = get_child_mount(sfs_mnt); up(&sfs_mnt->sem); - down(&dir->i_sem); + mutex_unlock(&dir->i_mutex); if (IS_ERR(child)) return (void *) child; subfs_send_signal();