On Mon, Nov 09, 2015 at 01:58:27PM +0800, Xiao Guangrong wrote: > > > On 11/06/2015 11:54 PM, Eduardo Habkost wrote: > >On Mon, Nov 02, 2015 at 05:13:14PM +0800, Xiao Guangrong wrote: > >>lseek can not work for all block devices as the man page says: > >>| Some devices are incapable of seeking and POSIX does not specify > >>| which devices must support lseek(). > >> > >>This patch tries to add the support on Linux by using BLKGETSIZE64 > >>ioctl > >> > >>Signed-off-by: Xiao Guangrong <guangrong.xiao@xxxxxxxxxxxxxxx> > > > >On which cases is this patch necessary? Do you know any examples of > >Linux block devices that won't work with lseek(SEEK_END)? > > To be honest, i have not checked all block device, this patch was made > based on the man page. However, i do not mind drop this patch (and maybe > other patches) to make this pachset smaller. BLKGETSIZE64 can be added > in the future if we meet such device. By looking at the Linux source code implementing BLKGETSIZE64, it looks like it should work for all block devices where SEEK_END works: * BLKGETSIZE64 returns i_size_read(bdev->bd_inode) (block/ioctl.c:blkdev_ioctl()) * llseek(SEEK_END) uses i_size_read(bd_inode) as the offset (fs/block_dev.c:block_llseek()) That's probably why raw_getlength() never needed a Linux-specific BLKGETSIZE call. -- Eduardo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html