UBIFS: fix inode size debugging check failure
This patch fixes a problem with the following symptoms: UBIFS: deferred recovery completed UBIFS error (pid 15676): dbg_check_synced_i_size: ui_size is 11481088, synced_i_size is 11459081, but inode is clean UBIFS error (pid 15676): dbg_check_synced_i_size: i_ino 128, i_mode 0x81a4, i_size 11481088 It happens when additional debugging checks are enabled and we are recovering from a power cut. When we fixup corrupted inode size during recovery, we change them in-place and we change ui_size as well, but not synced_i_size, which causes this failure. This patch makes sure we change both fields and fixes the issue. Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
parent
45cd5cddbf
commit
c1f1f91d21
|
@ -1490,18 +1490,22 @@ int ubifs_recover_size(struct ubifs_info *c)
|
||||||
if (c->ro_mount) {
|
if (c->ro_mount) {
|
||||||
/* Fix the inode size and pin it in memory */
|
/* Fix the inode size and pin it in memory */
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
|
struct ubifs_inode *ui;
|
||||||
|
|
||||||
ubifs_assert(!e->inode);
|
ubifs_assert(!e->inode);
|
||||||
|
|
||||||
inode = ubifs_iget(c->vfs_sb, e->inum);
|
inode = ubifs_iget(c->vfs_sb, e->inum);
|
||||||
if (IS_ERR(inode))
|
if (IS_ERR(inode))
|
||||||
return PTR_ERR(inode);
|
return PTR_ERR(inode);
|
||||||
|
|
||||||
|
ui = ubifs_inode(inode);
|
||||||
if (inode->i_size < e->d_size) {
|
if (inode->i_size < e->d_size) {
|
||||||
dbg_rcvry("ino %lu size %lld -> %lld",
|
dbg_rcvry("ino %lu size %lld -> %lld",
|
||||||
(unsigned long)e->inum,
|
(unsigned long)e->inum,
|
||||||
inode->i_size, e->d_size);
|
inode->i_size, e->d_size);
|
||||||
inode->i_size = e->d_size;
|
inode->i_size = e->d_size;
|
||||||
ubifs_inode(inode)->ui_size = e->d_size;
|
ui->ui_size = e->d_size;
|
||||||
|
ui->synced_i_size = e->d_size;
|
||||||
e->inode = inode;
|
e->inode = inode;
|
||||||
this = rb_next(this);
|
this = rb_next(this);
|
||||||
continue;
|
continue;
|
||||||
|
|
Reference in New Issue