return 0; 
goto done; 
xfs_parseargs(	struct bhv_desc		*bhv,	char			*options,	struct xfs_mount_args	*args,	int			update){	struct vfs		*vfsp = bhvtovfs(bhv);	char			*this_char, *value, *eov;	int			dsunit, dswidth, vol_dsunit, vol_dswidth;	int			iosize;	args->flags2 |= XFSMNT2_COMPAT_IOSIZE;	args->flags |= XFSMNT_COMPAT_ATTR;#if 0	/* XXX: off by default, until some remaining issues ironed out */	args->flags |= XFSMNT_IDELETE; /* default to on */#endif	if (!options)		return 0;	iosize = dsunit = dswidth = vol_dsunit = vol_dswidth = 0;	while ((this_char = strsep(&options, ",")) != NULL) {		if (!*this_char)			continue;		if ((value = strchr(this_char, '=')) != NULL)			*value++ = 0;		if (!strcmp(this_char, MNTOPT_LOGBUFS)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			args->logbufs = simple_strtoul(value, &eov, 10);		} else if (!strcmp(this_char, MNTOPT_LOGBSIZE)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			args->logbufsize = suffix_strtoul(value, &eov, 10);		} else if (!strcmp(this_char, MNTOPT_LOGDEV)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			strncpy(args->logname, value, MAXNAMELEN);		} else if (!strcmp(this_char, MNTOPT_MTPT)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			strncpy(args->mtpt, value, MAXNAMELEN);		} else if (!strcmp(this_char, MNTOPT_RTDEV)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			strncpy(args->rtname, value, MAXNAMELEN);		} else if (!strcmp(this_char, MNTOPT_BIOSIZE)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			iosize = simple_strtoul(value, &eov, 10);			args->flags |= XFSMNT_IOSIZE;			args->iosizelog = (uint8_t) iosize;		} else if (!strcmp(this_char, MNTOPT_ALLOCSIZE)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			iosize = suffix_strtoul(value, &eov, 10);			args->flags |= XFSMNT_IOSIZE;			args->iosizelog = ffs(iosize) - 1;		} else if (!strcmp(this_char, MNTOPT_IHASHSIZE)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			args->flags |= XFSMNT_IHASHSIZE;			args->ihashsize = simple_strtoul(value, &eov, 10);		} else if (!strcmp(this_char, MNTOPT_GRPID) ||			   !strcmp(this_char, MNTOPT_BSDGROUPS)) {			vfsp->vfs_flag |= VFS_GRPID;		} else if (!strcmp(this_char, MNTOPT_NOGRPID) ||			   !strcmp(this_char, MNTOPT_SYSVGROUPS)) {			vfsp->vfs_flag &= ~VFS_GRPID;		} else if (!strcmp(this_char, MNTOPT_WSYNC)) {			args->flags |= XFSMNT_WSYNC;		} else if (!strcmp(this_char, MNTOPT_OSYNCISOSYNC)) {			args->flags |= XFSMNT_OSYNCISOSYNC;		} else if (!strcmp(this_char, MNTOPT_NORECOVERY)) {			args->flags |= XFSMNT_NORECOVERY;		} else if (!strcmp(this_char, MNTOPT_INO64)) {			args->flags |= XFSMNT_INO64;#if !XFS_BIG_INUMS			printk("XFS: %s option not allowed on this system\n",				this_char);			return EINVAL;#endif		} else if (!strcmp(this_char, MNTOPT_NOALIGN)) {			args->flags |= XFSMNT_NOALIGN;		} else if (!strcmp(this_char, MNTOPT_SWALLOC)) {			args->flags |= XFSMNT_SWALLOC;		} else if (!strcmp(this_char, MNTOPT_SUNIT)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			dsunit = simple_strtoul(value, &eov, 10);		} else if (!strcmp(this_char, MNTOPT_SWIDTH)) {			if (!value || !*value) {				printk("XFS: %s option requires an argument\n",					this_char);				return EINVAL;			}			dswidth = simple_strtoul(value, &eov, 10);		} else if (!strcmp(this_char, MNTOPT_64BITINODE)) {			args->flags &= ~XFSMNT_32BITINODES;#if !XFS_BIG_INUMS			printk("XFS: %s option not allowed on this system\n",				this_char);			return EINVAL;#endif		} else if (!strcmp(this_char, MNTOPT_NOUUID)) {			args->flags |= XFSMNT_NOUUID;		} else if (!strcmp(this_char, MNTOPT_BARRIER)) {			args->flags |= XFSMNT_BARRIER;		} else if (!strcmp(this_char, MNTOPT_IKEEP)) {			args->flags &= ~XFSMNT_IDELETE;		} else if (!strcmp(this_char, MNTOPT_NOIKEEP)) {			args->flags |= XFSMNT_IDELETE;		} else if (!strcmp(this_char, MNTOPT_LARGEIO)) {			args->flags2 &= ~XFSMNT2_COMPAT_IOSIZE;		} else if (!strcmp(this_char, MNTOPT_NOLARGEIO)) {			args->flags2 |= XFSMNT2_COMPAT_IOSIZE;		} else if (!strcmp(this_char, MNTOPT_ATTR2)) {			args->flags &= ~XFSMNT_COMPAT_ATTR;		} else if (!strcmp(this_char, MNTOPT_NOATTR2)) {			args->flags |= XFSMNT_COMPAT_ATTR;		} else if (!strcmp(this_char, "osyncisdsync")) {			/* no-op, this is now the default */printk("XFS: osyncisdsync is now the default, option is deprecated.\n");		} else if (!strcmp(this_char, "irixsgid")) {printk("XFS: irixsgid is now a sysctl(2) variable, option is deprecated.\n");		} else {			printk("XFS: unknown mount option [%s].\n", this_char);			return EINVAL;		}	}	if (args->flags & XFSMNT_NORECOVERY) {		if ((vfsp->vfs_flag & VFS_RDONLY) == 0) {			printk("XFS: no-recovery mounts must be read-only.\n");			return EINVAL;		}	}	if ((args->flags & XFSMNT_NOALIGN) && (dsunit || dswidth)) {		printk(	"XFS: sunit and swidth options incompatible with the noalign option\n");		return EINVAL;	}	if ((dsunit && !dswidth) || (!dsunit && dswidth)) {		printk("XFS: sunit and swidth must be specified together\n");		return EINVAL;	}	if (dsunit && (dswidth % dsunit != 0)) {		printk(	"XFS: stripe width (%d) must be a multiple of the stripe unit (%d)\n",			dswidth, dsunit);		return EINVAL;	}	if ((args->flags & XFSMNT_NOALIGN) != XFSMNT_NOALIGN) {		if (dsunit) {			args->sunit = dsunit;			args->flags |= XFSMNT_RETERR;		} else {			args->sunit = vol_dsunit;		}		dswidth ? (args->swidth = dswidth) :			  (args->swidth = vol_dswidth);	} else {		args->sunit = args->swidth = 0;	}	if (args->flags & XFSMNT_32BITINODES)		vfsp->vfs_flag |= VFS_32BITINODES;	if (args->flags2)		args->flags |= XFSMNT_FLAGS2;	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/05db218a27c955880dce6d080d5159247aad3629/xfs_vfsops.c/buggy/fs/xfs/xfs_vfsops.c