/* From the hall of fame of impractical attacks:
         * Is this a user who tries to snoop on the cache? */
        rtn = RC_DOIT;
-       if (!rqstp->rq_secure && rp->c_secure)
+       if (!test_bit(RQ_SECURE, &rqstp->rq_flags) && rp->c_secure)
                goto out;
 
        /* Compose RPC reply header */
        spin_lock(&b->cache_lock);
        drc_mem_usage += bufsize;
        lru_put_end(b, rp);
-       rp->c_secure = rqstp->rq_secure;
+       rp->c_secure = test_bit(RQ_SECURE, &rqstp->rq_flags);
        rp->c_type = cachetype;
        rp->c_state = RC_DONE;
        spin_unlock(&b->cache_lock);
 
        int flags = nfsexp_flags(rqstp, exp);
 
        /* Check if the request originated from a secure port. */
-       if (!rqstp->rq_secure && !(flags & NFSEXP_INSECURE_PORT)) {
+       if (!test_bit(RQ_SECURE, &rqstp->rq_flags) && !(flags & NFSEXP_INSECURE_PORT)) {
                RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
                dprintk("nfsd: request from insecure port %s!\n",
                        svc_print_addr(rqstp, buf, sizeof(buf)));
 
        u32                     rq_vers;        /* program version */
        u32                     rq_proc;        /* procedure number */
        u32                     rq_prot;        /* IP protocol */
-       unsigned short
-                               rq_secure  : 1; /* secure port */
+#define        RQ_SECURE       (0)                     /* secure port */
+       unsigned long           rq_flags;       /* flags field */
        unsigned short          rq_local   : 1; /* local request */
 
        void *                  rq_argp;        /* decoded arguments */
 
                        __entry->copied, __entry->reclen, __entry->offset)
 );
 
+#define show_rqstp_flags(flags)                                \
+       __print_flags(flags, "|",                       \
+               { (1UL << RQ_SECURE),   "RQ_SECURE"})
+
 TRACE_EVENT(svc_recv,
        TP_PROTO(struct svc_rqst *rqst, int status),
 
                __field(struct sockaddr *, addr)
                __field(__be32, xid)
                __field(int, status)
+               __field(unsigned long, flags)
        ),
 
        TP_fast_assign(
                __entry->addr = (struct sockaddr *)&rqst->rq_addr;
                __entry->xid = status > 0 ? rqst->rq_xid : 0;
                __entry->status = status;
+               __entry->flags = rqst->rq_flags;
        ),
 
-       TP_printk("addr=%pIScp xid=0x%x status=%d", __entry->addr,
-                       be32_to_cpu(__entry->xid), __entry->status)
+       TP_printk("addr=%pIScp xid=0x%x status=%d flags=%s", __entry->addr,
+                       be32_to_cpu(__entry->xid), __entry->status,
+                       show_rqstp_flags(__entry->flags))
 );
 
 DECLARE_EVENT_CLASS(svc_rqst_status,
                __field(__be32, xid)
                __field(int, dropme)
                __field(int, status)
+               __field(unsigned long, flags)
        ),
 
        TP_fast_assign(
                __entry->xid = rqst->rq_xid;
                __entry->dropme = (int)rqst->rq_dropme;
                __entry->status = status;
+               __entry->flags = rqst->rq_flags;
        ),
 
-       TP_printk("addr=%pIScp rq_xid=0x%x dropme=%d status=%d",
+       TP_printk("addr=%pIScp rq_xid=0x%x dropme=%d status=%d flags=%s",
                __entry->addr, be32_to_cpu(__entry->xid), __entry->dropme,
-               __entry->status)
+               __entry->status, show_rqstp_flags(__entry->flags))
 );
 
 DEFINE_EVENT(svc_rqst_status, svc_process,
 
 
        clear_bit(XPT_OLD, &xprt->xpt_flags);
 
-       rqstp->rq_secure = xprt->xpt_ops->xpo_secure_port(rqstp);
+       if (xprt->xpt_ops->xpo_secure_port(rqstp))
+               set_bit(RQ_SECURE, &rqstp->rq_flags);
+       else
+               clear_bit(RQ_SECURE, &rqstp->rq_flags);
        rqstp->rq_chandle.defer = svc_defer;
        rqstp->rq_xid = svc_getu32(&rqstp->rq_arg.head[0]);