lkml.org 
[lkml]   [2018]   [Jun]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/6] 9p: Change p9_fid_create calling convention
    Date
    Return NULL instead of ERR_PTR when we can't allocate a FID.  The ENOSPC
    return value was getting all the way back to userspace, and that's
    confusing for a userspace program which isn't expecting read() to tell it
    there's no space left on the filesystem. The best error we can return to
    indicate a temporary failure caused by lack of client resources is ENOMEM.

    Maybe it would be better to sleep until a FID is available, but that's
    not a change I'm comfortable making.

    Signed-off-by: Matthew Wilcox <willy@infradead.org>
    ---
    net/9p/client.c | 23 +++++++++--------------
    1 file changed, 9 insertions(+), 14 deletions(-)

    diff --git a/net/9p/client.c b/net/9p/client.c
    index 18c5271910dc..f8d58b0852fe 100644
    --- a/net/9p/client.c
    +++ b/net/9p/client.c
    @@ -913,13 +913,11 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)
    p9_debug(P9_DEBUG_FID, "clnt %p\n", clnt);
    fid = kmalloc(sizeof(struct p9_fid), GFP_KERNEL);
    if (!fid)
    - return ERR_PTR(-ENOMEM);
    + return NULL;

    ret = p9_idpool_get(clnt->fidpool);
    - if (ret < 0) {
    - ret = -ENOSPC;
    + if (ret < 0)
    goto error;
    - }
    fid->fid = ret;

    memset(&fid->qid, 0, sizeof(struct p9_qid));
    @@ -935,7 +933,7 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)

    error:
    kfree(fid);
    - return ERR_PTR(ret);
    + return NULL;
    }

    static void p9_fid_destroy(struct p9_fid *fid)
    @@ -1137,9 +1135,8 @@ struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid,
    p9_debug(P9_DEBUG_9P, ">>> TATTACH afid %d uname %s aname %s\n",
    afid ? afid->fid : -1, uname, aname);
    fid = p9_fid_create(clnt);
    - if (IS_ERR(fid)) {
    - err = PTR_ERR(fid);
    - fid = NULL;
    + if (!fid) {
    + err = -ENOMEM;
    goto error;
    }
    fid->uid = n_uname;
    @@ -1188,9 +1185,8 @@ struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname,
    clnt = oldfid->clnt;
    if (clone) {
    fid = p9_fid_create(clnt);
    - if (IS_ERR(fid)) {
    - err = PTR_ERR(fid);
    - fid = NULL;
    + if (!fid) {
    + err = -ENOMEM;
    goto error;
    }

    @@ -2018,9 +2014,8 @@ struct p9_fid *p9_client_xattrwalk(struct p9_fid *file_fid,
    err = 0;
    clnt = file_fid->clnt;
    attr_fid = p9_fid_create(clnt);
    - if (IS_ERR(attr_fid)) {
    - err = PTR_ERR(attr_fid);
    - attr_fid = NULL;
    + if (!attr_fid) {
    + err = -ENOMEM;
    goto error;
    }
    p9_debug(P9_DEBUG_9P,
    --
    2.18.0
    \
     
     \ /
      Last update: 2018-06-28 15:29    [W:2.435 / U:0.296 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site