⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nfs4xdr.c

📁 Linux Kernel 2.6.9 for OMAP1710
💻 C
📖 第 1 页 / 共 5 页
字号:
	xdr_inline_pages(&req->rq_rcv_buf, replen, readdir->pages,			 readdir->pgbase, readdir->count);	return 0;}static int encode_readlink(struct xdr_stream *xdr, const struct nfs4_readlink *readlink, struct rpc_rqst *req){	struct rpc_auth *auth = req->rq_task->tk_auth;	unsigned int replen;	uint32_t *p;	RESERVE_SPACE(4);	WRITE32(OP_READLINK);	/* set up reply kvec	 *    toplevel_status + taglen + rescount + OP_PUTFH + status	 *      + OP_READLINK + status + string length = 8	 */	replen = (RPC_REPHDRSIZE + auth->au_rslack + 8) << 2;	xdr_inline_pages(&req->rq_rcv_buf, replen, readlink->pages,			readlink->pgbase, readlink->pglen);		return 0;}static int encode_remove(struct xdr_stream *xdr, const struct qstr *name){	uint32_t *p;	RESERVE_SPACE(8 + name->len);	WRITE32(OP_REMOVE);	WRITE32(name->len);	WRITEMEM(name->name, name->len);	return 0;}static int encode_rename(struct xdr_stream *xdr, const struct qstr *oldname, const struct qstr *newname){	uint32_t *p;	RESERVE_SPACE(8 + oldname->len);	WRITE32(OP_RENAME);	WRITE32(oldname->len);	WRITEMEM(oldname->name, oldname->len);		RESERVE_SPACE(4 + newname->len);	WRITE32(newname->len);	WRITEMEM(newname->name, newname->len);	return 0;}static int encode_renew(struct xdr_stream *xdr, const struct nfs4_client *client_stateid){	uint32_t *p;	RESERVE_SPACE(12);	WRITE32(OP_RENEW);	WRITE64(client_stateid->cl_clientid);	return 0;}static intencode_savefh(struct xdr_stream *xdr){	uint32_t *p;	RESERVE_SPACE(4);	WRITE32(OP_SAVEFH);	return 0;}static int encode_setattr(struct xdr_stream *xdr, const struct nfs_setattrargs *arg, const struct nfs_server *server){	int status;	uint32_t *p;	        RESERVE_SPACE(4+sizeof(arg->stateid.data));        WRITE32(OP_SETATTR);	WRITEMEM(arg->stateid.data, sizeof(arg->stateid.data));        if ((status = encode_attrs(xdr, arg->iap, server)))		return status;        return 0;}static int encode_setclientid(struct xdr_stream *xdr, const struct nfs4_setclientid *setclientid){	uint32_t *p;	RESERVE_SPACE(4 + sizeof(setclientid->sc_verifier->data));	WRITE32(OP_SETCLIENTID);	WRITEMEM(setclientid->sc_verifier->data, sizeof(setclientid->sc_verifier->data));	encode_string(xdr, setclientid->sc_name_len, setclientid->sc_name);	RESERVE_SPACE(4);	WRITE32(setclientid->sc_prog);	encode_string(xdr, setclientid->sc_netid_len, setclientid->sc_netid);	encode_string(xdr, setclientid->sc_uaddr_len, setclientid->sc_uaddr);	RESERVE_SPACE(4);	WRITE32(setclientid->sc_cb_ident);	return 0;}static int encode_setclientid_confirm(struct xdr_stream *xdr, const struct nfs4_client *client_state){        uint32_t *p;        RESERVE_SPACE(12 + sizeof(client_state->cl_confirm.data));        WRITE32(OP_SETCLIENTID_CONFIRM);        WRITE64(client_state->cl_clientid);        WRITEMEM(client_state->cl_confirm.data, sizeof(client_state->cl_confirm.data));        return 0;}static int encode_write(struct xdr_stream *xdr, const struct nfs_writeargs *args){	uint32_t *p;	RESERVE_SPACE(4);	WRITE32(OP_WRITE);	encode_stateid(xdr, args->context);	RESERVE_SPACE(16);	WRITE64(args->offset);	WRITE32(args->stable);	WRITE32(args->count);	xdr_write_pages(xdr, args->pages, args->pgbase, args->count);	return 0;}static int encode_delegreturn(struct xdr_stream *xdr, const nfs4_stateid *stateid){	uint32_t *p;	RESERVE_SPACE(20);	WRITE32(OP_DELEGRETURN);	WRITEMEM(stateid->data, sizeof(stateid->data));	return 0;}/* * END OF "GENERIC" ENCODE ROUTINES. *//* * Encode an ACCESS request */static int nfs4_xdr_enc_access(struct rpc_rqst *req, uint32_t *p, const struct nfs4_accessargs *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops = 2,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	if ((status = encode_putfh(&xdr, args->fh)) == 0)		status = encode_access(&xdr, args->access);	return status;}/* * Encode LOOKUP request */static int nfs4_xdr_enc_lookup(struct rpc_rqst *req, uint32_t *p, const struct nfs4_lookup_arg *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops = 4,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	if ((status = encode_putfh(&xdr, args->dir_fh)) != 0)		goto out;	if ((status = encode_lookup(&xdr, args->name)) != 0)		goto out;	if ((status = encode_getfh(&xdr)) != 0)		goto out;	status = encode_getfattr(&xdr, args->bitmask);out:	return status;}/* * Encode LOOKUP_ROOT request */static int nfs4_xdr_enc_lookup_root(struct rpc_rqst *req, uint32_t *p, const struct nfs4_lookup_root_arg *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops = 3,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	if ((status = encode_putrootfh(&xdr)) != 0)		goto out;	if ((status = encode_getfh(&xdr)) == 0)		status = encode_getfattr(&xdr, args->bitmask);out:	return status;}/* * Encode REMOVE request */static int nfs4_xdr_enc_remove(struct rpc_rqst *req, uint32_t *p, const struct nfs4_remove_arg *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops = 2,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	if ((status = encode_putfh(&xdr, args->fh)) == 0)		status = encode_remove(&xdr, args->name);	return status;}/* * Encode RENAME request */static int nfs4_xdr_enc_rename(struct rpc_rqst *req, uint32_t *p, const struct nfs4_rename_arg *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops = 4,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	if ((status = encode_putfh(&xdr, args->old_dir)) != 0)		goto out;	if ((status = encode_savefh(&xdr)) != 0)		goto out;	if ((status = encode_putfh(&xdr, args->new_dir)) != 0)		goto out;	status = encode_rename(&xdr, args->old_name, args->new_name);out:	return status;}/* * Encode LINK request */static int nfs4_xdr_enc_link(struct rpc_rqst *req, uint32_t *p, const struct nfs4_link_arg *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops = 4,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	if ((status = encode_putfh(&xdr, args->fh)) != 0)		goto out;	if ((status = encode_savefh(&xdr)) != 0)		goto out;	if ((status = encode_putfh(&xdr, args->dir_fh)) != 0)		goto out;	status = encode_link(&xdr, args->name);out:	return status;}/* * Encode CREATE request */static int nfs4_xdr_enc_create(struct rpc_rqst *req, uint32_t *p, const struct nfs4_create_arg *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops = 4,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	if ((status = encode_putfh(&xdr, args->dir_fh)) != 0)		goto out;	if ((status = encode_create(&xdr, args)) != 0)		goto out;	if ((status = encode_getfh(&xdr)) != 0)		goto out;	status = encode_getfattr(&xdr, args->bitmask);out:	return status;}/* * Encode SYMLINK request */static int nfs4_xdr_enc_symlink(struct rpc_rqst *req, uint32_t *p, const struct nfs4_create_arg *args){	return nfs4_xdr_enc_create(req, p, args);}/* * Encode GETATTR request */static int nfs4_xdr_enc_getattr(struct rpc_rqst *req, uint32_t *p, const struct nfs4_getattr_arg *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops = 2,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	if ((status = encode_putfh(&xdr, args->fh)) == 0)		status = encode_getfattr(&xdr, args->bitmask);	return status;}/* * Encode a CLOSE request */static int nfs4_xdr_enc_close(struct rpc_rqst *req, uint32_t *p, struct nfs_closeargs *args){        struct xdr_stream xdr;        struct compound_hdr hdr = {                .nops   = 2,        };        int status;        xdr_init_encode(&xdr, &req->rq_snd_buf, p);        encode_compound_hdr(&xdr, &hdr);        status = encode_putfh(&xdr, args->fh);        if(status)                goto out;        status = encode_close(&xdr, args);out:        return status;}/* * Encode an OPEN request */static int nfs4_xdr_enc_open(struct rpc_rqst *req, uint32_t *p, struct nfs_openargs *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops = 4,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	status = encode_putfh(&xdr, args->fh);	if (status)		goto out;	status = encode_open(&xdr, args);	if (status)		goto out;	status = encode_getfh(&xdr);	if (status)		goto out;	status = encode_getfattr(&xdr, args->bitmask);out:	return status;}/* * Encode an OPEN_CONFIRM request */static int nfs4_xdr_enc_open_confirm(struct rpc_rqst *req, uint32_t *p, struct nfs_open_confirmargs *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops   = 2,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	status = encode_putfh(&xdr, args->fh);	if(status)		goto out;	status = encode_open_confirm(&xdr, args);out:	return status;}/* * Encode an OPEN request with no attributes. */static int nfs4_xdr_enc_open_noattr(struct rpc_rqst *req, uint32_t *p, struct nfs_openargs *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops   = 2,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	status = encode_putfh(&xdr, args->fh);	if (status)		goto out;	status = encode_open(&xdr, args);out:	return status;}/* * Encode an OPEN_DOWNGRADE request */static int nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req, uint32_t *p, struct nfs_closeargs *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops	= 2,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	status = encode_putfh(&xdr, args->fh);	if (status)		goto out;	status = encode_open_downgrade(&xdr, args);out:	return status;}/* * Encode a LOCK request */static int nfs4_xdr_enc_lock(struct rpc_rqst *req, uint32_t *p, struct nfs_lockargs *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops   = 2,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	status = encode_putfh(&xdr, args->fh);	if(status)		goto out;	status = encode_lock(&xdr, args);out:	return status;}/* * Encode a LOCKT request */static int nfs4_xdr_enc_lockt(struct rpc_rqst *req, uint32_t *p, struct nfs_lockargs *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops   = 2,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	status = encode_putfh(&xdr, args->fh);	if(status)		goto out;	status = encode_lockt(&xdr, args);out:	return status;}/* * Encode a LOCKU request */static int nfs4_xdr_enc_locku(struct rpc_rqst *req, uint32_t *p, struct nfs_lockargs *args){	struct xdr_stream xdr;	struct compound_hdr hdr = {		.nops   = 2,	};	int status;	xdr_init_encode(&xdr, &req->rq_snd_buf, p);	encode_compound_hdr(&xdr, &hdr);	status = encode_putfh(&xdr, args->fh);	if(status)		goto out;	status = encode_locku(&xdr, args);out:	return status;}/*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -