From 5fbf45b56298aa5a93cf9015f2d6346c7a0f615c Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Thu, 9 Apr 2015 21:26:25 -0500 Subject: [PATCH 1/1] afs: Log weird 'size' fetchdata errors There are a couple of situations that should never happen when issuing a fetchdata, but cause errors when they do: - The fileserver responds with more than 2^32 bytes of data - The fileserver responds with more data than requested (but still smaller than 2^32) While these should normally never be encountered, it can be very confusing when they do, since they cause file fetches to fail. To give the user or investigating developer some hope of figuring out what is going on, at least log a warning in these situations, to at least indicate this is the area in which something is breaking. Only log these once, in case something causes these conditions to be hit, e.g., every fetch. Once is at least enough to say this is happening. [mmeffie@sinenomine.net remove unneeded casts in afs_warn args and explicit static initializers.] Change-Id: I7561a9ecc225386f9b140e633912b900c591a9bb Reviewed-on: http://gerrit.openafs.org/11830 Reviewed-by: Benjamin Kaduk Tested-by: BuildBot --- src/afs/afs_fetchstore.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/afs/afs_fetchstore.c b/src/afs/afs_fetchstore.c index 3267aeb..f65f40c 100644 --- a/src/afs/afs_fetchstore.c +++ b/src/afs/afs_fetchstore.c @@ -986,6 +986,14 @@ rxfs_fetchInit(struct afs_conn *tc, struct rx_connection *rxconn, * in a signed 32-bit integer. If it is, we can't handle that, so * error out. */ if (length64 > MAX_AFS_INT32) { + static int warned; + if (!warned) { + warned = 1; + afs_warn("afs: Warning: FetchData64 returned too much data " + "(length64 %u.%u); this should not happen! " + "Aborting fetch request.\n", + length_hi, length); + } RX_AFS_GUNLOCK(); code = rx_EndCall(v->call, RX_PROTOCOL_ERROR); v->call = NULL; @@ -1049,6 +1057,14 @@ rxfs_fetchInit(struct afs_conn *tc, struct rx_connection *rxconn, * requested. It shouldn't do that, and accepting that much data * can make us take up more cache space than we're supposed to, * so error. */ + static int warned; + if (!warned) { + warned = 1; + afs_warn("afs: Warning: FetchData64 returned more data than " + "requested (requested %ld, got %ld); this should not " + "happen! Aborting fetch request.\n", + (long)size, (long)*alength); + } RX_AFS_GUNLOCK(); code = rx_EndCall(v->call, RX_PROTOCOL_ERROR); RX_AFS_GLOCK(); -- 1.9.4