* vim:expandtab:shiftwidth=8:tabstop=8:
*
* Copyright (C) 2006 Cluster File Systems, Inc.
+ * Author: Eric Mei <ericm@clusterfs.com>
*
* This file is part of Lustre, http://www.lustre.org.
*
#include <lustre_sec.h>
static struct ptlrpc_sec_policy plain_policy;
+static struct ptlrpc_ctx_ops plain_ctx_ops;
static struct ptlrpc_sec plain_sec;
static struct ptlrpc_cli_ctx plain_cli_ctx;
static struct ptlrpc_svc_ctx plain_svc_ctx;
+/****************************************
+ * cli_ctx apis *
+ ****************************************/
+
static
int plain_ctx_refresh(struct ptlrpc_cli_ctx *ctx)
{
req->rq_repbuf->lm_bufcount - 1);
}
-static struct ptlrpc_ctx_ops plain_ctx_ops = {
- .refresh = plain_ctx_refresh,
- .sign = plain_ctx_sign,
- .verify = plain_ctx_verify,
- .wrap_bulk = plain_cli_wrap_bulk,
- .unwrap_bulk = plain_cli_unwrap_bulk,
-};
-
-static struct ptlrpc_svc_ctx plain_svc_ctx = {
- .sc_refcount = ATOMIC_INIT(1),
- .sc_policy = &plain_policy,
-};
+/****************************************
+ * sec apis *
+ ****************************************/
static
struct ptlrpc_sec* plain_create_sec(struct obd_import *imp,
static
struct ptlrpc_cli_ctx *plain_lookup_ctx(struct ptlrpc_sec *sec,
- struct vfs_cred *vcred)
+ struct vfs_cred *vcred,
+ int create, int remove_dead)
{
ENTRY;
atomic_inc(&plain_cli_ctx.cc_refcount);
}
static
+int plain_flush_ctx_cache(struct ptlrpc_sec *sec,
+ uid_t uid,
+ int grace, int force)
+{
+ return 0;
+}
+
+static
int plain_alloc_reqbuf(struct ptlrpc_sec *sec,
struct ptlrpc_request *req,
int msgsize)
RETURN(0);
}
+/****************************************
+ * service apis *
+ ****************************************/
+
+static struct ptlrpc_svc_ctx plain_svc_ctx = {
+ .sc_refcount = ATOMIC_INIT(1),
+ .sc_policy = &plain_policy,
+};
+
static
int plain_accept(struct ptlrpc_request *req)
{
int plain_svc_unwrap_bulk(struct ptlrpc_request *req,
struct ptlrpc_bulk_desc *desc)
{
- struct ptlrpc_reply_state *rs = req->rq_reply_state;
+ struct ptlrpc_reply_state *rs = req->rq_reply_state;
+ int voff, roff;
LASSERT(rs);
+ voff = req->rq_reqbuf->lm_bufcount - 1;
+ roff = rs->rs_repbuf->lm_bufcount - 1;
+
return bulk_csum_svc(desc, req->rq_bulk_read,
- req->rq_reqbuf, req->rq_reqbuf->lm_bufcount - 1,
- rs->rs_repbuf, rs->rs_repbuf->lm_bufcount - 1);
+ lustre_msg_buf(req->rq_reqbuf, voff, 0),
+ lustre_msg_buflen(req->rq_reqbuf, voff),
+ lustre_msg_buf(rs->rs_repbuf, roff, 0),
+ lustre_msg_buflen(rs->rs_repbuf, roff));
}
static
int plain_svc_wrap_bulk(struct ptlrpc_request *req,
struct ptlrpc_bulk_desc *desc)
{
- struct ptlrpc_reply_state *rs = req->rq_reply_state;
+ struct ptlrpc_reply_state *rs = req->rq_reply_state;
+ int voff, roff;
LASSERT(rs);
+ voff = req->rq_reqbuf->lm_bufcount - 1;
+ roff = rs->rs_repbuf->lm_bufcount - 1;
+
return bulk_csum_svc(desc, req->rq_bulk_read,
- req->rq_reqbuf, req->rq_reqbuf->lm_bufcount - 1,
- rs->rs_repbuf, rs->rs_repbuf->lm_bufcount - 1);
+ lustre_msg_buf(req->rq_reqbuf, voff, 0),
+ lustre_msg_buflen(req->rq_reqbuf, voff),
+ lustre_msg_buf(rs->rs_repbuf, roff, 0),
+ lustre_msg_buflen(rs->rs_repbuf, roff));
}
+static struct ptlrpc_ctx_ops plain_ctx_ops = {
+ .refresh = plain_ctx_refresh,
+ .sign = plain_ctx_sign,
+ .verify = plain_ctx_verify,
+ .wrap_bulk = plain_cli_wrap_bulk,
+ .unwrap_bulk = plain_cli_unwrap_bulk,
+};
+
static struct ptlrpc_sec_cops plain_sec_cops = {
.create_sec = plain_create_sec,
.destroy_sec = plain_destroy_sec,
.lookup_ctx = plain_lookup_ctx,
+ .flush_ctx_cache = plain_flush_ctx_cache,
.alloc_reqbuf = plain_alloc_reqbuf,
.alloc_repbuf = plain_alloc_repbuf,
.free_reqbuf = plain_free_reqbuf,
plain_sec.ps_import = NULL;
plain_sec.ps_flavor = SPTLRPC_FLVR_PLAIN;
plain_sec.ps_flags = 0;
- plain_sec.ps_gc_interval = 0;
- plain_sec.ps_gc_next = 0;
spin_lock_init(&plain_sec.ps_lock);
- plain_sec.ps_ccache_size = 1;
- plain_sec.ps_ccache = &__list;
atomic_set(&plain_sec.ps_busy, 1); /* for "plain_cli_ctx" */
+ CFS_INIT_LIST_HEAD(&plain_sec.ps_gc_list);
+ plain_sec.ps_gc_interval = 0;
+ plain_sec.ps_gc_next = 0;
- hlist_add_head(&plain_cli_ctx.cc_hash, &__list);
+ hlist_add_head(&plain_cli_ctx.cc_cache, &__list);
atomic_set(&plain_cli_ctx.cc_refcount, 1); /* for hash */
plain_cli_ctx.cc_sec = &plain_sec;
plain_cli_ctx.cc_ops = &plain_ctx_ops;
plain_cli_ctx.cc_expire = 0;
- plain_cli_ctx.cc_flags = PTLRPC_CTX_HASHED | PTLRPC_CTX_ETERNAL |
+ plain_cli_ctx.cc_flags = PTLRPC_CTX_CACHED | PTLRPC_CTX_ETERNAL |
PTLRPC_CTX_UPTODATE;
plain_cli_ctx.cc_vcred.vc_uid = 0;
spin_lock_init(&plain_cli_ctx.cc_lock);
- INIT_LIST_HEAD(&plain_cli_ctx.cc_req_list);
+ CFS_INIT_LIST_HEAD(&plain_cli_ctx.cc_req_list);
+ CFS_INIT_LIST_HEAD(&plain_cli_ctx.cc_gc_chain);
}
int sptlrpc_plain_init(void)