chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
importd: automatically grow /var/lib/machines/ loopback filesystem during downloads
[elogind.git]
/
src
/
import
/
import-job.c
diff --git
a/src/import/import-job.c
b/src/import/import-job.c
index 809486500ba55cf6d6b045e5b1fda78956560d3f..980b639b5db8d219d70ccda35af0e0d010b574a6 100644
(file)
--- a/
src/import/import-job.c
+++ b/
src/import/import-job.c
@@
-22,8
+22,12
@@
#include <sys/xattr.h>
#include "strv.h"
#include <sys/xattr.h>
#include "strv.h"
+#include "machine-pool.h"
#include "import-job.h"
#include "import-job.h"
+/* Grow the /var/lib/machines directory after each 10MiB written */
+#define IMPORT_GROW_INTERVAL_BYTES (UINT64_C(10) * UINT64_C(1024) * UINT64_C(1024))
+
ImportJob* import_job_unref(ImportJob *j) {
if (!j)
return NULL;
ImportJob* import_job_unref(ImportJob *j) {
if (!j)
return NULL;
@@
-197,6
+201,11
@@
static int import_job_write_uncompressed(ImportJob *j, void *p, size_t sz) {
if (j->disk_fd >= 0) {
if (j->disk_fd >= 0) {
+ if (j->grow_machine_directory && j->written_since_last_grow >= IMPORT_GROW_INTERVAL_BYTES) {
+ j->written_since_last_grow = 0;
+ grow_machine_directory();
+ }
+
if (j->allow_sparse)
n = sparse_write(j->disk_fd, p, sz, 64);
else
if (j->allow_sparse)
n = sparse_write(j->disk_fd, p, sz, 64);
else
@@
-219,6
+228,7
@@
static int import_job_write_uncompressed(ImportJob *j, void *p, size_t sz) {
}
j->written_uncompressed += sz;
}
j->written_uncompressed += sz;
+ j->written_since_last_grow += sz;
return 0;
}
return 0;
}
@@
-667,6
+677,9
@@
int import_job_begin(ImportJob *j) {
if (j->state != IMPORT_JOB_INIT)
return -EBUSY;
if (j->state != IMPORT_JOB_INIT)
return -EBUSY;
+ if (j->grow_machine_directory)
+ grow_machine_directory();
+
r = curl_glue_make(&j->curl, j->url, j);
if (r < 0)
return r;
r = curl_glue_make(&j->curl, j->url, j);
if (r < 0)
return r;