Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 273103
b: refs/heads/master
c: 189e868
h: refs/heads/master
i:
  273101: 08851fc
  273099: 0bdd19f
  273095: 278922c
  273087: 5018ce7
v: v3
  • Loading branch information
Allison Henderson authored and Theodore Ts'o committed Sep 7, 2011
1 parent deeaad9 commit 82d3aeb
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: decbd919f4bb9cb698486880c026c4104b13d3c3
refs/heads/master: 189e868fa8fdca702eb9db9d8afc46b5cb9144c9
13 changes: 11 additions & 2 deletions trunk/fs/ext4/extents.c
Original file line number Diff line number Diff line change
Expand Up @@ -3653,6 +3653,7 @@ void ext4_ext_truncate(struct inode *inode)
struct super_block *sb = inode->i_sb;
ext4_lblk_t last_block;
handle_t *handle;
loff_t page_len;
int err = 0;

/*
Expand All @@ -3669,8 +3670,16 @@ void ext4_ext_truncate(struct inode *inode)
if (IS_ERR(handle))
return;

if (inode->i_size & (sb->s_blocksize - 1))
ext4_block_truncate_page(handle, mapping, inode->i_size);
if (inode->i_size % PAGE_CACHE_SIZE != 0) {
page_len = PAGE_CACHE_SIZE -
(inode->i_size & (PAGE_CACHE_SIZE - 1));

err = ext4_discard_partial_page_buffers(handle,
mapping, inode->i_size, page_len, 0);

if (err)
goto out_stop;
}

if (ext4_orphan_add(handle, inode))
goto out_stop;
Expand Down
13 changes: 11 additions & 2 deletions trunk/fs/ext4/indirect.c
Original file line number Diff line number Diff line change
Expand Up @@ -1343,7 +1343,9 @@ void ext4_ind_truncate(struct inode *inode)
__le32 nr = 0;
int n = 0;
ext4_lblk_t last_block, max_block;
loff_t page_len;
unsigned blocksize = inode->i_sb->s_blocksize;
int err;

handle = start_transaction(inode);
if (IS_ERR(handle))
Expand All @@ -1354,9 +1356,16 @@ void ext4_ind_truncate(struct inode *inode)
max_block = (EXT4_SB(inode->i_sb)->s_bitmap_maxbytes + blocksize-1)
>> EXT4_BLOCK_SIZE_BITS(inode->i_sb);

if (inode->i_size & (blocksize - 1))
if (ext4_block_truncate_page(handle, mapping, inode->i_size))
if (inode->i_size % PAGE_CACHE_SIZE != 0) {
page_len = PAGE_CACHE_SIZE -
(inode->i_size & (PAGE_CACHE_SIZE - 1));

err = ext4_discard_partial_page_buffers(handle,
mapping, inode->i_size, page_len, 0);

if (err)
goto out_stop;
}

if (last_block != max_block) {
n = ext4_block_to_path(inode, last_block, offsets, NULL);
Expand Down

0 comments on commit 82d3aeb

Please sign in to comment.