]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/kern/disk.c (grub_disk_write): Fix sector number on 4K
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 10 Jan 2013 07:09:26 +0000 (08:09 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 10 Jan 2013 07:09:26 +0000 (08:09 +0100)
sector devices.

ChangeLog
grub-core/kern/disk.c

index 75fb85a3c38a3e78a88cba31bd2010134dce118c..48d297d8b87e9676b994cf58136dcc5e39c14458 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-01-10  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/kern/disk.c (grub_disk_write): Fix sector number on 4K
+       sector devices.
+
 2013-01-07  Colin Watson  <cjwatson@ubuntu.com>
 
        * grub-core/io/bufio.c (grub_bufio_open): Use grub_zalloc instead of
index 1f55f90a89cf9cfaf3e785258fc698942df2459d..94318af320ace52bac255fb61cc255eb6285a914 100644 (file)
@@ -658,7 +658,8 @@ grub_disk_write (grub_disk_t disk, grub_disk_addr_t sector,
 
          grub_disk_cache_invalidate (disk->dev->id, disk->id, sector);
 
-         if ((disk->dev->write) (disk, sector, 1, tmp_buf) != GRUB_ERR_NONE)
+         if ((disk->dev->write) (disk, transform_sector (disk, sector),
+                                 1, tmp_buf) != GRUB_ERR_NONE)
            goto finish;
 
          sector += (1 << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS));
@@ -674,11 +675,15 @@ grub_disk_write (grub_disk_t disk, grub_disk_addr_t sector,
          len = size & ~((1 << disk->log_sector_size) - 1);
          n = size >> disk->log_sector_size;
 
-         if ((disk->dev->write) (disk, sector, n, buf) != GRUB_ERR_NONE)
+         if ((disk->dev->write) (disk, transform_sector (disk, sector),
+                                 n, buf) != GRUB_ERR_NONE)
            goto finish;
 
          while (n--)
-           grub_disk_cache_invalidate (disk->dev->id, disk->id, sector++);
+           {
+             grub_disk_cache_invalidate (disk->dev->id, disk->id, sector);
+             sector += (1 << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS));
+           }
 
          buf = (const char *) buf + len;
          size -= len;