From 50040d07e1fca7cae7aee3827053efb71454e6f2 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Mon, 11 Oct 2010 11:19:02 +0200 Subject: extent-scan: adjust naming and formatting * src/extent-scan.h [struct extent_scan]: Rename member: s/hit_last_extent/hit_final_extent/. "final" is clearer, since "last" can be interpreted as "preceding". Rename extent-scan functions to start with extent_scan_. * src/Makefile.am (copy_sources): Also distribute extent-scan.h. * src/extent-scan.c: Don't include error.h or quote.h. Neither is used. * src/copy.c: shorten a comment to fit in 80 columns * src/extent-scan.c, src/extent-scan.h: Correct formatting. --- src/Makefile.am | 2 +- src/copy.c | 16 +++++++--------- src/extent-scan.c | 23 +++++++++++++---------- src/extent-scan.h | 26 +++++++++++++------------- 4 files changed, 34 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 9fd782214..bf1d60a88 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -450,7 +450,7 @@ uninstall-local: fi; \ fi -copy_sources = copy.c cp-hash.c extent-scan.c +copy_sources = copy.c cp-hash.c extent-scan.c extent-scan.h # Use `ginstall' in the definition of PROGRAMS and in dependencies to avoid # confusion with the `install' target. The install rule transforms `ginstall' diff --git a/src/copy.c b/src/copy.c index 902c6bbea..270009bbe 100644 --- a/src/copy.c +++ b/src/copy.c @@ -204,19 +204,18 @@ extent_copy (int src_fd, int dest_fd, size_t buf_size, uint64_t last_ext_len = 0; uint64_t last_read_size = 0; - open_extent_scan (src_fd, &scan); + extent_scan_init (src_fd, &scan); do { - bool ok = get_extents_info (&scan); + bool ok = extent_scan_read (&scan); if (! ok) { - if (scan.hit_last_extent) + if (scan.hit_final_extent) break; if (scan.initial_scan_failed) { - close_extent_scan (&scan); *require_normal_copy = true; return false; } @@ -288,7 +287,7 @@ extent_copy (int src_fd, int dest_fd, size_t buf_size, if (n_read == 0) { - /* Figure out how many bytes read from the previous extent. */ + /* Record number of bytes read from the previous extent. */ last_read_size = last_ext_len - ext_len; break; } @@ -304,11 +303,10 @@ extent_copy (int src_fd, int dest_fd, size_t buf_size, } /* Release the space allocated to scan->ext_info. */ - free_extents_info (&scan); - } while (! scan.hit_last_extent); + extent_scan_free (&scan); - /* Do nothing now. */ - close_extent_scan (&scan); + } + while (! scan.hit_final_extent); /* If a file ends up with holes, the sum of the last extent logical offset and the read-returned size or the last extent length will be shorter than diff --git a/src/extent-scan.c b/src/extent-scan.c index f371b8718..3bb0d536c 100644 --- a/src/extent-scan.c +++ b/src/extent-scan.c @@ -24,23 +24,21 @@ #include "system.h" #include "extent-scan.h" -#include "error.h" -#include "quote.h" #ifndef HAVE_FIEMAP # include "fiemap.h" #endif /* Allocate space for struct extent_scan, initialize the entries if - necessary and return it as the input argument of get_extents_info(). */ + necessary and return it as the input argument of extent_scan_read(). */ extern void -open_extent_scan (int src_fd, struct extent_scan *scan) +extent_scan_init (int src_fd, struct extent_scan *scan) { scan->fd = src_fd; scan->ei_count = 0; scan->scan_start = 0; scan->initial_scan_failed = false; - scan->hit_last_extent = false; + scan->hit_final_extent = false; } #ifdef __linux__ @@ -50,14 +48,13 @@ open_extent_scan (int src_fd, struct extent_scan *scan) /* Call ioctl(2) with FS_IOC_FIEMAP (available in linux 2.6.27) to obtain a map of file extents excluding holes. */ extern bool -get_extents_info (struct extent_scan *scan) +extent_scan_read (struct extent_scan *scan) { union { struct fiemap f; char c[4096]; } fiemap_buf; struct fiemap *fiemap = &fiemap_buf.f; struct fiemap_extent *fm_extents = &fiemap->fm_extents[0]; enum { count = (sizeof fiemap_buf - sizeof *fiemap) / sizeof *fm_extents }; verify (count != 0); - unsigned int i; /* This is required at least to initialize fiemap->fm_start, but also serves (in mid 2010) to appease valgrind, which @@ -81,13 +78,14 @@ get_extents_info (struct extent_scan *scan) /* If 0 extents are returned, then more get_extent_table() are not needed. */ if (fiemap->fm_mapped_extents == 0) { - scan->hit_last_extent = true; + scan->hit_final_extent = true; return false; } scan->ei_count = fiemap->fm_mapped_extents; scan->ext_info = xnmalloc (scan->ei_count, sizeof (struct extent_info)); + unsigned int i; for (i = 0; i < scan->ei_count; i++) { assert (fm_extents[i].fe_logical <= OFF_T_MAX); @@ -100,7 +98,7 @@ get_extents_info (struct extent_scan *scan) i--; if (scan->ext_info[i].ext_flags & FIEMAP_EXTENT_LAST) { - scan->hit_last_extent = true; + scan->hit_final_extent = true; return true; } @@ -109,5 +107,10 @@ get_extents_info (struct extent_scan *scan) return true; } #else -extern bool get_extents_info (ignored) { errno = ENOTSUP; return false; } +extern bool +extent_scan_read (struct extent_scan *scan ATTRIBUTE_UNUSED) +{ + errno = ENOTSUP; + return false; +} #endif diff --git a/src/extent-scan.h b/src/extent-scan.h index 07c2e5bc5..ac9e5006f 100644 --- a/src/extent-scan.h +++ b/src/extent-scan.h @@ -19,7 +19,7 @@ #ifndef EXTENT_SCAN_H # define EXTENT_SCAN_H -/* Structure used to reserve information of each extent. */ +/* Structure used to store information of each extent. */ struct extent_info { /* Logical offset of an extent. */ @@ -44,25 +44,25 @@ struct extent_scan /* How many extent info returned for a scan. */ uint32_t ei_count; - /* If true, fall back to a normal copy, either - set by the failure of ioctl(2) for FIEMAP or - lseek(2) with SEEK_DATA. */ + /* If true, fall back to a normal copy, either set by the + failure of ioctl(2) for FIEMAP or lseek(2) with SEEK_DATA. */ bool initial_scan_failed; - /* If ture, the total extent scan per file has been finished. */ - bool hit_last_extent; + /* If true, the total extent scan per file has been finished. */ + bool hit_final_extent; - /* Extent information. */ + /* Extent information: a malloc'd array of ei_count structs. */ struct extent_info *ext_info; }; -void -open_extent_scan (int src_fd, struct extent_scan *scan); +void extent_scan_init (int src_fd, struct extent_scan *scan); -bool -get_extents_info (struct extent_scan *scan); +bool extent_scan_read (struct extent_scan *scan); -#define free_extents_info(ext_scan) free ((ext_scan)->ext_info) -#define close_extent_scan(ext_scan) /* empty */ +static inline void +extent_scan_free (struct extent_scan *scan) +{ + free (scan->ext_info); +} #endif /* EXTENT_SCAN_H */ -- cgit v1.2.3-54-g00ecf