mirror of
https://github.com/torvalds/linux.git
synced 2024-11-29 07:31:29 +00:00
bcachefs: Fix i_sectors_leak in bch2_truncate_page
When bch2_truncate_page() discards dirty sectors in the page cache, we need to account for that - we don't need to account for allocated sectors because that'll be done by the bch2_fpunch() call when it updates the btree. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
This commit is contained in:
parent
8810386f6b
commit
b19d307dc1
@ -2241,6 +2241,7 @@ static int __bch2_truncate_page(struct bch_inode_info *inode,
|
||||
unsigned end_offset = ((end - 1) & (PAGE_SIZE - 1)) + 1;
|
||||
unsigned i;
|
||||
struct page *page;
|
||||
s64 i_sectors_delta = 0;
|
||||
int ret = 0;
|
||||
|
||||
/* Page boundary? Nothing to do */
|
||||
@ -2292,9 +2293,13 @@ static int __bch2_truncate_page(struct bch_inode_info *inode,
|
||||
i < round_down(end_offset, block_bytes(c)) >> 9;
|
||||
i++) {
|
||||
s->s[i].nr_replicas = 0;
|
||||
if (s->s[i].state == SECTOR_DIRTY)
|
||||
i_sectors_delta--;
|
||||
s->s[i].state = SECTOR_UNALLOCATED;
|
||||
}
|
||||
|
||||
i_sectors_acct(c, inode, NULL, i_sectors_delta);
|
||||
|
||||
/*
|
||||
* Caller needs to know whether this page will be written out by
|
||||
* writeback - doing an i_size update if necessary - or whether it will
|
||||
|
Loading…
Reference in New Issue
Block a user