ubifs: ubifs_jnl_write_inode: Only check once for the limitation of xattr count
authorZhihao Cheng <chengzhihao1@huawei.com>
Fri, 12 Jul 2024 06:36:24 +0000 (14:36 +0800)
committerRichard Weinberger <richard@nod.at>
Thu, 14 Nov 2024 16:28:46 +0000 (17:28 +0100)
No need to check the limitation of xattr count every time in function
ubifs_jnl_write_inode(), because the 'ui->xattr_cnt' won't be modified
by others in the inode evicting process.

Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
fs/ubifs/journal.c

index 4a35f9e..8e98be6 100644 (file)
@@ -981,6 +981,12 @@ int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode)
 
        dbg_jnl("ino %lu, nlink %u", inode->i_ino, inode->i_nlink);
 
+       if (kill_xattrs && ui->xattr_cnt > ubifs_xattr_max_cnt(c)) {
+               ubifs_err(c, "Cannot delete inode, it has too much xattrs!");
+               ubifs_ro_mode(c, err);
+               return -EPERM;
+       }
+
        /*
         * If the inode is being deleted, do not write the attached data. No
         * need to synchronize the write-buffer either.
@@ -1012,12 +1018,6 @@ int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode)
                struct inode *xino;
                struct ubifs_dent_node *xent, *pxent = NULL;
 
-               if (ui->xattr_cnt > ubifs_xattr_max_cnt(c)) {
-                       err = -EPERM;
-                       ubifs_err(c, "Cannot delete inode, it has too much xattrs!");
-                       goto out_release;
-               }
-
                lowest_xent_key(c, &key, inode->i_ino);
                while (1) {
                        xent = ubifs_tnc_next_ent(c, &key, &nm);