Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f9bebd58 authored by Ilya Dryomov's avatar Ilya Dryomov
Browse files

rbd: kill rbd_is_lock_supported()



Currently the exclusive lock is acquired only if the mapping is
writable, i.e. an image HEAD mapped in rw mode.  This means that we
don't acquire the lock for executing a read from a snapshot or an image
HEAD mapped in ro mode, even if lock_on_read is set.  This is somewhat
weird and inconsistent with "no automatic exclusive lock transfers"
mode, where the lock is acquired unconditionally.

Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
Reviewed-by: default avatarJason Dillaman <dillaman@redhat.com>
parent 14bb211d
Loading
Loading
Loading
Loading
+3 −11
Original line number Diff line number Diff line
@@ -478,13 +478,6 @@ static int minor_to_rbd_dev_id(int minor)
	return minor >> RBD_SINGLE_MAJOR_PART_SHIFT;
}

static bool rbd_is_lock_supported(struct rbd_device *rbd_dev)
{
	return (rbd_dev->header.features & RBD_FEATURE_EXCLUSIVE_LOCK) &&
	       rbd_dev->spec->snap_id == CEPH_NOSNAP &&
	       !rbd_dev->mapping.read_only;
}

static bool __rbd_is_lock_owner(struct rbd_device *rbd_dev)
{
	return rbd_dev->lock_state == RBD_LOCK_STATE_LOCKED ||
@@ -4052,10 +4045,6 @@ static void rbd_queue_workfn(struct work_struct *work)
	if (op_type != OBJ_OP_READ) {
		snapc = rbd_dev->header.snapc;
		ceph_get_snap_context(snapc);
		must_be_locked = rbd_is_lock_supported(rbd_dev);
	} else {
		must_be_locked = rbd_dev->opts->lock_on_read &&
					rbd_is_lock_supported(rbd_dev);
	}
	up_read(&rbd_dev->header_rwsem);

@@ -4066,6 +4055,9 @@ static void rbd_queue_workfn(struct work_struct *work)
		goto err_rq;
	}

	must_be_locked =
	    (rbd_dev->header.features & RBD_FEATURE_EXCLUSIVE_LOCK) &&
	    (op_type != OBJ_OP_READ || rbd_dev->opts->lock_on_read);
	if (must_be_locked) {
		down_read(&rbd_dev->lock_rwsem);
		if (rbd_dev->lock_state != RBD_LOCK_STATE_LOCKED &&