NFSv4.2: Handle hole lengths that exceed the READ_PLUS read buffer
If a hole extends beyond the READ_PLUS read buffer, then we want to fill just the remaining buffer with zeros. Also ignore eof... Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
Родитель
82f98c8b11
Коммит
dac3b1059b
|
@ -1080,6 +1080,12 @@ static int decode_read_plus_hole(struct xdr_stream *xdr,
|
||||||
}
|
}
|
||||||
length -= args->offset + res->count - offset;
|
length -= args->offset + res->count - offset;
|
||||||
}
|
}
|
||||||
|
if (length + res->count > args->count) {
|
||||||
|
*eof = 0;
|
||||||
|
if (unlikely(res->count >= args->count))
|
||||||
|
return 1;
|
||||||
|
length = args->count - res->count;
|
||||||
|
}
|
||||||
recvd = xdr_expand_hole(xdr, res->count, length);
|
recvd = xdr_expand_hole(xdr, res->count, length);
|
||||||
res->count += recvd;
|
res->count += recvd;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче