You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by wa...@apache.org on 2012/05/01 18:28:32 UTC

git commit: TS-1163 : Made use of a 64bit capable ioctl in linux to avoid truncating the number of physical sectors for 2TB+ disks in linux. Previously, disks would fail to recognize their full size, though they would work

Updated Branches:
  refs/heads/master 521fe2891 -> 129da882d


TS-1163 : Made use of a 64bit capable ioctl in linux to avoid truncating the number of physical sectors for 2TB+ disks in linux.  Previously, disks would fail to recognize their full size, though they would work


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/129da882
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/129da882
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/129da882

Branch: refs/heads/master
Commit: 129da882d45490367525fbbbfb6fb8f726172f80
Parents: 521fe28
Author: Bart Wyatt <wa...@apache.org>
Authored: Tue May 1 11:26:44 2012 -0500
Committer: Bart Wyatt <wa...@apache.org>
Committed: Tue May 1 11:26:44 2012 -0500

----------------------------------------------------------------------
 CHANGES               |    2 ++
 iocore/cache/Store.cc |   16 ++++++++++++----
 2 files changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/129da882/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index ce98586..e0ebcc8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,7 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache Traffic Server 3.1.4
+  *) [TS-1163] Support for raw disks larger than 2TB on Linux
+
   *) [TS-1230] added a paramter to the configure script to allow overriding
    the calculated ARG_MAX value
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/129da882/iocore/cache/Store.cc
----------------------------------------------------------------------
diff --git a/iocore/cache/Store.cc b/iocore/cache/Store.cc
index f630de3..7e5ea36 100644
--- a/iocore/cache/Store.cc
+++ b/iocore/cache/Store.cc
@@ -653,7 +653,7 @@ Span::init(char *filename, int64_t size)
 {
   int devnum = 0, fd, arg = 0;
   int ret = 0, is_disk = 0;
-  unsigned int heads, sectors, cylinders, adjusted_sec;
+  u_int64_t heads, sectors, cylinders, adjusted_sec;
 
   /* Fetch file type */
   struct stat stat_buf;
@@ -713,14 +713,22 @@ Span::init(char *filename, int64_t size)
 #endif
 
   if (is_disk) {
-    uint32_t physsectors = 0;
+    u_int32_t ioctl_sectors = 0;
+    u_int64_t ioctl_bytes = 0;
+    u_int64_t physsectors = 0;
 
     /* Disks cannot be mmapped */
     is_mmapable_internal = false;
 
-    if (!ioctl(fd, BLKGETSIZE, &physsectors)) {
+    if (!ioctl(fd, BLKGETSIZE64, &ioctl_bytes)) {
       heads = 1;
       cylinders = 1;
+      physsectors = ioctl_bytes / hw_sector_size;
+      sectors = physsectors;
+    } else if (!ioctl(fd, BLKGETSIZE, &ioctl_sectors)) {
+      heads = 1;
+      cylinders = 1;
+      physsectors = ioctl_sectors;
       sectors = physsectors / adjusted_sec;
     } else {
       struct hd_geometry geometry;
@@ -753,7 +761,7 @@ Span::init(char *filename, int64_t size)
     blocks = size / STORE_BLOCK_SIZE;
     
     Debug("cache_init", "Span::init physical sectors %u total size %" PRId64 " geometry size %" PRId64 " store blocks %" PRId64 "", 
-          physsectors, hw_sector_size * (int64_t)physsectors, size, blocks);
+          physsectors, hw_sector_size * physsectors, size, blocks);
 
     pathname = ats_strdup(filename);
     file_pathname = 1;