* commit 'f043f061295a787aca42186fe9ab87c24d393b92': Fix sdcard's FUSE_FSYNCDIR handling.
This commit is contained in:
commit
6ebab06dc4
1 changed files with 16 additions and 7 deletions
|
@ -1316,14 +1316,23 @@ static int handle_release(struct fuse* fuse, struct fuse_handler* handler,
|
|||
static int handle_fsync(struct fuse* fuse, struct fuse_handler* handler,
|
||||
const struct fuse_in_header* hdr, const struct fuse_fsync_in* req)
|
||||
{
|
||||
int is_data_sync = req->fsync_flags & 1;
|
||||
struct handle *h = id_to_ptr(req->fh);
|
||||
int res;
|
||||
bool is_dir = (hdr->opcode == FUSE_FSYNCDIR);
|
||||
bool is_data_sync = req->fsync_flags & 1;
|
||||
|
||||
TRACE("[%d] FSYNC %p(%d) is_data_sync=%d\n", handler->token,
|
||||
h, h->fd, is_data_sync);
|
||||
res = is_data_sync ? fdatasync(h->fd) : fsync(h->fd);
|
||||
if (res < 0) {
|
||||
int fd = -1;
|
||||
if (is_dir) {
|
||||
struct dirhandle *dh = id_to_ptr(req->fh);
|
||||
fd = dirfd(dh->d);
|
||||
} else {
|
||||
struct handle *h = id_to_ptr(req->fh);
|
||||
fd = h->fd;
|
||||
}
|
||||
|
||||
TRACE("[%d] %s %p(%d) is_data_sync=%d\n", handler->token,
|
||||
is_dir ? "FSYNCDIR" : "FSYNC",
|
||||
id_to_ptr(req->fh), fd, is_data_sync);
|
||||
int res = is_data_sync ? fdatasync(fd) : fsync(fd);
|
||||
if (res == -1) {
|
||||
return -errno;
|
||||
}
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue