summaryrefslogtreecommitdiffstats
path: root/sys/cam
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2015-10-08 07:34:30 +0000
committermav <mav@FreeBSD.org>2015-10-08 07:34:30 +0000
commitba153888c0f9d5595823c23971029c88599a5682 (patch)
treeda1f5944f401f311c9fa10b119638c22adcd8e45 /sys/cam
parent2d0e301063db285d84a7eb4db66731551fd7e8ce (diff)
downloadFreeBSD-src-ba153888c0f9d5595823c23971029c88599a5682.zip
FreeBSD-src-ba153888c0f9d5595823c23971029c88599a5682.tar.gz
Add missing vnode lock in case of file modify request.
Submitted by: Richard Kojedzinszky MFC after: 1 week
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/ctl/ctl_backend_block.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/cam/ctl/ctl_backend_block.c b/sys/cam/ctl/ctl_backend_block.c
index 40a0c79..2930fbd 100644
--- a/sys/cam/ctl/ctl_backend_block.c
+++ b/sys/cam/ctl/ctl_backend_block.c
@@ -2623,9 +2623,11 @@ ctl_be_block_modify(struct ctl_be_block_softc *softc, struct ctl_lun_req *req)
error = ctl_be_block_open(be_lun, req);
else if (vn_isdisk(be_lun->vn, &error))
error = ctl_be_block_open_dev(be_lun, req);
- else if (be_lun->vn->v_type == VREG)
+ else if (be_lun->vn->v_type == VREG) {
+ vn_lock(be_lun->vn, LK_SHARED | LK_RETRY);
error = ctl_be_block_open_file(be_lun, req);
- else
+ VOP_UNLOCK(be_lun->vn, 0);
+ } else
error = EINVAL;
if ((cbe_lun->flags & CTL_LUN_FLAG_NO_MEDIA) &&
be_lun->vn != NULL) {
OpenPOWER on IntegriCloud