1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-08-01 21:47:06 +02:00

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.
This commit is contained in:
Jim Meyering
2010-10-11 11:19:02 +02:00
parent 0b9f65dc01
commit 50040d07e1
4 changed files with 34 additions and 33 deletions
+1 -1
View File
@@ -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'
+7 -9
View File
@@ -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
+13 -10
View File
@@ -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
+13 -13
View File
@@ -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 */