mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
exfat: fix erroneous discard when clear cluster bit
commit77edfc6e51upstream. If mounted with discard option, exFAT issues discard command when clear cluster bit to remove file. But the input parameter of cluster-to-sector calculation is abnormally added by reserved cluster size which is 2, leading to discard unrelated sectors included in target+2 cluster. With fixing this, remove the wrong comments in set/clear/find bitmap functions. Fixes:1e49a94cf7("exfat: add bitmap operations") Cc: stable@vger.kernel.org # v5.7+ Signed-off-by: Hyeongseok Kim <hyeongseok@gmail.com> Acked-by: Sungjong Seo <sj1557.seo@samsung.com> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
1c525c2656
commit
11e3ff7e16
|
|
@ -141,10 +141,6 @@ void exfat_free_bitmap(struct exfat_sb_info *sbi)
|
||||||
kfree(sbi->vol_amap);
|
kfree(sbi->vol_amap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* If the value of "clu" is 0, it means cluster 2 which is the first cluster of
|
|
||||||
* the cluster heap.
|
|
||||||
*/
|
|
||||||
int exfat_set_bitmap(struct inode *inode, unsigned int clu)
|
int exfat_set_bitmap(struct inode *inode, unsigned int clu)
|
||||||
{
|
{
|
||||||
int i, b;
|
int i, b;
|
||||||
|
|
@ -162,10 +158,6 @@ int exfat_set_bitmap(struct inode *inode, unsigned int clu)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* If the value of "clu" is 0, it means cluster 2 which is the first cluster of
|
|
||||||
* the cluster heap.
|
|
||||||
*/
|
|
||||||
void exfat_clear_bitmap(struct inode *inode, unsigned int clu)
|
void exfat_clear_bitmap(struct inode *inode, unsigned int clu)
|
||||||
{
|
{
|
||||||
int i, b;
|
int i, b;
|
||||||
|
|
@ -186,8 +178,7 @@ void exfat_clear_bitmap(struct inode *inode, unsigned int clu)
|
||||||
int ret_discard;
|
int ret_discard;
|
||||||
|
|
||||||
ret_discard = sb_issue_discard(sb,
|
ret_discard = sb_issue_discard(sb,
|
||||||
exfat_cluster_to_sector(sbi, clu +
|
exfat_cluster_to_sector(sbi, clu),
|
||||||
EXFAT_RESERVED_CLUSTERS),
|
|
||||||
(1 << sbi->sect_per_clus_bits), GFP_NOFS, 0);
|
(1 << sbi->sect_per_clus_bits), GFP_NOFS, 0);
|
||||||
|
|
||||||
if (ret_discard == -EOPNOTSUPP) {
|
if (ret_discard == -EOPNOTSUPP) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user