|
@@ -1,5 +1,6 @@
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/gfp.h>
|
|
|
+#include <linux/slab.h>
|
|
|
#include <linux/pagemap.h>
|
|
|
#include <linux/highmem.h>
|
|
|
#include <linux/ceph/pagelist.h>
|
|
@@ -13,8 +14,10 @@ static void ceph_pagelist_unmap_tail(struct ceph_pagelist *pl)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-int ceph_pagelist_release(struct ceph_pagelist *pl)
|
|
|
+void ceph_pagelist_release(struct ceph_pagelist *pl)
|
|
|
{
|
|
|
+ if (!atomic_dec_and_test(&pl->refcnt))
|
|
|
+ return;
|
|
|
ceph_pagelist_unmap_tail(pl);
|
|
|
while (!list_empty(&pl->head)) {
|
|
|
struct page *page = list_first_entry(&pl->head, struct page,
|
|
@@ -23,7 +26,7 @@ int ceph_pagelist_release(struct ceph_pagelist *pl)
|
|
|
__free_page(page);
|
|
|
}
|
|
|
ceph_pagelist_free_reserve(pl);
|
|
|
- return 0;
|
|
|
+ kfree(pl);
|
|
|
}
|
|
|
EXPORT_SYMBOL(ceph_pagelist_release);
|
|
|
|