mirror of
https://github.com/versity/scoutfs.git
synced 2026-04-30 18:05:43 +00:00
Compare commits
2 Commits
auke/data_
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af31b9f1e8 | ||
|
|
ad65116d8f |
@@ -1,6 +1,23 @@
|
|||||||
Versity ScoutFS Release Notes
|
Versity ScoutFS Release Notes
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
|
---
|
||||||
|
v1.30
|
||||||
|
\
|
||||||
|
*Apr 21, 2026*
|
||||||
|
|
||||||
|
Fix a problem reading the accumulated totals of contributing .totl.
|
||||||
|
xattrs when log merging is in progress. The problem would have readers
|
||||||
|
of the totals calculate the sums incorrectly.
|
||||||
|
|
||||||
|
Fix a problem updating quota rules. There was a race where updates
|
||||||
|
could be corrupted if they happened while a transaction was being
|
||||||
|
written.
|
||||||
|
|
||||||
|
Fix a problem deleting files with .indx. xattrs. The internal indexing
|
||||||
|
metadata wouldn't be properly deleted so the files would still claim to
|
||||||
|
be present and visible in the index, though the file no longer existed.
|
||||||
|
|
||||||
---
|
---
|
||||||
v1.29
|
v1.29
|
||||||
\
|
\
|
||||||
|
|||||||
@@ -384,12 +384,6 @@ static inline u64 ext_last(struct scoutfs_extent *ext)
|
|||||||
* This can waste a lot of space for small or sparse files but is
|
* This can waste a lot of space for small or sparse files but is
|
||||||
* reasonable when a file population is known to be large and dense but
|
* reasonable when a file population is known to be large and dense but
|
||||||
* known to be written with non-streaming write patterns.
|
* known to be written with non-streaming write patterns.
|
||||||
*
|
|
||||||
* In either strategy, preallocation ramps up proportionally with the
|
|
||||||
* file's online block count rather than jumping to the full prealloc
|
|
||||||
* size. This avoids overallocation for small files in mixed-size
|
|
||||||
* workloads while still allowing large files to benefit from full
|
|
||||||
* preallocation.
|
|
||||||
*/
|
*/
|
||||||
static int alloc_block(struct super_block *sb, struct inode *inode,
|
static int alloc_block(struct super_block *sb, struct inode *inode,
|
||||||
struct scoutfs_extent *ext, u64 iblock,
|
struct scoutfs_extent *ext, u64 iblock,
|
||||||
@@ -406,7 +400,6 @@ static int alloc_block(struct super_block *sb, struct inode *inode,
|
|||||||
struct scoutfs_extent found;
|
struct scoutfs_extent found;
|
||||||
struct scoutfs_extent pre = {0,};
|
struct scoutfs_extent pre = {0,};
|
||||||
bool undo_pre = false;
|
bool undo_pre = false;
|
||||||
bool have_onoff = false;
|
|
||||||
u64 blkno = 0;
|
u64 blkno = 0;
|
||||||
u64 online;
|
u64 online;
|
||||||
u64 offline;
|
u64 offline;
|
||||||
@@ -452,7 +445,6 @@ static int alloc_block(struct super_block *sb, struct inode *inode,
|
|||||||
* blocks.
|
* blocks.
|
||||||
*/
|
*/
|
||||||
scoutfs_inode_get_onoff(inode, &online, &offline);
|
scoutfs_inode_get_onoff(inode, &online, &offline);
|
||||||
have_onoff = true;
|
|
||||||
if (iblock > 1 && iblock == online) {
|
if (iblock > 1 && iblock == online) {
|
||||||
ret = scoutfs_ext_next(sb, &data_ext_ops, &args,
|
ret = scoutfs_ext_next(sb, &data_ext_ops, &args,
|
||||||
iblock, 1, &found);
|
iblock, 1, &found);
|
||||||
@@ -499,16 +491,6 @@ static int alloc_block(struct super_block *sb, struct inode *inode,
|
|||||||
/* overall prealloc limit */
|
/* overall prealloc limit */
|
||||||
count = min_t(u64, count, opts.data_prealloc_blocks);
|
count = min_t(u64, count, opts.data_prealloc_blocks);
|
||||||
|
|
||||||
/*
|
|
||||||
* Ramp preallocation up proportionally with the file's online
|
|
||||||
* block count rather than jumping to the full prealloc size.
|
|
||||||
*/
|
|
||||||
if (!ext->len) {
|
|
||||||
if (!have_onoff)
|
|
||||||
scoutfs_inode_get_onoff(inode, &online, &offline);
|
|
||||||
count = max_t(u64, 1, min(count, online));
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = scoutfs_alloc_data(sb, datinf->alloc, datinf->wri,
|
ret = scoutfs_alloc_data(sb, datinf->alloc, datinf->wri,
|
||||||
&datinf->dalloc, count, &blkno, &count);
|
&datinf->dalloc, count, &blkno, &count);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
/mnt/test/test/data-prealloc/file-1: extents: 32
|
/mnt/test/test/data-prealloc/file-1: extents: 32
|
||||||
/mnt/test/test/data-prealloc/file-2: extents: 32
|
/mnt/test/test/data-prealloc/file-2: extents: 32
|
||||||
== any writes to region prealloc get full extents
|
== any writes to region prealloc get full extents
|
||||||
/mnt/test/test/data-prealloc/file-1: extents: 8
|
/mnt/test/test/data-prealloc/file-1: extents: 4
|
||||||
/mnt/test/test/data-prealloc/file-2: extents: 8
|
/mnt/test/test/data-prealloc/file-2: extents: 4
|
||||||
/mnt/test/test/data-prealloc/file-1: extents: 8
|
/mnt/test/test/data-prealloc/file-1: extents: 4
|
||||||
/mnt/test/test/data-prealloc/file-2: extents: 8
|
/mnt/test/test/data-prealloc/file-2: extents: 4
|
||||||
== streaming offline writes get full extents either way
|
== streaming offline writes get full extents either way
|
||||||
/mnt/test/test/data-prealloc/file-1: extents: 4
|
/mnt/test/test/data-prealloc/file-1: extents: 4
|
||||||
/mnt/test/test/data-prealloc/file-2: extents: 4
|
/mnt/test/test/data-prealloc/file-2: extents: 4
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
== goofy preallocation amounts work
|
== goofy preallocation amounts work
|
||||||
/mnt/test/test/data-prealloc/file-1: extents: 6
|
/mnt/test/test/data-prealloc/file-1: extents: 6
|
||||||
/mnt/test/test/data-prealloc/file-2: extents: 6
|
/mnt/test/test/data-prealloc/file-2: extents: 6
|
||||||
/mnt/test/test/data-prealloc/file-1: extents: 10
|
/mnt/test/test/data-prealloc/file-1: extents: 6
|
||||||
/mnt/test/test/data-prealloc/file-2: extents: 10
|
/mnt/test/test/data-prealloc/file-2: extents: 6
|
||||||
/mnt/test/test/data-prealloc/file-1: extents: 3
|
/mnt/test/test/data-prealloc/file-1: extents: 3
|
||||||
/mnt/test/test/data-prealloc/file-2: extents: 3
|
/mnt/test/test/data-prealloc/file-2: extents: 3
|
||||||
== block writes into region allocs hole
|
== block writes into region allocs hole
|
||||||
|
|||||||
Reference in New Issue
Block a user