static void gssp_free_receive_pages(struct gssx_arg_accept_sec_context *arg)
 {
-       int i;
+       unsigned int i;
 
        for (i = 0; i < arg->npages && arg->pages[i]; i++)
                __free_page(arg->pages[i]);
 
 static int gssp_alloc_receive_pages(struct gssx_arg_accept_sec_context *arg)
 {
+       unsigned int i;
+
        arg->npages = DIV_ROUND_UP(NGROUPS_MAX * 4, PAGE_SIZE);
        arg->pages = kcalloc(arg->npages, sizeof(struct page *), GFP_KERNEL);
-       /*
-        * XXX: actual pages are allocated by xdr layer in
-        * xdr_partial_copy_from_skb.
-        */
        if (!arg->pages)
                return -ENOMEM;
+       for (i = 0; i < arg->npages; i++) {
+               arg->pages[i] = alloc_page(GFP_KERNEL);
+               if (!arg->pages[i]) {
+                       gssp_free_receive_pages(arg);
+                       return -ENOMEM;
+               }
+       }
        return 0;
 }
 
 
        xdr_inline_pages(&req->rq_rcv_buf,
                PAGE_SIZE/2 /* pretty arbitrary */,
                arg->pages, 0 /* page base */, arg->npages * PAGE_SIZE);
-       req->rq_rcv_buf.flags |= XDRBUF_SPARSE_PAGES;
 done:
        if (err)
                dprintk("RPC:       gssx_enc_accept_sec_context: %d\n", err);