mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
fat: restore original value when fat_ent_write failed
fat_ent_write() may have committed the new link to the primary FAT but
then failed on the mirror copy, leaving the chain pointing to new_dclus
even though the caller will free it. Restore the original value to keep
the chain consistent.
Link: https://lore.kernel.org/20260525085649.781643-1-n05ec@lzu.edu.cn
Fixes: 1da177e4c3 ("Linux-2.6.12-rc2")
Signed-off-by: Yemu Lu <prcups@krgm.moe>
Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
Reported-by: Yuan Tan <yuantan098@gmail.com>
Reported-by: Yifan Wu <yifanwucs@gmail.com>
Reported-by: Juefei Pu <tomapufckgml@gmail.com>
Reported-by: Xin Liu <bird@lzu.edu.cn>
Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
Cc: Christian Brauner <brauner@kernel.org>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
a0275efa65
commit
64d9183203
|
|
@ -133,7 +133,11 @@ int fat_chain_add(struct inode *inode, int new_dclus, int nr_cluster)
|
|||
ret = fat_ent_read(inode, &fatent, last);
|
||||
if (ret >= 0) {
|
||||
int wait = inode_needs_sync(inode);
|
||||
int old = ret;
|
||||
|
||||
ret = fat_ent_write(inode, &fatent, new_dclus, wait);
|
||||
if (ret < 0)
|
||||
fat_ent_write(inode, &fatent, old, wait);
|
||||
fatent_brelse(&fatent);
|
||||
}
|
||||
if (ret < 0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user