All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hubert Verstraete <hubskml@free.fr>
To: xfs@oss.sgi.com
Subject: Re: [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8
Date: Fri, 16 May 2008 12:35:52 +0200	[thread overview]
Message-ID: <482D6388.7040602@free.fr> (raw)
In-Reply-To: <47EA99AD.9060400@free.fr>

Hello

First, thank you for including the patch in xfsprogs-2.9.8.
I have just reviewed the new source code; unfortunately, I found out a 
change from the original patch that could generate a segmentation fault.

The line 89 in libdisk/md.c is: "free(dfile2);" but it should have 
remained "if (dfile2) free(dfile2);" because dfile2 is null in case 
mkfs.xfs is run on an MD device.

Regards,
Hubert Verstraete

Hubert Verstraete wrote:
> Hi XFS list,
>
> please find attached a patch for libdisk/mkfs.xfs which tunes XFS on 
> software partitionable RAID arrays, also called mdp.
>
> Hubert Verstraete
>
> ------------------------------------------------------------------------
> 
> diff -u -r xfsprogs-2.8.11/libdisk/md.c xfsprogs-2.8.11-mdp/libdisk/md.c
> --- xfsprogs-2.8.11/libdisk/md.c	2006-06-26 07:01:15.000000000 +0200
> +++ xfsprogs-2.8.11-mdp/libdisk/md.c	2008-03-26 20:12:38.000000000 +0100
> @@ -24,8 +24,12 @@
>  	dev_t		dev)
>  {
>  	if (major(dev) == MD_MAJOR)
> -		return 1;
> -	return get_driver_block_major("md", major(dev));
> +		return MD_IS_MD;
> +	if (get_driver_block_major("md", major(dev)))
> +		return MD_IS_MD;
> +	if (get_driver_block_major("mdp", major(dev)))
> +		return MD_IS_MDP;
> +	return 0;
>  }
>  
>  int
> @@ -37,12 +41,32 @@
>  	int		*sectalign,
>  	struct stat64	*sb)
>  {
> -	if (mnt_is_md_subvol(sb->st_rdev)) {
> +	char *pc, *dfile2 = NULL;
> +	int is_md;
> +
> +	if ((is_md = mnt_is_md_subvol(sb->st_rdev))) {
>  		struct md_array_info	md;
>  		int			fd;
>  
> +		if (is_md == MD_IS_MDP) {
> +			if (!(pc = strrchr(dfile, 'd'))
> +			|| !(pc = strchr(pc, 'p'))) {
> +				fprintf(stderr,
> +					_("Error getting MD array device from %s\n"),
> +					dfile);
> +				exit(1);
> +			}
> +			dfile2 = (char *) malloc(pc - dfile + 1);
> +			if (dfile2 == NULL) {
> +				fprintf(stderr,
> +					_("Couldn't malloc device string\n"));
> +				exit(1);
> +			}
> +			strncpy(dfile2, dfile, pc - dfile);
> +			dfile2[pc - dfile + 1] = '\0';
> +		}
>  		/* Open device */
> -		fd = open(dfile, O_RDONLY);
> +		fd = open(dfile2 ? dfile2 : dfile, O_RDONLY);
>  		if (fd == -1)
>  			return 0;
>  
> @@ -50,10 +74,11 @@
>  		if (ioctl(fd, GET_ARRAY_INFO, &md)) {
>  			fprintf(stderr,
>  				_("Error getting MD array info from %s\n"),
> -				dfile);
> +				dfile2 ? dfile2 : dfile);
>  			exit(1);
>  		}
>  		close(fd);
> +		if (dfile2) free(dfile2);
>  
>  		/*
>  		 * Ignore levels we don't want aligned (e.g. linear)
> diff -u -r xfsprogs-2.8.11/libdisk/md.h xfsprogs-2.8.11-mdp/libdisk/md.h
> --- xfsprogs-2.8.11/libdisk/md.h	2006-06-26 07:01:15.000000000 +0200
> +++ xfsprogs-2.8.11-mdp/libdisk/md.h	2008-03-26 20:12:10.000000000 +0100
> @@ -20,6 +20,9 @@
>  #define MD_MAJOR		9 /* we also check at runtime */
>  #endif
>  
> +#define MD_IS_MD		1
> +#define MD_IS_MDP		2
> +
>  #define GET_ARRAY_INFO          _IOR (MD_MAJOR, 0x11, struct md_array_info)
>
>  #define MD_SB_CLEAN		0

  reply	other threads:[~2008-05-16 10:34 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-13 10:46 MDP major registration Hubert Verstraete
2008-03-25  5:37 ` Neil Brown
2008-03-25 16:57   ` Hubert Verstraete
2008-03-26  6:52     ` Luca Berra
2008-03-26 15:54       ` Bill Davidsen
2008-03-26 17:50         ` Hubert Verstraete
2008-03-26 18:45           ` [PATCH] XFS tuning on software RAID5 partitionable array; was: " Hubert Verstraete
2008-05-16 10:35             ` Hubert Verstraete [this message]
2008-05-16 11:30               ` [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8 Andi Kleen
2008-03-26 19:18           ` MDP major registration Bill Davidsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=482D6388.7040602@free.fr \
    --to=hubskml@free.fr \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.