mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
udf: Don't write integrity descriptor too often
We update information in logical volume integrity descriptor after each allocation (as LVID contains free space, number of directories and files on disk etc.). If the filesystem is on some phase change media, this leads to its quick degradation as such media is able to handle only 10000 overwrites or so. We solve the problem by writing new information into LVID only on umount, remount-ro and sync. This solves the problem at the price of longer media inconsistency (previously media became consistent after pdflush flushed dirty LVID buffer) but that should be acceptable. Report by and patch written in cooperation with Rich Coe <Richard.Coe@med.ge.com>. Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
4034600516
commit
146bca72c7
5 changed files with 52 additions and 47 deletions
|
@ -49,8 +49,7 @@ void udf_free_inode(struct inode *inode)
|
|||
le32_add_cpu(&lvidiu->numDirs, -1);
|
||||
else
|
||||
le32_add_cpu(&lvidiu->numFiles, -1);
|
||||
|
||||
mark_buffer_dirty(sbi->s_lvid_bh);
|
||||
udf_updated_lvid(sb);
|
||||
}
|
||||
mutex_unlock(&sbi->s_alloc_mutex);
|
||||
|
||||
|
@ -122,7 +121,7 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err)
|
|||
if (!(++uniqueID & 0x00000000FFFFFFFFUL))
|
||||
uniqueID += 16;
|
||||
lvhd->uniqueID = cpu_to_le64(uniqueID);
|
||||
mark_buffer_dirty(sbi->s_lvid_bh);
|
||||
udf_updated_lvid(sb);
|
||||
}
|
||||
mutex_unlock(&sbi->s_alloc_mutex);
|
||||
inode->i_mode = mode;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue