rgw: fix memory fragmentation problem reading data from client.
mg_read returns 0 on EOF. In some versions of civetweb, mg_read can
return "short" reads. The logic in the rest of ceph depends on a read
always filling its buffer when possible. So loop here and fill the
buffer. Looping to fill the buffer means we must also track when
mg_read returns EOF, because after that further calls to mg_read will return -1.
Fixes: https://tracker.ceph.com/issues/23207 Signed-off-by: Marcus Watts <mwatts@redhat.com>