[bmap-tools] [PATCH 02/14] Filemap: remove useless constants and a parameter

Artem Bityutskiy dedekind1 at gmail.com
Tue Jan 21 12:34:23 EST 2014


From: Artem Bityutskiy <artem.bityutskiy at intel.com>

This patch simplifies the Fiemap class API and removes the 'buf_size'
constructor parameter because it is useless. The default 256K value is good
enough. Remove a couple of related constants along with this for the same
reason.

Change-Id: I6d9bbca7f54ae409ad6e83b21b35a5e84504f847
Signed-off-by: Artem Bityutskiy <artem.bityutskiy at intel.com>
---
 bmaptools/Filemap.py  | 28 ++++++++++------------------
 tests/test_filemap.py | 11 +++--------
 2 files changed, 13 insertions(+), 26 deletions(-)

diff --git a/bmaptools/Filemap.py b/bmaptools/Filemap.py
index b5f7c2c..4dcb0cb 100644
--- a/bmaptools/Filemap.py
+++ b/bmaptools/Filemap.py
@@ -42,11 +42,10 @@ _FIEMAP_IOCTL = 0xC020660B
 # This FIEMAP ioctl flag which instructs the kernel to sync the file before
 # reading the block map
 _FIEMAP_FLAG_SYNC = 0x00000001
-
-# Minimum buffer which is required for 'class Fiemap' to operate
-MIN_BUFFER_SIZE = _FIEMAP_SIZE + _FIEMAP_EXTENT_SIZE
-# The default buffer size for 'class Fiemap'
-DEFAULT_BUFFER_SIZE = 256 * 1024
+# Size of the buffer for 'struct fiemap_extent' elements which will be used
+# when invoking the FIEMAP ioctl. The larger is the buffer, the less times the
+# FIEMAP ioctl will be invoked.
+_FIEMAP_BUFFER_SIZE = 256 * 1024
 
 class Error(Exception):
     """
@@ -62,16 +61,11 @@ class Fiemap:
     over all mapped blocks and over all holes.
     """
 
-    def __init__(self, image, buf_size=DEFAULT_BUFFER_SIZE):
+    def __init__(self, image):
         """
         Initialize a class instance. The 'image' argument is full path to the
         file to operate on, or a file object to operate on.
 
-        The 'buf_size' argument is the size of the buffer for 'struct
-        fiemap_extent' elements which will be used when invoking the FIEMAP
-        ioctl. The larger is the buffer, the less times the FIEMAP ioctl will
-        be invoked.
-
         This class synchronizes the image file every time it invokes the FIEMAP
         ioctl in order to work-around early FIEMAP implementation kernel bugs.
         """
@@ -85,14 +79,12 @@ class Fiemap:
             self._image_path = image
             self._open_image_file()
 
-        # Validate 'buf_size'
-        if buf_size < MIN_BUFFER_SIZE:
-            raise Error("too small buffer (%d bytes), minimum is %d bytes"
-                    % (buf_size, MIN_BUFFER_SIZE))
+        self._buf_size = _FIEMAP_BUFFER_SIZE
 
-        # How many 'struct fiemap_extent' elements fit the buffer
-        buf_size -= _FIEMAP_SIZE
-        self._fiemap_extent_cnt = buf_size / _FIEMAP_EXTENT_SIZE
+        # Calculate how many 'struct fiemap_extent' elements fit the buffer
+        self._buf_size -= _FIEMAP_SIZE
+        self._fiemap_extent_cnt = self._buf_size / _FIEMAP_EXTENT_SIZE
+        assert self._fiemap_extent_cnt > 0
         self._buf_size = self._fiemap_extent_cnt * _FIEMAP_EXTENT_SIZE
         self._buf_size += _FIEMAP_SIZE
 
diff --git a/tests/test_filemap.py b/tests/test_filemap.py
index 6de2cee..6919e53 100644
--- a/tests/test_filemap.py
+++ b/tests/test_filemap.py
@@ -88,17 +88,16 @@ def _check_ranges(f_image, filemap, first_block, blocks_cnt,
                            ranges_type, first_block, blocks_cnt,
                            check[0], check[1]))
 
-def _do_test(f_image, mapped, unmapped, buf_size=Filemap.DEFAULT_BUFFER_SIZE):
+def _do_test(f_image, mapped, unmapped):
     """
     Verify that Filemap reports the correct mapped and unmapped areas for the
     'f_image' file object. The 'mapped' and 'unmapped' lists contain the
-    correct ranges. The 'buf_size' argument specifies the internal buffer size
-    of the 'Filemap' class.
+    correct ranges.
     """
 
     # Make sure that 'Filemap' module's 'get_mapped_ranges()' returns the same
     # ranges as we have in the 'mapped' list.
-    filemap = Filemap.Fiemap(f_image, buf_size)
+    filemap = Filemap.Fiemap(f_image)
 
     # Check both 'get_mapped_ranges()' and 'get_unmapped_ranges()' for the
     # entire file.
@@ -142,7 +141,3 @@ class TestCreateCopy(unittest.TestCase):
                                                      delete)
         for f_image, _, mapped, unmapped in iterator:
             _do_test(f_image, mapped, unmapped)
-            _do_test(f_image, mapped, unmapped, Filemap.MIN_BUFFER_SIZE)
-            _do_test(f_image, mapped, unmapped, Filemap.MIN_BUFFER_SIZE * 2)
-            _do_test(f_image, mapped, unmapped, Filemap.DEFAULT_BUFFER_SIZE / 2)
-            _do_test(f_image, mapped, unmapped, Filemap.DEFAULT_BUFFER_SIZE * 2)
-- 
1.8.3.1




More information about the Bmap-tools mailing list