[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [patch] fixes for kernel of FreeBSD
From: |
Robert Millan |
Subject: |
Re: [patch] fixes for kernel of FreeBSD |
Date: |
Fri, 21 Apr 2006 14:33:22 +0200 |
User-agent: |
Mutt/1.5.11+cvs20060403 |
Followup to my previous sysctl commit. When modifying kern.geom.debugflags is
not necessary, this avoids the third sysctlbyname() call (and allocating "flags"
into the stack ;)).
2006-04-21 Robert Millan <address@hidden>
* grub/asmstub.c (get_diskinfo): Optimize sysctl routine.
Index: grub/asmstub.c
===================================================================
RCS file: /sources/grub/grub/grub/asmstub.c,v
retrieving revision 1.85
diff -u -r1.85 asmstub.c
--- grub/asmstub.c 20 Apr 2006 13:46:45 -0000 1.85
+++ grub/asmstub.c 21 Apr 2006 12:28:17 -0000
@@ -785,7 +785,7 @@
/* By default, kernel of FreeBSD does not allow overwriting MBR */
#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
#define GEOM_SYSCTL "kern.geom.debugflags"
- int old_flags, flags;
+ int old_flags;
size_t sizeof_int = sizeof (int);
if (sysctlbyname (GEOM_SYSCTL, &old_flags, &sizeof_int, NULL, 0) != 0)
@@ -794,7 +794,7 @@
if ((old_flags & 0x10) == 0)
{
/* "allow foot shooting", see geom(4) */
- flags = old_flags | 0x10;
+ int flags = old_flags | 0x10;
if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &flags, sizeof (int))
!= 0)
grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n",
strerror (errno));
@@ -802,7 +802,7 @@
#endif
disks[drive].flags = open (devname, O_RDWR);
#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
- if (flags != old_flags)
+ if ((old_flags & 0x10) == 0)
{
if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &old_flags, sizeof
(int)) != 0)
grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n",
strerror (errno));
--
Robert Millan