diff options
Diffstat (limited to 'sys/fs/unionfs/union_vfsops.c')
-rw-r--r-- | sys/fs/unionfs/union_vfsops.c | 28 |
1 files changed, 3 insertions, 25 deletions
diff --git a/sys/fs/unionfs/union_vfsops.c b/sys/fs/unionfs/union_vfsops.c index bd264c7bcdb5..ae95bd9c005c 100644 --- a/sys/fs/unionfs/union_vfsops.c +++ b/sys/fs/unionfs/union_vfsops.c @@ -371,38 +371,16 @@ unionfs_root(struct mount *mp, int flags, struct vnode **vpp) } static int -unionfs_quotactl(struct mount *mp, int cmd, uid_t uid, void *arg, - bool *mp_busy) +unionfs_quotactl(struct mount *mp, int cmd, uid_t uid, void *arg) { - struct mount *uppermp; struct unionfs_mount *ump; - int error; - bool unbusy; ump = MOUNTTOUNIONFSMOUNT(mp); - uppermp = atomic_load_ptr(&ump->um_uppervp->v_mount); - KASSERT(*mp_busy == true, ("upper mount not busy")); - /* - * See comment in sys_quotactl() for an explanation of why the - * lower mount needs to be busied by the caller of VFS_QUOTACTL() - * but may be unbusied by the implementation. We must unbusy - * the upper mount for the same reason; otherwise a namei lookup - * issued by the VFS_QUOTACTL() implementation could traverse the - * upper mount and deadlock. - */ - vfs_unbusy(mp); - *mp_busy = false; - unbusy = true; - error = vfs_busy(uppermp, 0); + /* * Writing is always performed to upper vnode. */ - if (error == 0) - error = VFS_QUOTACTL(uppermp, cmd, uid, arg, &unbusy); - if (unbusy) - vfs_unbusy(uppermp); - - return (error); + return (VFS_QUOTACTL(ump->um_uppervp->v_mount, cmd, uid, arg)); } static int |