From 5c0dbfe3eb40100f9277e863926f2e7d7c9a5a4c Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Fri, 7 Jul 2017 23:30:14 +0200 Subject: Fall back to global I/O size on macOS The st_blksize value of struct stat represents the optimal block size for file I/O operations. FUSE for macOS will use this value when preforming read or write operations on the file. The smaller st_blksize is the more context switches are required to complete the operation. Setting st_blksize to 0 results in FUSE for macOS falling back to the global I/O size, that can be specified through the "-o iosize=..." mount-time option. Fixes osxfuse/osxfuse#389 and osxfuse/sshfs#33 --- sshfs.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'sshfs.c') diff --git a/sshfs.c b/sshfs.c index 8cde971..2ef45d5 100644 --- a/sshfs.c +++ b/sshfs.c @@ -2000,6 +2000,9 @@ static int sshfs_getattr(const char *path, struct stat *stbuf) &buf, SSH_FXP_ATTRS, &outbuf); if (!err) { err = buf_get_attrs(&outbuf, stbuf, NULL); +#ifdef __APPLE__ + stbuf->st_blksize = 0; +#endif buf_free(&outbuf); } buf_free(&buf); @@ -3203,6 +3206,9 @@ static int sshfs_fgetattr(const char *path, struct stat *stbuf, err = sftp_request(SSH_FXP_FSTAT, &buf, SSH_FXP_ATTRS, &outbuf); if (!err) { err = buf_get_attrs(&outbuf, stbuf, NULL); +#ifdef __APPLE__ + stbuf->st_blksize = 0; +#endif buf_free(&outbuf); } buf_free(&buf); -- cgit v1.2.3