mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-09 20:41:04 -04:00
Fix #67: dwarfs I/O hangs if call to to fuse_reply_iov fails
This commit is contained in:
parent
14654b6f38
commit
075194067a
@ -329,16 +329,21 @@ void op_read(fuse_req_t req, fuse_ino_t ino, size_t size, off_t off,
|
|||||||
iovec_read_buf buf;
|
iovec_read_buf buf;
|
||||||
ssize_t rv = userdata->fs.readv(ino, buf, size, off);
|
ssize_t rv = userdata->fs.readv(ino, buf, size, off);
|
||||||
|
|
||||||
// std::cerr << ">>> " << rv << std::endl;
|
LOG_DEBUG << "readv(" << ino << ", " << size << ", " << off << ") -> "
|
||||||
|
<< rv << " [size = " << buf.buf.size() << "]";
|
||||||
|
|
||||||
if (rv >= 0) {
|
if (rv >= 0) {
|
||||||
fuse_reply_iov(req, buf.buf.empty() ? nullptr : &buf.buf[0],
|
int frv = fuse_reply_iov(req, buf.buf.empty() ? nullptr : &buf.buf[0],
|
||||||
buf.buf.size());
|
buf.buf.size());
|
||||||
|
|
||||||
|
if (frv == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = -frv;
|
||||||
|
} else {
|
||||||
err = -rv;
|
err = -rv;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
err = EIO;
|
err = EIO;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user