[SCSI] sg: fix a bug in st_map_user_pages failure path
authorHugh Dickins <hugh@veritas.com>
Fri, 2 Dec 2005 15:58:09 +0000 (15:58 +0000)
committerJames Bottomley <jejb@titanic.(none)>
Fri, 2 Dec 2005 16:24:22 +0000 (10:24 -0600)
sg's st_map_user_pages is modelled on an earlier version of st's
sgl_map_user_pages, and has the same bug: if get_user_pages got some but
not all of the pages, then those got were released, but the positive res
code returned implied that they were still to be freed.

Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Douglas Gilbert <dougg@torque.net>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/sg.c

index 6de7ff9faf2d461b5a8848acaec0809e1656c07c..b55c2a8a547cdc852174b27d68d4c486b39b5a98 100644 (file)
@@ -1860,9 +1860,11 @@ st_map_user_pages(struct scatterlist *sgl, const unsigned int max_pages,
           unlock_page(pages[j]); */
        res = 0;
  out_unmap:
-       if (res > 0)
+       if (res > 0) {
                for (j=0; j < res; j++)
                        page_cache_release(pages[j]);
+               res = 0;
+       }
        kfree(pages);
        return res;
 }