]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/grub-0.95-odirect.patch
Merge branch 'kernel-update' of ssh://git.ipfire.org/pub/git/ipfire-2.x into kernel...
[ipfire-2.x.git] / src / patches / grub-0.95-odirect.patch
diff --git a/src/patches/grub-0.95-odirect.patch b/src/patches/grub-0.95-odirect.patch
deleted file mode 100644 (file)
index 12dd9d9..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
---- grub-0.95/grub/asmstub.c.odirect   2004-11-30 16:58:06.577019488 -0500
-+++ grub-0.95/grub/asmstub.c   2004-11-30 16:59:56.057375944 -0500
-@@ -53,6 +53,9 @@
- # ifndef BLKFLSBUF
- #  define BLKFLSBUF   _IO (0x12,97)   /* flush buffer cache */
- # endif /* ! BLKFLSBUF */
-+# ifndef O_DIRECT
-+#   define O_DIRECT 040000
-+# endif /* ! O_DIRECT */
- #endif /* __linux__ */
- /* We want to prevent any circularararity in our stubs, as well as
-@@ -764,7 +767,7 @@
-     {
-       /* The unpartitioned device name: /dev/XdX */
-       char *devname = device_map[drive];
--      char buf[512];
-+      char * buf, * buf_unaligned;
-       if (! devname)
-       return -1;
-@@ -775,13 +778,13 @@
-       /* Open read/write, or read-only if that failed. */
-       if (! read_only)
--      disks[drive].flags = open (devname, O_RDWR);
-+      disks[drive].flags = open (devname, O_RDWR | O_DIRECT);
-       if (disks[drive].flags == -1)
-       {
-         if (read_only || errno == EACCES || errno == EROFS || errno == EPERM)
-           {
--            disks[drive].flags = open (devname, O_RDONLY);
-+            disks[drive].flags = open (devname, O_RDONLY | O_DIRECT);
-             if (disks[drive].flags == -1)
-               {
-                 assign_device_name (drive, 0);
-@@ -795,6 +798,10 @@
-           }
-       }
-+      buf_unaligned = malloc((512 * sizeof(char)) + 4095);
-+      buf = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
-+                      (~(4096-1)));
-+
-       /* Attempt to read the first sector.  */
-       if (read (disks[drive].flags, buf, 512) != 512)
-       {
-@@ -806,6 +813,7 @@
-       if (disks[drive].flags != -1)
-       get_drive_geometry (&disks[drive], device_map, drive);
-+      free(buf_unaligned);
-     }
-   if (disks[drive].flags == -1)
-@@ -827,24 +835,34 @@
- nread (int fd, char *buf, size_t len)
- {
-   int size = len;
-+  char * buf_unaligned, * buff, * obuff;
-+  int ret;
-+
-+  buf_unaligned = malloc((len * sizeof(char)) + 4095);
-+  obuff = buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
-+                           (~(4096-1)));
-+
-   while (len)
-     {
--      int ret = read (fd, buf, len);
-+      ret = read (fd, buff, len);
-       if (ret <= 0)
-       {
-         if (errno == EINTR)
-           continue;
-         else
--          return ret;
-+            break;
-       }
-       len -= ret;
--      buf += ret;
-+      buff += ret;
-     }
--  return size;
-+  if (!len) ret = size;
-+
-+  buf = memcpy(buf, obuff, size);
-+  return ret;
- }
- /* Write LEN bytes from BUF to FD. Return less than or equal to zero if an
-@@ -853,10 +871,18 @@
- nwrite (int fd, char *buf, size_t len)
- {
-   int size = len;
-+  char * buf_unaligned, * buff;
-+
-+  buf_unaligned = malloc((len * sizeof(char)) + 4095);
-+  buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
-+                   (~(4096-1)));
-   while (len)
-     {
--      int ret = write (fd, buf, len);
-+      int ret;
-+
-+      memcpy(buff, buf, len);
-+      ret = write (fd, buff, len);
-       if (ret <= 0)
-       {