mirror of https://github.com/vitalif/e2fsprogs
libext2fs: force DIO alignment FreeBSD when operating on a block device
FreeBSD (and possibly BSD systems) requires that reads and writes to block devices must be aligned, even when the O_DIRECT flag is not specified. Previously this was hard-coded to 512 bytes, but in order to properly handle Advanced Format HDD's, query the BSD kernel to determine the proper alignment to use. Signed-off-by: Theodore Ts'o <tytso@mit.edu>test
parent
370a24cd33
commit
3a68c6f1f0
|
@ -613,7 +613,7 @@ static errcode_t unix_open_channel(const char *name, int fd,
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
|
||||
#if defined(__CYGWIN__)
|
||||
/*
|
||||
* Some operating systems require that the buffers be aligned,
|
||||
* regardless of O_DIRECT
|
||||
|
@ -622,6 +622,14 @@ static errcode_t unix_open_channel(const char *name, int fd,
|
|||
io->align = 512;
|
||||
#endif
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
|
||||
if (io->flags & CHANNEL_FLAGS_BLOCK_DEVICE) {
|
||||
int dio_align = ext2fs_get_dio_alignment(fd);
|
||||
|
||||
if (io->align < dio_align)
|
||||
io->align = dio_align;
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((retval = alloc_cache(io, data)))
|
||||
goto cleanup;
|
||||
|
|
Loading…
Reference in New Issue