Re: [dm-devel] confusion about multipath_prepare_ioctl
On 2018年03月06日 13:44, Mike Snitzer wrote: > On Mon, Mar 05 2018 at 10:35pm -0500, > Wang Sheng-Huiwrote: > >> Dear, >> >> Sorry to trouble you. >> >> I noticed some code in dm-*.c like: >> " >> static int multipath_prepare_ioctl(struct dm_target *ti, >> struct block_device **bdev, fmode_t *mode) >> { >> ... >> /* >> * Only pass ioctls through if the device sizes match exactly. >> */ >> if (!r && ti->len != i_size_read((*bdev)->bd_inode) >> SECTOR_SHIFT) >> return 1; >> ... >> } >> " >> Here, return value 1 means >> "ioctl is being issued against a subset of the parent bdev; require extra >> privileges." >> (comment in dm_blk_ioctl) >> >> I'm confused by the comment and '!=' test for multipath. >> In which cases, the size of low level single device is not equal to the >> parent >> size of multipath device? > Given that ti->len is sent down from userspace, the DM multipath > target's ti->len _could_ be smaller than the underlying path(s). But in > practice that doesn't occur with multipathd.. a partitioned multipath > device is generally done, via kpartx, in terms of linear mappings ontop > of the multipath device. > > The same != test is done in the dm linear target and is much more > relevant to concerns about ioctls being sent to partition. > > Mike > > Thanks for your explanation, Mike! Regards, shenghui -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel
[dm-devel] confusion about multipath_prepare_ioctl
Dear, Sorry to trouble you. I noticed some code in dm-*.c like: " static int multipath_prepare_ioctl(struct dm_target *ti, struct block_device **bdev, fmode_t *mode) { ... /* * Only pass ioctls through if the device sizes match exactly. */ if (!r && ti->len != i_size_read((*bdev)->bd_inode) >> SECTOR_SHIFT) return 1; ... } " Here, return value 1 means "ioctl is being issued against a subset of the parent bdev; require extra privileges." (comment in dm_blk_ioctl) I'm confused by the comment and '!=' test for multipath. In which cases, the size of low level single device is not equal to the parent size of multipath device? Regards, shenghui -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel
Re: [dm-devel] confusion about multipath_prepare_ioctl
On Mon, Mar 05 2018 at 10:35pm -0500, Wang Sheng-Huiwrote: > Dear, > > Sorry to trouble you. > > I noticed some code in dm-*.c like: > " > static int multipath_prepare_ioctl(struct dm_target *ti, > struct block_device **bdev, fmode_t *mode) > { > ... > /* >* Only pass ioctls through if the device sizes match exactly. >*/ > if (!r && ti->len != i_size_read((*bdev)->bd_inode) >> SECTOR_SHIFT) > return 1; > ... > } > " > Here, return value 1 means > "ioctl is being issued against a subset of the parent bdev; require extra > privileges." > (comment in dm_blk_ioctl) > > I'm confused by the comment and '!=' test for multipath. > In which cases, the size of low level single device is not equal to the > parent > size of multipath device? Given that ti->len is sent down from userspace, the DM multipath target's ti->len _could_ be smaller than the underlying path(s). But in practice that doesn't occur with multipathd.. a partitioned multipath device is generally done, via kpartx, in terms of linear mappings ontop of the multipath device. The same != test is done in the dm linear target and is much more relevant to concerns about ioctls being sent to partition. Mike -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel