]> Pileus Git - ~andy/linux/blobdiff - fs/exofs/inode.c
libceph: specify osd op by index in request
[~andy/linux] / fs / exofs / inode.c
index b5618104775187787415b67c1d99658f45f8b3d7..d1f80abd8828fcf3d8adadea9246effef03b7e29 100644 (file)
@@ -361,12 +361,12 @@ static int read_exec(struct page_collect *pcol)
        return 0;
 
 err:
-       if (!pcol->read_4_write)
-               _unlock_pcol_pages(pcol, ret, READ);
-
-       pcol_free(pcol);
-
+       if (!pcol_copy) /* Failed before ownership transfer */
+               pcol_copy = pcol;
+       _unlock_pcol_pages(pcol_copy, ret, READ);
+       pcol_free(pcol_copy);
        kfree(pcol_copy);
+
        return ret;
 }
 
@@ -676,8 +676,10 @@ static int write_exec(struct page_collect *pcol)
        return 0;
 
 err:
-       _unlock_pcol_pages(pcol, ret, WRITE);
-       pcol_free(pcol);
+       if (!pcol_copy) /* Failed before ownership transfer */
+               pcol_copy = pcol;
+       _unlock_pcol_pages(pcol_copy, ret, WRITE);
+       pcol_free(pcol_copy);
        kfree(pcol_copy);
 
        return ret;