提交 7e0f236b 编写于 作者: N Namjae Jeon 提交者: Linus Torvalds

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: NNamjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: NAmit Sahrawat <a.sahrawat@samsung.com>
Cc: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 b13bb33e
...@@ -115,7 +115,7 @@ static inline int __fat_get_block(struct inode *inode, sector_t iblock, ...@@ -115,7 +115,7 @@ static inline int __fat_get_block(struct inode *inode, sector_t iblock,
struct super_block *sb = inode->i_sb; struct super_block *sb = inode->i_sb;
struct msdos_sb_info *sbi = MSDOS_SB(sb); struct msdos_sb_info *sbi = MSDOS_SB(sb);
unsigned long mapped_blocks; unsigned long mapped_blocks;
sector_t phys; sector_t phys, last_block;
int err, offset; int err, offset;
err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create); 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, ...@@ -135,8 +135,14 @@ static inline int __fat_get_block(struct inode *inode, sector_t iblock,
return -EIO; return -EIO;
} }
last_block = inode->i_blocks >> (sb->s_blocksize_bits - 9);
offset = (unsigned long)iblock & (sbi->sec_per_clus - 1); 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. */ /* TODO: multiple cluster allocation would be desirable. */
err = fat_add_cluster(inode); err = fat_add_cluster(inode);
if (err) if (err)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册