aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/exofs/inode.c16
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
363err: 363err:
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
678err: 678err:
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;