Lines 221-234
Link Here
|
221 |
struct vfsmount *child; |
221 |
struct vfsmount *child; |
222 |
|
222 |
|
223 |
/* This is ugly, but prevents a lockup during mount. */ |
223 |
/* This is ugly, but prevents a lockup during mount. */ |
224 |
up(&dir->i_sem); |
224 |
mutex_lock(&dir->i_mutex); |
225 |
if (down_interruptible(&sfs_mnt->sem)) { |
225 |
if (down_interruptible(&sfs_mnt->sem)) { |
226 |
down(&dir->i_sem);/*put the dir sem back down if interrupted*/ |
226 |
mutex_unlock(&dir->i_mutex); |
227 |
return ERR_PTR(-ERESTARTSYS); |
227 |
return ERR_PTR(-ERESTARTSYS); |
228 |
} |
228 |
} |
229 |
child = get_child_mount(sfs_mnt); |
229 |
child = get_child_mount(sfs_mnt); |
230 |
up(&sfs_mnt->sem); |
230 |
up(&sfs_mnt->sem); |
231 |
down(&dir->i_sem); |
231 |
mutex_unlock(&dir->i_mutex); |
232 |
if (IS_ERR(child)) |
232 |
if (IS_ERR(child)) |
233 |
return (void *) child; |
233 |
return (void *) child; |
234 |
subfs_send_signal(); |
234 |
subfs_send_signal(); |