if (REISERFS_SB(s)->s_qf_names[qtype]) { kfree(REISERFS_SB(s)-> s_qf_names[qtype]); REISERFS_SB(s)->s_qf_names[qtype] = NULL; } 
kfree(REISERFS_SB(s)->s_qf_names[qtype]); REISERFS_SB(s)->s_qf_names[qtype] = NULL; 
static int reiserfs_parse_options(struct super_block *s, char *options,	/* string given via mount's -o */				  unsigned long *mount_options,				  /* after the parsing phase, contains the				     collection of bitflags defining what				     mount options were selected. */				  unsigned long *blocks,	/* strtol-ed from NNN of resize=NNN */				  char **jdev_name,				  unsigned int *commit_max_age){	int c;	char *arg = NULL;	char *pos;	opt_desc_t opts[] = {		/* Compatibility stuff, so that -o notail for old setups still work */		{"tails",.arg_required = 't',.values = tails},		{"notail",.clrmask =		 (1 << REISERFS_LARGETAIL) | (1 << REISERFS_SMALLTAIL)},		{"conv",.setmask = 1 << REISERFS_CONVERT},		{"attrs",.setmask = 1 << REISERFS_ATTRS},		{"noattrs",.clrmask = 1 << REISERFS_ATTRS},#ifdef CONFIG_REISERFS_FS_XATTR		{"user_xattr",.setmask = 1 << REISERFS_XATTRS_USER},		{"nouser_xattr",.clrmask = 1 << REISERFS_XATTRS_USER},#else		{"user_xattr",.setmask = 1 << REISERFS_UNSUPPORTED_OPT},		{"nouser_xattr",.clrmask = 1 << REISERFS_UNSUPPORTED_OPT},#endif#ifdef CONFIG_REISERFS_FS_POSIX_ACL		{"acl",.setmask = 1 << REISERFS_POSIXACL},		{"noacl",.clrmask = 1 << REISERFS_POSIXACL},#else		{"acl",.setmask = 1 << REISERFS_UNSUPPORTED_OPT},		{"noacl",.clrmask = 1 << REISERFS_UNSUPPORTED_OPT},#endif		{"nolog",},	/* This is unsupported */		{"replayonly",.setmask = 1 << REPLAYONLY},		{"block-allocator",.arg_required = 'a',.values = balloc},		{"data",.arg_required = 'd',.values = logging_mode},		{"barrier",.arg_required = 'b',.values = barrier_mode},		{"resize",.arg_required = 'r',.values = NULL},		{"jdev",.arg_required = 'j',.values = NULL},		{"nolargeio",.arg_required = 'w',.values = NULL},		{"commit",.arg_required = 'c',.values = NULL},		{"usrquota",.setmask = 1 << REISERFS_QUOTA},		{"grpquota",.setmask = 1 << REISERFS_QUOTA},		{"noquota",.clrmask = 1 << REISERFS_QUOTA},		{"errors",.arg_required = 'e',.values = error_actions},		{"usrjquota",.arg_required =		 'u' | (1 << REISERFS_OPT_ALLOWEMPTY),.values = NULL},		{"grpjquota",.arg_required =		 'g' | (1 << REISERFS_OPT_ALLOWEMPTY),.values = NULL},		{"jqfmt",.arg_required = 'f',.values = NULL},		{NULL,}	};	*blocks = 0;	if (!options || !*options)		/* use default configuration: create tails, journaling on, no		   conversion to newest format */		return 1;	for (pos = options; pos;) {		c = reiserfs_getopt(s, &pos, opts, &arg, mount_options);		if (c == -1)			/* wrong option is given */			return 0;		if (c == 'r') {			char *p;			p = NULL;			/* "resize=NNN" or "resize=auto" */			if (!strcmp(arg, "auto")) {				/* From JFS code, to auto-get the size. */				*blocks =				    s->s_bdev->bd_inode->i_size >> s->				    s_blocksize_bits;			} else {				*blocks = simple_strtoul(arg, &p, 0);				if (*p != '\0') {					/* NNN does not look like a number */					reiserfs_warning(s,							 "reiserfs_parse_options: bad value %s",							 arg);					return 0;				}			}		}		if (c == 'c') {			char *p = NULL;			unsigned long val = simple_strtoul(arg, &p, 0);			/* commit=NNN (time in seconds) */			if (*p != '\0' || val >= (unsigned int)-1) {				reiserfs_warning(s,						 "reiserfs_parse_options: bad value %s",						 arg);				return 0;			}			*commit_max_age = (unsigned int)val;		}		if (c == 'w') {			char *p = NULL;			int val = simple_strtoul(arg, &p, 0);			if (*p != '\0') {				reiserfs_warning(s,						 "reiserfs_parse_options: non-numeric value %s for nolargeio option",						 arg);				return 0;			}			if (val)				reiserfs_default_io_size = PAGE_SIZE;			else				reiserfs_default_io_size = 128 * 1024;		}		if (c == 'j') {			if (arg && *arg && jdev_name) {				if (*jdev_name) {	//Hm, already assigned?					reiserfs_warning(s,							 "reiserfs_parse_options: journal device was already  specified to be %s",							 *jdev_name);					return 0;				}				*jdev_name = arg;			}		}#ifdef CONFIG_QUOTA		if (c == 'u' || c == 'g') {			int qtype = c == 'u' ? USRQUOTA : GRPQUOTA;			if (sb_any_quota_enabled(s)) {				reiserfs_warning(s,						 "reiserfs_parse_options: cannot change journalled quota options when quota turned on.");				return 0;			}			if (*arg) {	/* Some filename specified? */				if (REISERFS_SB(s)->s_qf_names[qtype]				    && strcmp(REISERFS_SB(s)->s_qf_names[qtype],					      arg)) {					reiserfs_warning(s,							 "reiserfs_parse_options: %s quota file already specified.",							 QTYPE2NAME(qtype));					return 0;				}				if (strchr(arg, '/')) {					reiserfs_warning(s,							 "reiserfs_parse_options: quotafile must be on filesystem root.");					return 0;				}				REISERFS_SB(s)->s_qf_names[qtype] =				    kmalloc(strlen(arg) + 1, GFP_KERNEL);				if (!REISERFS_SB(s)->s_qf_names[qtype]) {					reiserfs_warning(s,							 "reiserfs_parse_options: not enough memory for storing quotafile name.");					return 0;				}				strcpy(REISERFS_SB(s)->s_qf_names[qtype], arg);				*mount_options |= 1 << REISERFS_QUOTA;			} else {				if (REISERFS_SB(s)->s_qf_names[qtype]) {					kfree(REISERFS_SB(s)->					      s_qf_names[qtype]);					REISERFS_SB(s)->s_qf_names[qtype] =					    NULL;				}			}		}		if (c == 'f') {			if (!strcmp(arg, "vfsold"))				REISERFS_SB(s)->s_jquota_fmt = QFMT_VFS_OLD;			else if (!strcmp(arg, "vfsv0"))				REISERFS_SB(s)->s_jquota_fmt = QFMT_VFS_V0;			else {				reiserfs_warning(s,						 "reiserfs_parse_options: unknown quota format specified.");				return 0;			}		}#else		if (c == 'u' || c == 'g' || c == 'f') {			reiserfs_warning(s,					 "reiserfs_parse_options: journalled quota options not supported.");			return 0;		}#endif	}#ifdef CONFIG_QUOTA	if (!REISERFS_SB(s)->s_jquota_fmt	    && (REISERFS_SB(s)->s_qf_names[USRQUOTA]		|| REISERFS_SB(s)->s_qf_names[GRPQUOTA])) {		reiserfs_warning(s,				 "reiserfs_parse_options: journalled quota format not specified.");		return 0;	}	/* This checking is not precise wrt the quota type but for our purposes it is sufficient */	if (!(*mount_options & (1 << REISERFS_QUOTA))	    && sb_any_quota_enabled(s)) {		reiserfs_warning(s,				 "reiserfs_parse_options: quota options must be present when quota is turned on.");		return 0;	}#endif	return 1;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/833d304b22edff5cc687ab7e5549c2f0dcdd951a/super.c/buggy/fs/reiserfs/super.c