Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1266314 > unrolled thread
| Started by | Hannes Reinecke <hare@suse.de> |
|---|---|
| First post | 2015-11-10 09:20 +0100 |
| Last post | 2015-11-13 22:00 +0100 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 1/4] loop: Enable correct physical blocksize Hannes Reinecke <hare@suse.de> - 2015-11-10 09:20 +0100
Re: [PATCH 1/4] loop: Enable correct physical blocksize Jeff Moyer <jmoyer@redhat.com> - 2015-11-13 22:00 +0100
| From | Hannes Reinecke <hare@suse.de> |
|---|---|
| Date | 2015-11-10 09:20 +0100 |
| Subject | [PATCH 1/4] loop: Enable correct physical blocksize |
| Message-ID | <qtcjM-2xd-29@gated-at.bofh.it> |
When running on files the physical blocksize is actually 4k, so we should be announcing it as such. This is enabled with a new LO_FLAGS_BLOCKSIZE flag value to the existing loop_set_status ioctl. Signed-off-by: Hannes Reinecke <hare@suse.de> --- drivers/block/loop.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 423f4ca..e790487 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -233,6 +233,8 @@ figure_loop_size(struct loop_device *lo, loff_t offset, loff_t sizelimit) lo->lo_offset = offset; if (lo->lo_sizelimit != sizelimit) lo->lo_sizelimit = sizelimit; + if (lo->lo_flags & LO_FLAGS_BLOCKSIZE) + blk_queue_physical_block_size(lo->lo_queue, lo->lo_blocksize); set_capacity(lo->lo_disk, x); bd_set_size(bdev, (loff_t)get_capacity(bdev->bd_disk) << 9); /* let user-space know about the new size */ @@ -1092,6 +1094,7 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info) int err; struct loop_func_table *xfer; kuid_t uid = current_uid(); + int lo_flags = lo->lo_flags; if (lo->lo_encrypt_key_size && !uid_eq(lo->lo_key_owner, uid) && @@ -1121,8 +1124,12 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info) if (err) return err; + if (info->lo_flags & LO_FLAGS_BLOCKSIZE) + lo->lo_flags |= LO_FLAGS_BLOCKSIZE; + if (lo->lo_offset != info->lo_offset || - lo->lo_sizelimit != info->lo_sizelimit) + lo->lo_sizelimit != info->lo_sizelimit || + lo->lo_flags != lo_flags) if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit)) return -EFBIG; -- 1.8.5.6 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Jeff Moyer <jmoyer@redhat.com> |
|---|---|
| Date | 2015-11-13 22:00 +0100 |
| Message-ID | <qutBT-2RB-13@gated-at.bofh.it> |
| In reply to | #1266314 |
Hi Hannes, Hannes Reinecke <hare@suse.de> writes: > When running on files the physical blocksize is actually 4k, How did you come to that conclusion? Are you basing it on the file system block size? If so, that's configurable at mkfs time and can be anything from 512 bytes to 64k on current in-tree file systems that I know of (depending on platform, of course). The main use for physical block size, as I understand it, is to allow partitioning utilities to place partitions on physical block boundaries of the underlying storage. The benefit of that is to avoid read-modify-writes for I/O which is naturally sized and aligned. If we carry that forward to loop, then I think it does makes sense to key off of the file system block size, but the fact remains that 4k is not universal. So, I think the idea is sound, but you should be setting the physical block size to sb->s_blocksize. And I don't see any reason why we wouldn't do this by default, do you? If you end up reposting this patch, would you mind including more of this rationale in your commit message? Thanks! Jeff -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web