Changeset View
Changeset View
Standalone View
Standalone View
sbin/ggate/ggated/ggated.c
Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
break; | break; | ||||
case GGATE_CMD_WRITE: | case GGATE_CMD_WRITE: | ||||
data = pwrite(fd, req->r_data, req->r_length, | data = pwrite(fd, req->r_data, req->r_length, | ||||
req->r_offset); | req->r_offset); | ||||
/* Free data memory here - better sooner. */ | /* Free data memory here - better sooner. */ | ||||
free(req->r_data); | free(req->r_data); | ||||
req->r_data = NULL; | req->r_data = NULL; | ||||
break; | break; | ||||
default: | |||||
req->r_error = EOPNOTSUPP; | |||||
jo_bruelltuete.com: this seems prudent.
otherwise unsupported requests (like maybe flush or trim from a newer… | |||||
if (req->r_data != NULL) { | |||||
free(req->r_data); | |||||
req->r_data = NULL; | |||||
} | |||||
break; | |||||
} | } | ||||
if (data != (ssize_t)req->r_length) { | if (data != (ssize_t)req->r_length) { | ||||
/* Report short reads/writes as I/O errors. */ | /* Report short reads/writes as I/O errors. */ | ||||
if (errno == 0) | if (errno == 0) | ||||
errno = EIO; | errno = EIO; | ||||
g_gate_log(LOG_ERR, "Disk error: %s", strerror(errno)); | g_gate_log(LOG_ERR, "Disk error: %s", strerror(errno)); | ||||
req->r_error = errno; | req->r_error = errno; | ||||
if (req->r_data != NULL) { | if (req->r_data != NULL) { | ||||
▲ Show 20 Lines • Show All 92 Lines • Show Last 20 Lines |
this seems prudent.
otherwise unsupported requests (like maybe flush or trim from a newer version of ggatec) would get EIO, but in a not so obvious way.