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

📄 super.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	struct rpc_auth *auth = nfss->client->cl_auth;	struct nfs_iostats totals = { };	seq_printf(m, "statvers=%s", NFS_IOSTAT_VERS);	/*	 * Display all mount option settings	 */	seq_printf(m, "\n\topts:\t");	seq_puts(m, mnt->mnt_sb->s_flags & MS_RDONLY ? "ro" : "rw");	seq_puts(m, mnt->mnt_sb->s_flags & MS_SYNCHRONOUS ? ",sync" : "");	seq_puts(m, mnt->mnt_sb->s_flags & MS_NOATIME ? ",noatime" : "");	seq_puts(m, mnt->mnt_sb->s_flags & MS_NODIRATIME ? ",nodiratime" : "");	nfs_show_mount_options(m, nfss, 1);	seq_printf(m, "\n\tage:\t%lu", (jiffies - nfss->mount_time) / HZ);	seq_printf(m, "\n\tcaps:\t");	seq_printf(m, "caps=0x%x", nfss->caps);	seq_printf(m, ",wtmult=%d", nfss->wtmult);	seq_printf(m, ",dtsize=%d", nfss->dtsize);	seq_printf(m, ",bsize=%d", nfss->bsize);	seq_printf(m, ",namelen=%d", nfss->namelen);#ifdef CONFIG_NFS_V4	if (nfss->nfs_client->cl_nfsversion == 4) {		seq_printf(m, "\n\tnfsv4:\t");		seq_printf(m, "bm0=0x%x", nfss->attr_bitmask[0]);		seq_printf(m, ",bm1=0x%x", nfss->attr_bitmask[1]);		seq_printf(m, ",acl=0x%x", nfss->acl_bitmask);	}#endif	/*	 * Display security flavor in effect for this mount	 */	seq_printf(m, "\n\tsec:\tflavor=%d", auth->au_ops->au_flavor);	if (auth->au_flavor)		seq_printf(m, ",pseudoflavor=%d", auth->au_flavor);	/*	 * Display superblock I/O counters	 */	for_each_possible_cpu(cpu) {		struct nfs_iostats *stats;		preempt_disable();		stats = per_cpu_ptr(nfss->io_stats, cpu);		for (i = 0; i < __NFSIOS_COUNTSMAX; i++)			totals.events[i] += stats->events[i];		for (i = 0; i < __NFSIOS_BYTESMAX; i++)			totals.bytes[i] += stats->bytes[i];		preempt_enable();	}	seq_printf(m, "\n\tevents:\t");	for (i = 0; i < __NFSIOS_COUNTSMAX; i++)		seq_printf(m, "%lu ", totals.events[i]);	seq_printf(m, "\n\tbytes:\t");	for (i = 0; i < __NFSIOS_BYTESMAX; i++)		seq_printf(m, "%Lu ", totals.bytes[i]);	seq_printf(m, "\n");	rpc_print_iostats(m, nfss->client);	return 0;}/* * Begin unmount by attempting to remove all automounted mountpoints we added * in response to xdev traversals and referrals */static void nfs_umount_begin(struct vfsmount *vfsmnt, int flags){	struct nfs_server *server = NFS_SB(vfsmnt->mnt_sb);	struct rpc_clnt *rpc;	shrink_submounts(vfsmnt, &nfs_automount_list);	if (!(flags & MNT_FORCE))		return;	/* -EIO all pending I/O */	rpc = server->client_acl;	if (!IS_ERR(rpc))		rpc_killall_tasks(rpc);	rpc = server->client;	if (!IS_ERR(rpc))		rpc_killall_tasks(rpc);}/* * Sanity-check a server address provided by the mount command */static int nfs_verify_server_address(struct sockaddr *addr){	switch (addr->sa_family) {	case AF_INET: {		struct sockaddr_in *sa = (struct sockaddr_in *) addr;		if (sa->sin_addr.s_addr != INADDR_ANY)			return 1;		break;	}	}	return 0;}/* * Error-check and convert a string of mount options from user space into * a data structure */static int nfs_parse_mount_options(char *raw,				   struct nfs_parsed_mount_data *mnt){	char *p, *string;	if (!raw) {		dfprintk(MOUNT, "NFS: mount options string was NULL.\n");		return 1;	}	dfprintk(MOUNT, "NFS: nfs mount opts='%s'\n", raw);	while ((p = strsep(&raw, ",")) != NULL) {		substring_t args[MAX_OPT_ARGS];		int option, token;		if (!*p)			continue;		dfprintk(MOUNT, "NFS:   parsing nfs mount option '%s'\n", p);		token = match_token(p, nfs_mount_option_tokens, args);		switch (token) {		case Opt_soft:			mnt->flags |= NFS_MOUNT_SOFT;			break;		case Opt_hard:			mnt->flags &= ~NFS_MOUNT_SOFT;			break;		case Opt_intr:			mnt->flags |= NFS_MOUNT_INTR;			break;		case Opt_nointr:			mnt->flags &= ~NFS_MOUNT_INTR;			break;		case Opt_posix:			mnt->flags |= NFS_MOUNT_POSIX;			break;		case Opt_noposix:			mnt->flags &= ~NFS_MOUNT_POSIX;			break;		case Opt_cto:			mnt->flags &= ~NFS_MOUNT_NOCTO;			break;		case Opt_nocto:			mnt->flags |= NFS_MOUNT_NOCTO;			break;		case Opt_ac:			mnt->flags &= ~NFS_MOUNT_NOAC;			break;		case Opt_noac:			mnt->flags |= NFS_MOUNT_NOAC;			break;		case Opt_lock:			mnt->flags &= ~NFS_MOUNT_NONLM;			break;		case Opt_nolock:			mnt->flags |= NFS_MOUNT_NONLM;			break;		case Opt_v2:			mnt->flags &= ~NFS_MOUNT_VER3;			break;		case Opt_v3:			mnt->flags |= NFS_MOUNT_VER3;			break;		case Opt_udp:			mnt->flags &= ~NFS_MOUNT_TCP;			mnt->nfs_server.protocol = XPRT_TRANSPORT_UDP;			mnt->timeo = 7;			mnt->retrans = 5;			break;		case Opt_tcp:			mnt->flags |= NFS_MOUNT_TCP;			mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;			mnt->timeo = 600;			mnt->retrans = 2;			break;		case Opt_rdma:			mnt->flags |= NFS_MOUNT_TCP; /* for side protocols */			mnt->nfs_server.protocol = XPRT_TRANSPORT_RDMA;			mnt->timeo = 600;			mnt->retrans = 2;			break;		case Opt_acl:			mnt->flags &= ~NFS_MOUNT_NOACL;			break;		case Opt_noacl:			mnt->flags |= NFS_MOUNT_NOACL;			break;		case Opt_rdirplus:			mnt->flags &= ~NFS_MOUNT_NORDIRPLUS;			break;		case Opt_nordirplus:			mnt->flags |= NFS_MOUNT_NORDIRPLUS;			break;		case Opt_sharecache:			mnt->flags &= ~NFS_MOUNT_UNSHARED;			break;		case Opt_nosharecache:			mnt->flags |= NFS_MOUNT_UNSHARED;			break;		case Opt_port:			if (match_int(args, &option))				return 0;			if (option < 0 || option > 65535)				return 0;			mnt->nfs_server.address.sin_port = htons(option);			break;		case Opt_rsize:			if (match_int(args, &mnt->rsize))				return 0;			break;		case Opt_wsize:			if (match_int(args, &mnt->wsize))				return 0;			break;		case Opt_bsize:			if (match_int(args, &option))				return 0;			if (option < 0)				return 0;			mnt->bsize = option;			break;		case Opt_timeo:			if (match_int(args, &mnt->timeo))				return 0;			break;		case Opt_retrans:			if (match_int(args, &mnt->retrans))				return 0;			break;		case Opt_acregmin:			if (match_int(args, &mnt->acregmin))				return 0;			break;		case Opt_acregmax:			if (match_int(args, &mnt->acregmax))				return 0;			break;		case Opt_acdirmin:			if (match_int(args, &mnt->acdirmin))				return 0;			break;		case Opt_acdirmax:			if (match_int(args, &mnt->acdirmax))				return 0;			break;		case Opt_actimeo:			if (match_int(args, &option))				return 0;			if (option < 0)				return 0;			mnt->acregmin =			mnt->acregmax =			mnt->acdirmin =			mnt->acdirmax = option;			break;		case Opt_namelen:			if (match_int(args, &mnt->namlen))				return 0;			break;		case Opt_mountport:			if (match_int(args, &option))				return 0;			if (option < 0 || option > 65535)				return 0;			mnt->mount_server.port = option;			break;		case Opt_mountprog:			if (match_int(args, &option))				return 0;			if (option < 0)				return 0;			mnt->mount_server.program = option;			break;		case Opt_mountvers:			if (match_int(args, &option))				return 0;			if (option < 0)				return 0;			mnt->mount_server.version = option;			break;		case Opt_nfsprog:			if (match_int(args, &option))				return 0;			if (option < 0)				return 0;			mnt->nfs_server.program = option;			break;		case Opt_nfsvers:			if (match_int(args, &option))				return 0;			switch (option) {			case 2:				mnt->flags &= ~NFS_MOUNT_VER3;				break;			case 3:				mnt->flags |= NFS_MOUNT_VER3;				break;			default:				goto out_unrec_vers;			}			break;		case Opt_sec:			string = match_strdup(args);			if (string == NULL)				goto out_nomem;			token = match_token(string, nfs_secflavor_tokens, args);			kfree(string);			/*			 * The flags setting is for v2/v3.  The flavor_len			 * setting is for v4.  v2/v3 also need to know the			 * difference between NULL and UNIX.			 */			switch (token) {			case Opt_sec_none:				mnt->flags &= ~NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 0;				mnt->auth_flavors[0] = RPC_AUTH_NULL;				break;			case Opt_sec_sys:				mnt->flags &= ~NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 0;				mnt->auth_flavors[0] = RPC_AUTH_UNIX;				break;			case Opt_sec_krb5:				mnt->flags |= NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 1;				mnt->auth_flavors[0] = RPC_AUTH_GSS_KRB5;				break;			case Opt_sec_krb5i:				mnt->flags |= NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 1;				mnt->auth_flavors[0] = RPC_AUTH_GSS_KRB5I;				break;			case Opt_sec_krb5p:				mnt->flags |= NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 1;				mnt->auth_flavors[0] = RPC_AUTH_GSS_KRB5P;				break;			case Opt_sec_lkey:				mnt->flags |= NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 1;				mnt->auth_flavors[0] = RPC_AUTH_GSS_LKEY;				break;			case Opt_sec_lkeyi:				mnt->flags |= NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 1;				mnt->auth_flavors[0] = RPC_AUTH_GSS_LKEYI;				break;			case Opt_sec_lkeyp:				mnt->flags |= NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 1;				mnt->auth_flavors[0] = RPC_AUTH_GSS_LKEYP;				break;			case Opt_sec_spkm:				mnt->flags |= NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 1;				mnt->auth_flavors[0] = RPC_AUTH_GSS_SPKM;				break;			case Opt_sec_spkmi:				mnt->flags |= NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 1;				mnt->auth_flavors[0] = RPC_AUTH_GSS_SPKMI;				break;			case Opt_sec_spkmp:				mnt->flags |= NFS_MOUNT_SECFLAVOUR;				mnt->auth_flavor_len = 1;				mnt->auth_flavors[0] = RPC_AUTH_GSS_SPKMP;				break;			default:				goto out_unrec_sec;			}			break;		case Opt_proto:			string = match_strdup(args);			if (string == NULL)				goto out_nomem;			token = match_token(string,					    nfs_xprt_protocol_tokens, args);			kfree(string);			switch (token) {			case Opt_xprt_udp:				mnt->flags &= ~NFS_MOUNT_TCP;				mnt->nfs_server.protocol = XPRT_TRANSPORT_UDP;				mnt->timeo = 7;				mnt->retrans = 5;				break;			case Opt_xprt_tcp:				mnt->flags |= NFS_MOUNT_TCP;				mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;				mnt->timeo = 600;				mnt->retrans = 2;				break;			case Opt_xprt_rdma:				/* vector side protocols to TCP */				mnt->flags |= NFS_MOUNT_TCP;				mnt->nfs_server.protocol = XPRT_TRANSPORT_RDMA;				mnt->timeo = 600;				mnt->retrans = 2;				break;			default:				goto out_unrec_xprt;			}			break;		case Opt_mountproto:			string = match_strdup(args);			if (string == NULL)				goto out_nomem;			token = match_token(string,					    nfs_xprt_protocol_tokens, args);			kfree(string);			switch (token) {			case Opt_xprt_udp:				mnt->mount_server.protocol = XPRT_TRANSPORT_UDP;				break;			case Opt_xprt_tcp:				mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;				break;			case Opt_xprt_rdma: /* not used for side protocols */			default:				goto out_unrec_xprt;			}			break;		case Opt_addr:			string = match_strdup(args);			if (string == NULL)				goto out_nomem;			mnt->nfs_server.address.sin_family = AF_INET;			mnt->nfs_server.address.sin_addr.s_addr =							in_aton(string);			kfree(string);			break;		case Opt_clientaddr:			string = match_strdup(args);			if (string == NULL)				goto out_nomem;			mnt->client_address = string;			break;		case Opt_mountaddr:			string = match_strdup(args);			if (string == NULL)				goto out_nomem;			mnt->mount_server.address.sin_family = AF_INET;			mnt->mount_server.address.sin_addr.s_addr =							in_aton(string);			kfree(string);			break;		case Opt_userspace:		case Opt_deprecated:			break;		default:			goto out_unknown;		}	}	return 1;out_nomem:	printk(KERN_INFO "NFS: not enough memory to parse option\n");	return 0;out_unrec_vers:	printk(KERN_INFO "NFS: unrecognized NFS version number\n");	return 0;

⌨️ 快捷键说明

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