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

📄 nfs4xdr.c

📁 Linux Kernel 2.6.9 for OMAP1710
💻 C
📖 第 1 页 / 共 5 页
字号:
{	uint32_t *p;	fsid->major = 0;	fsid->minor = 0;	if (unlikely(bitmap[0] & (FATTR4_WORD0_FSID - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_FSID)) {		READ_BUF(16);		READ64(fsid->major);		READ64(fsid->minor);		bitmap[0] &= ~FATTR4_WORD0_FSID;	}	dprintk("%s: fsid=(0x%Lx/0x%Lx)\n", __FUNCTION__,			(unsigned long long)fsid->major,			(unsigned long long)fsid->minor);	return 0;}static int decode_attr_lease_time(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res){	uint32_t *p;	*res = 60;	if (unlikely(bitmap[0] & (FATTR4_WORD0_LEASE_TIME - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_LEASE_TIME)) {		READ_BUF(4);		READ32(*res);		bitmap[0] &= ~FATTR4_WORD0_LEASE_TIME;	}	dprintk("%s: file size=%u\n", __FUNCTION__, (unsigned int)*res);	return 0;}static int decode_attr_aclsupport(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res){	uint32_t *p;	*res = ACL4_SUPPORT_ALLOW_ACL|ACL4_SUPPORT_DENY_ACL;	if (unlikely(bitmap[0] & (FATTR4_WORD0_ACLSUPPORT - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_ACLSUPPORT)) {		READ_BUF(4);		READ32(*res);		bitmap[0] &= ~FATTR4_WORD0_ACLSUPPORT;	}	dprintk("%s: ACLs supported=%u\n", __FUNCTION__, (unsigned int)*res);	return 0;}static int decode_attr_fileid(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *fileid){	uint32_t *p;	*fileid = 0;	if (unlikely(bitmap[0] & (FATTR4_WORD0_FILEID - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_FILEID)) {		READ_BUF(8);		READ64(*fileid);		bitmap[0] &= ~FATTR4_WORD0_FILEID;	}	dprintk("%s: fileid=%Lu\n", __FUNCTION__, (unsigned long long)*fileid);	return 0;}static int decode_attr_files_avail(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res){	uint32_t *p;	int status = 0;	*res = 0;	if (unlikely(bitmap[0] & (FATTR4_WORD0_FILES_AVAIL - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_FILES_AVAIL)) {		READ_BUF(8);		READ64(*res);		bitmap[0] &= ~FATTR4_WORD0_FILES_AVAIL;	}	dprintk("%s: files avail=%Lu\n", __FUNCTION__, (unsigned long long)*res);	return status;}static int decode_attr_files_free(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res){	uint32_t *p;	int status = 0;	*res = 0;	if (unlikely(bitmap[0] & (FATTR4_WORD0_FILES_FREE - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_FILES_FREE)) {		READ_BUF(8);		READ64(*res);		bitmap[0] &= ~FATTR4_WORD0_FILES_FREE;	}	dprintk("%s: files free=%Lu\n", __FUNCTION__, (unsigned long long)*res);	return status;}static int decode_attr_files_total(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res){	uint32_t *p;	int status = 0;	*res = 0;	if (unlikely(bitmap[0] & (FATTR4_WORD0_FILES_TOTAL - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_FILES_TOTAL)) {		READ_BUF(8);		READ64(*res);		bitmap[0] &= ~FATTR4_WORD0_FILES_TOTAL;	}	dprintk("%s: files total=%Lu\n", __FUNCTION__, (unsigned long long)*res);	return status;}static int decode_attr_maxfilesize(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res){	uint32_t *p;	int status = 0;	*res = 0;	if (unlikely(bitmap[0] & (FATTR4_WORD0_MAXFILESIZE - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_MAXFILESIZE)) {		READ_BUF(8);		READ64(*res);		bitmap[0] &= ~FATTR4_WORD0_MAXFILESIZE;	}	dprintk("%s: maxfilesize=%Lu\n", __FUNCTION__, (unsigned long long)*res);	return status;}static int decode_attr_maxlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *maxlink){	uint32_t *p;	int status = 0;	*maxlink = 1;	if (unlikely(bitmap[0] & (FATTR4_WORD0_MAXLINK - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_MAXLINK)) {		READ_BUF(4);		READ32(*maxlink);		bitmap[0] &= ~FATTR4_WORD0_MAXLINK;	}	dprintk("%s: maxlink=%u\n", __FUNCTION__, *maxlink);	return status;}static int decode_attr_maxname(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *maxname){	uint32_t *p;	int status = 0;	*maxname = 1024;	if (unlikely(bitmap[0] & (FATTR4_WORD0_MAXNAME - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_MAXNAME)) {		READ_BUF(4);		READ32(*maxname);		bitmap[0] &= ~FATTR4_WORD0_MAXNAME;	}	dprintk("%s: maxname=%u\n", __FUNCTION__, *maxname);	return status;}static int decode_attr_maxread(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res){	uint32_t *p;	int status = 0;	*res = 1024;	if (unlikely(bitmap[0] & (FATTR4_WORD0_MAXREAD - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_MAXREAD)) {		uint64_t maxread;		READ_BUF(8);		READ64(maxread);		if (maxread > 0x7FFFFFFF)			maxread = 0x7FFFFFFF;		*res = (uint32_t)maxread;		bitmap[0] &= ~FATTR4_WORD0_MAXREAD;	}	dprintk("%s: maxread=%lu\n", __FUNCTION__, (unsigned long)*res);	return status;}static int decode_attr_maxwrite(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *res){	uint32_t *p;	int status = 0;	*res = 1024;	if (unlikely(bitmap[0] & (FATTR4_WORD0_MAXWRITE - 1U)))		return -EIO;	if (likely(bitmap[0] & FATTR4_WORD0_MAXWRITE)) {		uint64_t maxwrite;		READ_BUF(8);		READ64(maxwrite);		if (maxwrite > 0x7FFFFFFF)			maxwrite = 0x7FFFFFFF;		*res = (uint32_t)maxwrite;		bitmap[0] &= ~FATTR4_WORD0_MAXWRITE;	}	dprintk("%s: maxwrite=%lu\n", __FUNCTION__, (unsigned long)*res);	return status;}static int decode_attr_mode(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *mode){	uint32_t *p;	*mode = 0;	if (unlikely(bitmap[1] & (FATTR4_WORD1_MODE - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_MODE)) {		READ_BUF(4);		READ32(*mode);		*mode &= ~S_IFMT;		bitmap[1] &= ~FATTR4_WORD1_MODE;	}	dprintk("%s: file mode=0%o\n", __FUNCTION__, (unsigned int)*mode);	return 0;}static int decode_attr_nlink(struct xdr_stream *xdr, uint32_t *bitmap, uint32_t *nlink){	uint32_t *p;	*nlink = 1;	if (unlikely(bitmap[1] & (FATTR4_WORD1_NUMLINKS - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_NUMLINKS)) {		READ_BUF(4);		READ32(*nlink);		bitmap[1] &= ~FATTR4_WORD1_NUMLINKS;	}	dprintk("%s: nlink=%u\n", __FUNCTION__, (unsigned int)*nlink);	return 0;}static int decode_attr_owner(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs4_client *clp, int32_t *uid){	uint32_t len, *p;	*uid = -2;	if (unlikely(bitmap[1] & (FATTR4_WORD1_OWNER - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_OWNER)) {		READ_BUF(4);		READ32(len);		READ_BUF(len);		if (len < XDR_MAX_NETOBJ) {			if (nfs_map_name_to_uid(clp, (char *)p, len, uid) != 0)				dprintk("%s: nfs_map_name_to_uid failed!\n",						__FUNCTION__);		} else			printk(KERN_WARNING "%s: name too long (%u)!\n",					__FUNCTION__, len);		bitmap[1] &= ~FATTR4_WORD1_OWNER;	}	dprintk("%s: uid=%d\n", __FUNCTION__, (int)*uid);	return 0;}static int decode_attr_group(struct xdr_stream *xdr, uint32_t *bitmap, struct nfs4_client *clp, int32_t *gid){	uint32_t len, *p;	*gid = -2;	if (unlikely(bitmap[1] & (FATTR4_WORD1_OWNER_GROUP - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_OWNER_GROUP)) {		READ_BUF(4);		READ32(len);		READ_BUF(len);		if (len < XDR_MAX_NETOBJ) {			if (nfs_map_group_to_gid(clp, (char *)p, len, gid) != 0)				dprintk("%s: nfs_map_group_to_gid failed!\n",						__FUNCTION__);		} else			printk(KERN_WARNING "%s: name too long (%u)!\n",					__FUNCTION__, len);		bitmap[1] &= ~FATTR4_WORD1_OWNER_GROUP;	}	dprintk("%s: gid=%d\n", __FUNCTION__, (int)*gid);	return 0;}static int decode_attr_rdev(struct xdr_stream *xdr, uint32_t *bitmap, dev_t *rdev){	uint32_t major = 0, minor = 0, *p;	*rdev = MKDEV(0,0);	if (unlikely(bitmap[1] & (FATTR4_WORD1_RAWDEV - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_RAWDEV)) {		dev_t tmp;		READ_BUF(8);		READ32(major);		READ32(minor);		tmp = MKDEV(major, minor);		if (MAJOR(tmp) == major && MINOR(tmp) == minor)			*rdev = tmp;		bitmap[1] &= ~ FATTR4_WORD1_RAWDEV;	}	dprintk("%s: rdev=(0x%x:0x%x)\n", __FUNCTION__, major, minor);	return 0;}static int decode_attr_space_avail(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res){	uint32_t *p;	int status = 0;	*res = 0;	if (unlikely(bitmap[1] & (FATTR4_WORD1_SPACE_AVAIL - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_SPACE_AVAIL)) {		READ_BUF(8);		READ64(*res);		bitmap[1] &= ~FATTR4_WORD1_SPACE_AVAIL;	}	dprintk("%s: space avail=%Lu\n", __FUNCTION__, (unsigned long long)*res);	return status;}static int decode_attr_space_free(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res){	uint32_t *p;	int status = 0;	*res = 0;	if (unlikely(bitmap[1] & (FATTR4_WORD1_SPACE_FREE - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_SPACE_FREE)) {		READ_BUF(8);		READ64(*res);		bitmap[1] &= ~FATTR4_WORD1_SPACE_FREE;	}	dprintk("%s: space free=%Lu\n", __FUNCTION__, (unsigned long long)*res);	return status;}static int decode_attr_space_total(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *res){	uint32_t *p;	int status = 0;	*res = 0;	if (unlikely(bitmap[1] & (FATTR4_WORD1_SPACE_TOTAL - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_SPACE_TOTAL)) {		READ_BUF(8);		READ64(*res);		bitmap[1] &= ~FATTR4_WORD1_SPACE_TOTAL;	}	dprintk("%s: space total=%Lu\n", __FUNCTION__, (unsigned long long)*res);	return status;}static int decode_attr_space_used(struct xdr_stream *xdr, uint32_t *bitmap, uint64_t *used){	uint32_t *p;	*used = 0;	if (unlikely(bitmap[1] & (FATTR4_WORD1_SPACE_USED - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_SPACE_USED)) {		READ_BUF(8);		READ64(*used);		bitmap[1] &= ~FATTR4_WORD1_SPACE_USED;	}	dprintk("%s: space used=%Lu\n", __FUNCTION__,			(unsigned long long)*used);	return 0;}static int decode_attr_time(struct xdr_stream *xdr, struct timespec *time){	uint32_t *p;	uint64_t sec;	uint32_t nsec;	READ_BUF(12);	READ64(sec);	READ32(nsec);	time->tv_sec = (time_t)sec;	time->tv_nsec = (long)nsec;	return 0;}static int decode_attr_time_access(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec *time){	int status = 0;	time->tv_sec = 0;	time->tv_nsec = 0;	if (unlikely(bitmap[1] & (FATTR4_WORD1_TIME_ACCESS - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_TIME_ACCESS)) {		status = decode_attr_time(xdr, time);		bitmap[1] &= ~FATTR4_WORD1_TIME_ACCESS;	}	dprintk("%s: atime=%ld\n", __FUNCTION__, (long)time->tv_sec);	return status;}static int decode_attr_time_metadata(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec *time){	int status = 0;	time->tv_sec = 0;	time->tv_nsec = 0;	if (unlikely(bitmap[1] & (FATTR4_WORD1_TIME_METADATA - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_TIME_METADATA)) {		status = decode_attr_time(xdr, time);		bitmap[1] &= ~FATTR4_WORD1_TIME_METADATA;	}	dprintk("%s: ctime=%ld\n", __FUNCTION__, (long)time->tv_sec);	return status;}static int decode_attr_time_modify(struct xdr_stream *xdr, uint32_t *bitmap, struct timespec *time){	int status = 0;	time->tv_sec = 0;	time->tv_nsec = 0;	if (unlikely(bitmap[1] & (FATTR4_WORD1_TIME_MODIFY - 1U)))		return -EIO;	if (likely(bitmap[1] & FATTR4_WORD1_TIME_MODIFY)) {		status = decode_attr_time(xdr, time);		bitmap[1] &= ~FATTR4_WORD1_TIME_MODIFY;	}	dprintk("%s: mtime=%ld\n", __FUNCTION__, (long)time->tv_sec);	return status;}static int verify_attr_len(struct xdr_stream *xdr, uint32_t *savep, uint32_t attrlen){	unsigned int attrwords = XDR_QUADLEN(attrlen);	unsigned int nwords = xdr->p - savep;	if (unlikely(attrwords != nwords)) {		printk(KERN_WARNING "%s: server returned incorrect attribute length: %u %c %u\n",				__FUNCTION__,				attrwords << 2,				(attrwords < nwords) ? '<' : '>',				nwords << 2);		return -EIO;	}	return 0;}static int decode_change_info(struct xdr_stream *xdr, struct nfs4_change_info *cinfo){	uint32_t *p;	READ_BUF(20);	READ32(cinfo->atomic);	READ64(cinfo->before);	READ64(cinfo->after);	return 0;}static int decode_access(struct xdr_stream *xdr, struct nfs4_accessres *access){	uint32_t *p;	uint32_t supp, acc;	int status;	status = decode_op_hdr(xdr, OP_ACCESS);	if (status)		return status;	READ_BUF(8);	READ32(supp);	READ32(acc);	access->supported = supp;	access->access = acc;	return 0;}static int decode_close(struct xdr_stream *xdr, struct nfs_closeres *res){	uint32_t *p;	int status;	status = decode_op_hdr(xdr, OP_CLOSE);	if (status)		return status;	READ_BUF(sizeof(res->stateid.data));	COPYMEM(res->stateid.data, sizeof(res->stateid.data));	return 0;}static int decode_commit(struct xdr_stream *xdr, struct nfs_writeres *res){	uint32_t *p;	int status;	status = decode_op_hdr(xdr, OP

⌨️ 快捷键说明

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