Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[pandora-kernel.git] / net / sunrpc / auth_gss / svcauth_gss.c
index b81e790..cc385b3 100644 (file)
@@ -494,7 +494,7 @@ static int rsc_parse(struct cache_detail *cd,
                len = qword_get(&mesg, buf, mlen);
                if (len < 0)
                        goto out;
-               status = gss_import_sec_context(buf, len, gm, &rsci.mechctx);
+               status = gss_import_sec_context(buf, len, gm, &rsci.mechctx, GFP_KERNEL);
                if (status)
                        goto out;
 
@@ -1315,6 +1315,14 @@ svcauth_gss_wrap_resp_priv(struct svc_rqst *rqstp)
        inpages = resbuf->pages;
        /* XXX: Would be better to write some xdr helper functions for
         * nfs{2,3,4}xdr.c that place the data right, instead of copying: */
+
+       /*
+        * If there is currently tail data, make sure there is
+        * room for the head, tail, and 2 * RPC_MAX_AUTH_SIZE in
+        * the page, and move the current tail data such that
+        * there is RPC_MAX_AUTH_SIZE slack space available in
+        * both the head and tail.
+        */
        if (resbuf->tail[0].iov_base) {
                BUG_ON(resbuf->tail[0].iov_base >= resbuf->head[0].iov_base
                                                        + PAGE_SIZE);
@@ -1327,6 +1335,13 @@ svcauth_gss_wrap_resp_priv(struct svc_rqst *rqstp)
                        resbuf->tail[0].iov_len);
                resbuf->tail[0].iov_base += RPC_MAX_AUTH_SIZE;
        }
+       /*
+        * If there is no current tail data, make sure there is
+        * room for the head data, and 2 * RPC_MAX_AUTH_SIZE in the
+        * allotted page, and set up tail information such that there
+        * is RPC_MAX_AUTH_SIZE slack space available in both the
+        * head and tail.
+        */
        if (resbuf->tail[0].iov_base == NULL) {
                if (resbuf->head[0].iov_len + 2*RPC_MAX_AUTH_SIZE > PAGE_SIZE)
                        return -ENOMEM;