diff --git a/debian/changelog b/debian/changelog index 4af9c4c..a537141 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ltsm (0.9.2) unstable; urgency=low + + * Increased buffersize to 16 MiB + + -- Samuel Hasert Mon, 15 Sep 2025 11:33:05 +0200 + ltsm (0.9.1) unstable; urgency=low * Finalize remove of FSQ project. diff --git a/rpm/ltsm.spec b/rpm/ltsm.spec index b7e2662..7b9e9a9 100644 --- a/rpm/ltsm.spec +++ b/rpm/ltsm.spec @@ -64,6 +64,9 @@ rm -rf %{buildroot} %changelog +* Mon Sep 15 2025 Samuel Hasert 0.9.2 +- Increased buffersize to 16 MiB + * Thu Jul 28 2022 Thomas Stibor 0.9.0-1 - Remove FSQ to keep LTSM as a Lustre TSM copytool project. diff --git a/src/lib/common.c b/src/lib/common.c index bd660f8..df75fc3 100644 --- a/src/lib/common.c +++ b/src/lib/common.c @@ -152,12 +152,19 @@ int crc32file(const char *filename, uint32_t *crc32result) FILE *file; size_t cur_read; uint32_t crc32sum = 0; - unsigned char buf[TSM_BUF_LENGTH] = {0}; + unsigned char* buf = malloc(TSM_BUF_LENGTH); // reserve memory on heap because stack too small + if (!buf) { + rc = errno; + CT_ERROR(rc, "malloc"); + + return rc; + } file = fopen(filename, "r"); if (file == NULL) { rc = -errno; CT_ERROR(rc, "fopen failed on '%s'", filename); + if (buf) free(buf); return rc; } @@ -180,11 +187,16 @@ int crc32file(const char *filename, uint32_t *crc32result) if (rc_minor) { rc_minor = -errno; CT_ERROR(rc_minor, "fclose failed on '%s'", filename); + if (buf) free(buf); return rc_minor; } - *crc32result = crc32sum; + if (!rc) { + *crc32result = crc32sum; + } + + if (buf) free(buf); return rc; } diff --git a/src/lib/common.h b/src/lib/common.h index cf680bf..d64ae38 100644 --- a/src/lib/common.h +++ b/src/lib/common.h @@ -46,7 +46,7 @@ #endif #ifndef TSM_BUF_LENGTH -#define TSM_BUF_LENGTH 262144 /* 256 KiB. */ +#define TSM_BUF_LENGTH 16777216 /* 16 MiB */ #endif #ifndef MAX_OPTIONS_LENGTH diff --git a/src/ltsmc.c b/src/ltsmc.c index f0397ac..be81b2c 100644 --- a/src/ltsmc.c +++ b/src/ltsmc.c @@ -493,7 +493,7 @@ int main(int argc, char *argv[]) goto cleanup_tsm; } - char buf[TSM_BUF_LENGTH] = {0}; + char* buf = malloc(TSM_BUF_LENGTH); size_t size; do { size = fread(buf, 1, TSM_BUF_LENGTH, stdin); @@ -515,9 +515,12 @@ int main(int argc, char *argv[]) if (rc) CT_ERROR(errno, "tsm_fclose failed"); + free(buf); + goto cleanup_tsm; } + session.progress = progress_callback; rc = tsm_connect(&login, &session);