mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 13:44:15 +08:00
fat: skip cluster allocation on fallocated region
Skip new cluster allocation after checking i_blocks limit in _fat_get_block, because the blocks are already allocated in fallocated region. Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Amit Sahrawat <a.sahrawat@samsung.com> Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
b13bb33eac
commit
7e0f236b5b
@ -115,7 +115,7 @@ static inline int __fat_get_block(struct inode *inode, sector_t iblock,
|
||||
struct super_block *sb = inode->i_sb;
|
||||
struct msdos_sb_info *sbi = MSDOS_SB(sb);
|
||||
unsigned long mapped_blocks;
|
||||
sector_t phys;
|
||||
sector_t phys, last_block;
|
||||
int err, offset;
|
||||
|
||||
err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create);
|
||||
@ -135,8 +135,14 @@ static inline int __fat_get_block(struct inode *inode, sector_t iblock,
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
last_block = inode->i_blocks >> (sb->s_blocksize_bits - 9);
|
||||
offset = (unsigned long)iblock & (sbi->sec_per_clus - 1);
|
||||
if (!offset) {
|
||||
/*
|
||||
* allocate a cluster according to the following.
|
||||
* 1) no more available blocks
|
||||
* 2) not part of fallocate region
|
||||
*/
|
||||
if (!offset && !(iblock < last_block)) {
|
||||
/* TODO: multiple cluster allocation would be desirable. */
|
||||
err = fat_add_cluster(inode);
|
||||
if (err)
|
||||
|
Loading…
Reference in New Issue
Block a user