]> git.proxmox.com Git - mirror_ubuntu-disco-kernel.git/commitdiff
pnfs-obj: don't leak objio_state if ore_write/read fails
authorBoaz Harrosh <bharrosh@panasas.com>
Fri, 8 Jun 2012 02:29:40 +0000 (05:29 +0300)
committerBoaz Harrosh <bharrosh@panasas.com>
Fri, 20 Jul 2012 08:50:30 +0000 (11:50 +0300)
[Bug since 3.2 Kernel]
CC: Stable Tree <stable@kernel.org>
Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
fs/nfs/objlayout/objio_osd.c

index b47277baebab92930bee6c1fbac445fd8978a6b9..86d7595aca8f69c0b6cb74fc78455775a894b6f7 100644 (file)
@@ -454,7 +454,10 @@ int objio_read_pagelist(struct nfs_read_data *rdata)
        objios->ios->done = _read_done;
        dprintk("%s: offset=0x%llx length=0x%x\n", __func__,
                rdata->args.offset, rdata->args.count);
-       return ore_read(objios->ios);
+       ret = ore_read(objios->ios);
+       if (unlikely(ret))
+               objio_free_result(&objios->oir);
+       return ret;
 }
 
 /*
@@ -539,8 +542,10 @@ int objio_write_pagelist(struct nfs_write_data *wdata, int how)
        dprintk("%s: offset=0x%llx length=0x%x\n", __func__,
                wdata->args.offset, wdata->args.count);
        ret = ore_write(objios->ios);
-       if (unlikely(ret))
+       if (unlikely(ret)) {
+               objio_free_result(&objios->oir);
                return ret;
+       }
 
        if (objios->sync)
                _write_done(objios->ios, objios);