a5bd9f6
From 1ed52ffd389d28a8c1711fedcd9a841258c30e28 Mon Sep 17 00:00:00 2001
a5bd9f6
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
a5bd9f6
Date: Thu, 10 Jan 2013 08:09:26 +0100
a5bd9f6
Subject: [PATCH 091/364] 	* grub-core/kern/disk.c (grub_disk_write): Fix
a5bd9f6
 sector number on 4K 	sector devices.
a5bd9f6
a5bd9f6
---
a5bd9f6
 ChangeLog             |  5 +++++
a5bd9f6
 grub-core/kern/disk.c | 11 ++++++++---
a5bd9f6
 2 files changed, 13 insertions(+), 3 deletions(-)
a5bd9f6
a5bd9f6
diff --git a/ChangeLog b/ChangeLog
a5bd9f6
index 75fb85a..48d297d 100644
a5bd9f6
--- a/ChangeLog
a5bd9f6
+++ b/ChangeLog
a5bd9f6
@@ -1,3 +1,8 @@
a5bd9f6
+2013-01-10  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
+
a5bd9f6
+	* grub-core/kern/disk.c (grub_disk_write): Fix sector number on 4K
a5bd9f6
+	sector devices.
a5bd9f6
+
a5bd9f6
 2013-01-07  Colin Watson  <cjwatson@ubuntu.com>
a5bd9f6
 
a5bd9f6
 	* grub-core/io/bufio.c (grub_bufio_open): Use grub_zalloc instead of
a5bd9f6
diff --git a/grub-core/kern/disk.c b/grub-core/kern/disk.c
a5bd9f6
index 1f55f90..94318af 100644
a5bd9f6
--- a/grub-core/kern/disk.c
a5bd9f6
+++ b/grub-core/kern/disk.c
a5bd9f6
@@ -658,7 +658,8 @@ grub_disk_write (grub_disk_t disk, grub_disk_addr_t sector,
a5bd9f6
 
a5bd9f6
 	  grub_disk_cache_invalidate (disk->dev->id, disk->id, sector);
a5bd9f6
 
a5bd9f6
-	  if ((disk->dev->write) (disk, sector, 1, tmp_buf) != GRUB_ERR_NONE)
a5bd9f6
+	  if ((disk->dev->write) (disk, transform_sector (disk, sector),
a5bd9f6
+				  1, tmp_buf) != GRUB_ERR_NONE)
a5bd9f6
 	    goto finish;
a5bd9f6
 
a5bd9f6
 	  sector += (1 << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS));
a5bd9f6
@@ -674,11 +675,15 @@ grub_disk_write (grub_disk_t disk, grub_disk_addr_t sector,
a5bd9f6
 	  len = size & ~((1 << disk->log_sector_size) - 1);
a5bd9f6
 	  n = size >> disk->log_sector_size;
a5bd9f6
 
a5bd9f6
-	  if ((disk->dev->write) (disk, sector, n, buf) != GRUB_ERR_NONE)
a5bd9f6
+	  if ((disk->dev->write) (disk, transform_sector (disk, sector),
a5bd9f6
+				  n, buf) != GRUB_ERR_NONE)
a5bd9f6
 	    goto finish;
a5bd9f6
 
a5bd9f6
 	  while (n--)
a5bd9f6
-	    grub_disk_cache_invalidate (disk->dev->id, disk->id, sector++);
a5bd9f6
+	    {
a5bd9f6
+	      grub_disk_cache_invalidate (disk->dev->id, disk->id, sector);
a5bd9f6
+	      sector += (1 << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS));
a5bd9f6
+	    }
a5bd9f6
 
a5bd9f6
 	  buf = (const char *) buf + len;
a5bd9f6
 	  size -= len;
a5bd9f6
-- 
a5bd9f6
1.8.1.4
a5bd9f6