ssize_t llapi_mirror_read(int fd, unsigned int id, void *buf, size_t count,
off_t pos)
{
- size_t page_size = sysconf(_SC_PAGESIZE);
ssize_t result = 0;
+ ssize_t page_size;
int rc;
+ page_size = sysconf(_SC_PAGESIZE);
+ if (page_size < 0) {
+ rc = -errno;
+ return rc;
+ }
+
rc = llapi_mirror_set(fd, id);
if (rc < 0)
return rc;
ssize_t llapi_mirror_write(int fd, unsigned int id, const void *buf,
size_t count, off_t pos)
{
- size_t page_size = sysconf(_SC_PAGESIZE);
ssize_t result = 0;
+ ssize_t page_size;
int rc;
+ page_size = sysconf(_SC_PAGESIZE);
+ if (page_size < 0)
+ return -EINVAL;
+
if (((unsigned long)buf & (page_size - 1)) || pos & (page_size - 1))
return -EINVAL;
return rc;
}
+int llapi_mirror_punch(int fd, unsigned int id, off_t start, size_t length)
+{
+ int rc;
+
+ rc = llapi_mirror_set(fd, id);
+ if (rc < 0)
+ return rc;
+
+ rc = llapi_hole_punch(fd, start, length);
+ (void) llapi_mirror_clear(fd);
+
+ return rc;
+}
+
bool llapi_mirror_is_sparse(int fd, unsigned int id)
{
bool sparse;
void *buf;
off_t pos = 0;
off_t data_end = 0;
- size_t page_size = sysconf(_SC_PAGESIZE);
+ ssize_t page_size;
ssize_t result = 0;
bool eof = false;
bool sparse;
if (!count)
return 0;
+ page_size = sysconf(_SC_PAGESIZE);
+ if (page_size < 0) {
+ rc = -errno;
+ return rc;
+ }
+
rc = posix_memalign(&buf, page_size, buflen);
if (rc) /* error code is returned directly */
return -rc;
continue;
}
}
- if (!nr)
+ if (!nr) {
+ free(buf);
return result;
+ }
}
while (!eof) {
size_t count)
{
const size_t buflen = 4 * 1024 * 1024; /* 4M */
- void *buf;
- size_t page_size = sysconf(_SC_PAGESIZE);
ssize_t result = 0;
+ ssize_t page_size;
+ void *buf;
int rc;
if (!count)
return 0;
+ page_size = sysconf(_SC_PAGESIZE);
+ if (page_size < 0)
+ return -EINVAL;
+
if (pos & (page_size - 1) || !dst)
return -EINVAL;