reduce: write uncompressed data when compress returns error
Most typically, the error will be -ENOSPC, meaning the destination buffer wasn't big enough to hold the compressed data. But even for other types of errors, just write the uncompressed data rather than treating it as an I/O failure. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Id6526cab95488a1a587b183237f9980c83287761 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/449511 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
c1bab69c61
commit
fa0d54d431
@ -1018,10 +1018,14 @@ _write_compress_done(void *_req, int reduce_errno)
|
|||||||
{
|
{
|
||||||
struct spdk_reduce_vol_request *req = _req;
|
struct spdk_reduce_vol_request *req = _req;
|
||||||
|
|
||||||
/* Negative reduce_errno indicates failure for compression operations. */
|
/* Negative reduce_errno indicates failure for compression operations.
|
||||||
|
* Just write the uncompressed data instead. Force this to happen
|
||||||
|
* by just passing the full chunk size to _reduce_vol_write_chunk.
|
||||||
|
* When it sees the data couldn't be compressed, it will just write
|
||||||
|
* the uncompressed buffer to disk.
|
||||||
|
*/
|
||||||
if (reduce_errno < 0) {
|
if (reduce_errno < 0) {
|
||||||
_reduce_vol_complete_req(req, reduce_errno);
|
reduce_errno = req->vol->params.chunk_size;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Positive reduce_errno indicates number of bytes in compressed buffer. */
|
/* Positive reduce_errno indicates number of bytes in compressed buffer. */
|
||||||
|
Loading…
Reference in New Issue
Block a user