diff options
| author | Boaz Harrosh <bharrosh@panasas.com> | 2012-06-07 22:29:40 -0400 |
|---|---|---|
| committer | Boaz Harrosh <bharrosh@panasas.com> | 2012-07-20 04:50:30 -0400 |
| commit | 9909d45a8557455ca5f8ee7af0f253debc851f1a (patch) | |
| tree | e1c60f1bdc4ecedf8d6c50bbede7ff05035d3a56 | |
| parent | 537632e0a54a5355cdd0330911d18c3b773f9cf7 (diff) | |
pnfs-obj: don't leak objio_state if ore_write/read fails
[Bug since 3.2 Kernel]
CC: Stable Tree <stable@kernel.org>
Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
| -rw-r--r-- | fs/nfs/objlayout/objio_osd.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/nfs/objlayout/objio_osd.c b/fs/nfs/objlayout/objio_osd.c index b47277baebab..86d7595aca8f 100644 --- a/fs/nfs/objlayout/objio_osd.c +++ b/fs/nfs/objlayout/objio_osd.c | |||
| @@ -454,7 +454,10 @@ int objio_read_pagelist(struct nfs_read_data *rdata) | |||
| 454 | objios->ios->done = _read_done; | 454 | objios->ios->done = _read_done; |
| 455 | dprintk("%s: offset=0x%llx length=0x%x\n", __func__, | 455 | dprintk("%s: offset=0x%llx length=0x%x\n", __func__, |
| 456 | rdata->args.offset, rdata->args.count); | 456 | rdata->args.offset, rdata->args.count); |
| 457 | return ore_read(objios->ios); | 457 | ret = ore_read(objios->ios); |
| 458 | if (unlikely(ret)) | ||
| 459 | objio_free_result(&objios->oir); | ||
| 460 | return ret; | ||
| 458 | } | 461 | } |
| 459 | 462 | ||
| 460 | /* | 463 | /* |
| @@ -539,8 +542,10 @@ int objio_write_pagelist(struct nfs_write_data *wdata, int how) | |||
| 539 | dprintk("%s: offset=0x%llx length=0x%x\n", __func__, | 542 | dprintk("%s: offset=0x%llx length=0x%x\n", __func__, |
| 540 | wdata->args.offset, wdata->args.count); | 543 | wdata->args.offset, wdata->args.count); |
| 541 | ret = ore_write(objios->ios); | 544 | ret = ore_write(objios->ios); |
| 542 | if (unlikely(ret)) | 545 | if (unlikely(ret)) { |
| 546 | objio_free_result(&objios->oir); | ||
| 543 | return ret; | 547 | return ret; |
| 548 | } | ||
| 544 | 549 | ||
| 545 | if (objios->sync) | 550 | if (objios->sync) |
| 546 | _write_done(objios->ios, objios); | 551 | _write_done(objios->ios, objios); |
