Thread (15 messages) 15 messages, 3 authors, 2015-08-06

Re: [PATCH 4/6] dm: refactor ioctl handling

flat view

From: Mike Snitzer <hidden>
Date: 2015-08-04 17:56:20
Also in: dm-devel, linux-nvme, linux-scsi, lkml

On Tue, Aug 04 2015 at  3:11am -0400,
Christoph Hellwig [off-list ref] wrote:
This moves the call to blkdev_ioctl and the argument checking to core code,
and only leaves a callout to find the block device to operate on it the
targets.  This will simplifies the code and will allow us to pass through
ioctl-like command using other methods in the next patch.

Signed-off-by: Christoph Hellwig <redacted>
...
quoted hunk ↗ jump to hunk
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index f331d88..c68eb91 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -584,7 +584,17 @@ retry:
 		goto out;
 	}
 
-	r = tgt->type->ioctl(tgt, cmd, arg);
+	r = tgt->type->ioctl(tgt, &bdev, &mode);
+	if (r < 0)
+		goto out;
+
+	if (r > 0) {
+		r = scsi_verify_blk_ioctl(NULL, cmd);
+		if (r)
+			goto out;
+	}
+
+	r =  __blkdev_driver_ioctl(bdev, mode, cmd, arg);
 
 out:
 	dm_put_live_table(md, srcu_idx);
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index 51cc1de..9b73138 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -79,8 +79,8 @@ typedef void (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
 
 typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv);
 
-typedef int (*dm_ioctl_fn) (struct dm_target *ti, unsigned int cmd,
-			    unsigned long arg);
+typedef int (*dm_ioctl_fn) (struct dm_target *ti,
+			    struct block_device **bdev, fmode_t *mode);
 
 typedef int (*dm_merge_fn) (struct dm_target *ti, struct bvec_merge_data *bvm,
 			    struct bio_vec *biovec, int max_size);
This should be renamed to dm_prepare_ioctl_fn and the targets' hook
would be .prepare_ioctl

Open to other names but if the targets no longer issue the ioctl there
is little point to call it .ioctl
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help