diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/exofs/inode.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c index b56181047751..d1f80abd8828 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c | |||
@@ -361,12 +361,12 @@ static int read_exec(struct page_collect *pcol) | |||
361 | return 0; | 361 | return 0; |
362 | 362 | ||
363 | err: | 363 | err: |
364 | if (!pcol->read_4_write) | 364 | if (!pcol_copy) /* Failed before ownership transfer */ |
365 | _unlock_pcol_pages(pcol, ret, READ); | 365 | pcol_copy = pcol; |
366 | 366 | _unlock_pcol_pages(pcol_copy, ret, READ); | |
367 | pcol_free(pcol); | 367 | pcol_free(pcol_copy); |
368 | |||
369 | kfree(pcol_copy); | 368 | kfree(pcol_copy); |
369 | |||
370 | return ret; | 370 | return ret; |
371 | } | 371 | } |
372 | 372 | ||
@@ -676,8 +676,10 @@ static int write_exec(struct page_collect *pcol) | |||
676 | return 0; | 676 | return 0; |
677 | 677 | ||
678 | err: | 678 | err: |
679 | _unlock_pcol_pages(pcol, ret, WRITE); | 679 | if (!pcol_copy) /* Failed before ownership transfer */ |
680 | pcol_free(pcol); | 680 | pcol_copy = pcol; |
681 | _unlock_pcol_pages(pcol_copy, ret, WRITE); | ||
682 | pcol_free(pcol_copy); | ||
681 | kfree(pcol_copy); | 683 | kfree(pcol_copy); |
682 | 684 | ||
683 | return ret; | 685 | return ret; |