Commit e7c62197 authored by Christian Schoenebeck's avatar Christian Schoenebeck Committed by Dominique Martinet

net/9p: split message size argument into 't_size' and 'r_size' pair

Refactor 'max_size' argument of p9_tag_alloc() and 'req_size' argument
of p9_client_prepare_req() both into a pair of arguments 't_size' and
'r_size' respectively to allow handling the buffer size for request and
reply separately from each other.

Link: https://lkml.kernel.org/r/9431a25fe4b37fd12cecbd715c13af71f701f220.1657920926.git.linux_oss@crudebyte.comSigned-off-by: default avatarChristian Schoenebeck <linux_oss@crudebyte.com>
Signed-off-by: default avatarDominique Martinet <asmadeus@codewreck.org>
parent 52f1c45d
...@@ -255,24 +255,26 @@ static struct kmem_cache *p9_req_cache; ...@@ -255,24 +255,26 @@ static struct kmem_cache *p9_req_cache;
* p9_tag_alloc - Allocate a new request. * p9_tag_alloc - Allocate a new request.
* @c: Client session. * @c: Client session.
* @type: Transaction type. * @type: Transaction type.
* @max_size: Maximum packet size for this request. * @t_size: Buffer size for holding this request.
* @r_size: Buffer size for holding server's reply on this request.
* *
* Context: Process context. * Context: Process context.
* Return: Pointer to new request. * Return: Pointer to new request.
*/ */
static struct p9_req_t * static struct p9_req_t *
p9_tag_alloc(struct p9_client *c, int8_t type, unsigned int max_size) p9_tag_alloc(struct p9_client *c, int8_t type, uint t_size, uint r_size)
{ {
struct p9_req_t *req = kmem_cache_alloc(p9_req_cache, GFP_NOFS); struct p9_req_t *req = kmem_cache_alloc(p9_req_cache, GFP_NOFS);
int alloc_msize = min(c->msize, max_size); int alloc_tsize = min(c->msize, t_size);
int alloc_rsize = min(c->msize, r_size);
int tag; int tag;
if (!req) if (!req)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
if (p9_fcall_init(c, &req->tc, alloc_msize)) if (p9_fcall_init(c, &req->tc, alloc_tsize))
goto free_req; goto free_req;
if (p9_fcall_init(c, &req->rc, alloc_msize)) if (p9_fcall_init(c, &req->rc, alloc_rsize))
goto free; goto free;
p9pdu_reset(&req->tc); p9pdu_reset(&req->tc);
...@@ -592,7 +594,7 @@ static int p9_client_flush(struct p9_client *c, struct p9_req_t *oldreq) ...@@ -592,7 +594,7 @@ static int p9_client_flush(struct p9_client *c, struct p9_req_t *oldreq)
} }
static struct p9_req_t *p9_client_prepare_req(struct p9_client *c, static struct p9_req_t *p9_client_prepare_req(struct p9_client *c,
int8_t type, int req_size, int8_t type, uint t_size, uint r_size,
const char *fmt, va_list ap) const char *fmt, va_list ap)
{ {
int err; int err;
...@@ -608,7 +610,7 @@ static struct p9_req_t *p9_client_prepare_req(struct p9_client *c, ...@@ -608,7 +610,7 @@ static struct p9_req_t *p9_client_prepare_req(struct p9_client *c,
if (c->status == BeginDisconnect && type != P9_TCLUNK) if (c->status == BeginDisconnect && type != P9_TCLUNK)
return ERR_PTR(-EIO); return ERR_PTR(-EIO);
req = p9_tag_alloc(c, type, req_size); req = p9_tag_alloc(c, type, t_size, r_size);
if (IS_ERR(req)) if (IS_ERR(req))
return req; return req;
...@@ -645,7 +647,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) ...@@ -645,7 +647,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...)
struct p9_req_t *req; struct p9_req_t *req;
va_start(ap, fmt); va_start(ap, fmt);
req = p9_client_prepare_req(c, type, c->msize, fmt, ap); req = p9_client_prepare_req(c, type, c->msize, c->msize, fmt, ap);
va_end(ap); va_end(ap);
if (IS_ERR(req)) if (IS_ERR(req))
return req; return req;
...@@ -743,7 +745,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type, ...@@ -743,7 +745,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
/* We allocate a inline protocol data of only 4k bytes. /* We allocate a inline protocol data of only 4k bytes.
* The actual content is passed in zero-copy fashion. * The actual content is passed in zero-copy fashion.
*/ */
req = p9_client_prepare_req(c, type, P9_ZC_HDR_SZ, fmt, ap); req = p9_client_prepare_req(c, type, P9_ZC_HDR_SZ, P9_ZC_HDR_SZ, fmt, ap);
va_end(ap); va_end(ap);
if (IS_ERR(req)) if (IS_ERR(req))
return req; return req;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment