The xdr_get_next_encode_buffer() function is called infrequently. On a typical build/test workload, it's called about 1 time in 400 calls to xdr_reserve_space() (measured on NFSD). Force the compiler to remove it from xdr_reserve_space(), which is a hot path. This change reduces the size of xdr_reserve_space() from 10 cache lines to 4 on my test system. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> --- net/sunrpc/xdr.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c index b57cf9df4de8..08a85375b311 100644 --- a/net/sunrpc/xdr.c +++ b/net/sunrpc/xdr.c @@ -945,8 +945,13 @@ inline void xdr_commit_encode(struct xdr_stream *xdr) } EXPORT_SYMBOL_GPL(xdr_commit_encode); -static __be32 *xdr_get_next_encode_buffer(struct xdr_stream *xdr, - size_t nbytes) +/* + * The buffer space to be reserved crosses the boundary between + * xdr->buf->head and xdr->buf->pages, or between two pages + * in xdr->buf->pages. + */ +static noinline __be32 *xdr_get_next_encode_buffer(struct xdr_stream *xdr, + size_t nbytes) { __be32 *p; int space_left;