diff options
author | Bob Peterson <rpeterso@redhat.com> | 2017-08-30 16:26:09 +0200 |
---|---|---|
committer | Bob Peterson <rpeterso@redhat.com> | 2017-08-30 20:29:22 +0200 |
commit | c4a9d1892f1ce6fe040b717b68bd21e689cc2410 (patch) | |
tree | 318a7c5a9566218c32e543a28b7e6e3d734f5fcf /fs/gfs2/rgrp.h | |
parent | gfs2: constify rhashtable_params (diff) | |
download | linux-c4a9d1892f1ce6fe040b717b68bd21e689cc2410.tar.xz linux-c4a9d1892f1ce6fe040b717b68bd21e689cc2410.zip |
GFS2: Fix non-recursive truncate bug
Before this patch if you truncated a file to a smaller size it
wasn't freeing all the blocks properly. There are two reasons.
First, the metapath comparison was not comparing previous heights.
I added a function, mp_eq_to_hgt, which checks the metapath at
all heights prior to the target height.
Second, in function find_nonnull_ptr, it needed to zero out all
pointers for heights following the target height. Translated into
decimal integer terms, this way a number like 299, when incremented,
becomes 300, not 399. The 2 gets incremented to 3, and the following
digits need to be reset.
These two things allow the truncate state machine to properly find
the blocks it needs to delete.
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Diffstat (limited to 'fs/gfs2/rgrp.h')
0 files changed, 0 insertions, 0 deletions