Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbfa6c88 authored by Artem Bityutskiy's avatar Artem Bityutskiy
Browse files

UBIFS: do not write orphans back



Orphan inodes are deleted inodes which will disappear after FS
re-mount. There is not need to write orphan inodes back, because
they are not needed on the flash media.

So optimize orphans a little by not writing them back. Just mark
them as clean, free the budget, and report success to VFS.

Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
parent ff46d7b3
Loading
Loading
Loading
Loading
+13 −5
Original line number Original line Diff line number Diff line
@@ -278,7 +278,7 @@ static void ubifs_destroy_inode(struct inode *inode)
 */
 */
static int ubifs_write_inode(struct inode *inode, int wait)
static int ubifs_write_inode(struct inode *inode, int wait)
{
{
	int err;
	int err = 0;
	struct ubifs_info *c = inode->i_sb->s_fs_info;
	struct ubifs_info *c = inode->i_sb->s_fs_info;
	struct ubifs_inode *ui = ubifs_inode(inode);
	struct ubifs_inode *ui = ubifs_inode(inode);


@@ -299,10 +299,18 @@ static int ubifs_write_inode(struct inode *inode, int wait)
		return 0;
		return 0;
	}
	}


	dbg_gen("inode %lu, mode %#x", inode->i_ino, (int)inode->i_mode);
	/*
	 * As an optimization, do not write orphan inodes to the media just
	 * because this is not needed.
	 */
	dbg_gen("inode %lu, mode %#x, nlink %u",
		inode->i_ino, (int)inode->i_mode, inode->i_nlink);
	if (inode->i_nlink) {
		err = ubifs_jnl_write_inode(c, inode, 0);
		err = ubifs_jnl_write_inode(c, inode, 0);
		if (err)
		if (err)
		ubifs_err("can't write inode %lu, error %d", inode->i_ino, err);
			ubifs_err("can't write inode %lu, error %d",
				  inode->i_ino, err);
	}


	ui->dirty = 0;
	ui->dirty = 0;
	mutex_unlock(&ui->ui_mutex);
	mutex_unlock(&ui->ui_mutex);