* [PATCH] XFS tuning on software RAID5 partitionable array; was: MDP major registration
[not found] ` <47EA8CF4.7080201@free.fr>
@ 2008-03-26 18:45 ` Hubert Verstraete
2008-05-16 10:35 ` [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8 Hubert Verstraete
0 siblings, 1 reply; 3+ messages in thread
From: Hubert Verstraete @ 2008-03-26 18:45 UTC (permalink / raw)
To: xfs; +Cc: linux-raid
[-- Attachment #1: Type: text/plain, Size: 2224 bytes --]
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
Hubert Verstraete wrote:
> Bill Davidsen wrote:
>> Luca Berra wrote:
>>> On Tue, Mar 25, 2008 at 05:57:06PM +0100, Hubert Verstraete wrote:
>>>> Neil Brown wrote:
>>>>> On Thursday March 13, hubskml@free.fr wrote:
>>>>>> Neil,
>>>>>>
>>>>>> What is the status of the major for the partitionable arrays ?
>>>>>
>>>>> automatically determined at runtime.
>>>>>
>>>>>> I see that it is 254, which is in the experimental section,
>>>>>> according to the official Linux device list
>>>>>> (http://www.lanana.org/docs/device-list/).
>>>>>> Will there be an official registration ?
>>>>>
>>>>> No. Is there any need?
>>>>
>>>> I got this question in mind when I saw that mkfs.xfs source code was
>>>> referring to the MD major to tune its parameters on an MD device,
>>>> while it ignores MDP devices.
>>>> If there were reasons to register MD, wouldn't they apply to MDP too ?
>>>
>>> i don't think so:
>>> bluca@percy ~ $ grep mdp /proc/devices
>>> 253 mdp
>>
>> Why is it important to have XFS tune its parameters for md and not for
>> mdp? I don't understand your conclusion here, is tuning not needed for
>> mdp, or so meaningless that it doesn't matter, or that XFS code reads
>> /proc/devices, or ??? I note that device-mapper also has a dynamic
>> major, what does XFS make of that?
>
> It reads from /proc/devices.
>
>> I don't know how much difference tuning makes, but if it's worth doing
>> at all, it should be done for mdp as well, I would think.
>
> Same thought. I wrote the patch for mkfs.xfs but did not publish it for
> two reasons:
> 1) MD is registered but not MDP. Now I understand, it's not a problem,
> we just need to read /proc/devices as device-mapper does.
> 2) Tuning XFS for MDP can be achieved through the mkfs.xfs options. With
> a few lines in shell, my XFS on MDP now has the same performance as XFS
> on MD.
>
> Hubert
> --
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: xfsprogs_mdp.patch --]
[-- Type: text/x-patch, Size: 2082 bytes --]
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8
2008-03-26 18:45 ` [PATCH] XFS tuning on software RAID5 partitionable array; was: MDP major registration Hubert Verstraete
@ 2008-05-16 10:35 ` Hubert Verstraete
2008-05-16 11:30 ` Andi Kleen
0 siblings, 1 reply; 3+ messages in thread
From: Hubert Verstraete @ 2008-05-16 10:35 UTC (permalink / raw)
To: xfs
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8
2008-05-16 10:35 ` [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8 Hubert Verstraete
@ 2008-05-16 11:30 ` Andi Kleen
0 siblings, 0 replies; 3+ messages in thread
From: Andi Kleen @ 2008-05-16 11:30 UTC (permalink / raw)
To: Hubert Verstraete; +Cc: xfs
Hubert Verstraete <hubskml@free.fr> writes:
>
> 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.
ISO-C free() is defined to do nothing on a NULL input.
-Andi
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-05-16 11:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <47D90614.9040206@free.fr>
[not found] ` <18408.36753.223347.129420@notabene.brown>
[not found] ` <47E92EE2.1080108@free.fr>
[not found] ` <20080326065232.GA21970@percy.comedia.it>
[not found] ` <47EA71BF.8050800@tmr.com>
[not found] ` <47EA8CF4.7080201@free.fr>
2008-03-26 18:45 ` [PATCH] XFS tuning on software RAID5 partitionable array; was: MDP major registration Hubert Verstraete
2008-05-16 10:35 ` [PATCH] XFS tuning on software RAID5 partitionable array; error in xfsprogs 2.9.8 Hubert Verstraete
2008-05-16 11:30 ` Andi Kleen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox