From: Darrick J. Wong <djwong@xxxxxxxxxx> If we're accessing the block device with directio (and hence bypassing the page cache), then don't fail on BLKBSZSET not working. We don't care what happens to the pagecache bufferheads. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- libxfs/init.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libxfs/init.c b/libxfs/init.c index fda36ba0f7d..ce6e62cde94 100644 --- a/libxfs/init.c +++ b/libxfs/init.c @@ -125,10 +125,14 @@ libxfs_device_open(char *path, int creat, int xflags, int setblksize) } if (!readonly && setblksize && (statb.st_mode & S_IFMT) == S_IFBLK) { - if (setblksize == 1) + if (setblksize == 1) { /* use the default blocksize */ (void)platform_set_blocksize(fd, path, statb.st_rdev, XFS_MIN_SECTORSIZE, 0); - else { + } else if (dio) { + /* try to use the given explicit blocksize */ + (void)platform_set_blocksize(fd, path, statb.st_rdev, + setblksize, 0); + } else { /* given an explicit blocksize to use */ if (platform_set_blocksize(fd, path, statb.st_rdev, setblksize, 1)) exit(1);