static int ubifs_crypt_set_context(struct inode *inode, const void *ctx,
                                   size_t len, void *fs_data)
 {
+       /*
+        * Creating an encryption context is done unlocked since we
+        * operate on a new inode which is not visible to other users
+        * at this point. So, no need to check whether inode is locked.
+        */
        return ubifs_xattr_set(inode, UBIFS_XATTR_NAME_ENCRYPTION_CONTEXT,
-                              ctx, len, 0);
+                              ctx, len, 0, false);
 }
 
 static bool ubifs_crypt_empty_dir(struct inode *inode)
 
 extern const struct xattr_handler *ubifs_xattr_handlers[];
 ssize_t ubifs_listxattr(struct dentry *dentry, char *buffer, size_t size);
 int ubifs_xattr_set(struct inode *host, const char *name, const void *value,
-                   size_t size, int flags);
+                   size_t size, int flags, bool check_lock);
 ssize_t ubifs_xattr_get(struct inode *host, const char *name, void *buf,
                        size_t size);
 void ubifs_evict_xattr_inode(struct ubifs_info *c, ino_t xattr_inum);
 
 }
 
 int ubifs_xattr_set(struct inode *host, const char *name, const void *value,
-                   size_t size, int flags)
+                   size_t size, int flags, bool check_lock)
 {
        struct inode *inode;
        struct ubifs_info *c = host->i_sb->s_fs_info;
        union ubifs_key key;
        int err;
 
-       /*
-        * Creating an encryption context is done unlocked since we
-        * operate on a new inode which is not visible to other users
-        * at this point.
-        */
-       if (strcmp(name, UBIFS_XATTR_NAME_ENCRYPTION_CONTEXT) != 0)
+       if (check_lock)
                ubifs_assert(inode_is_locked(host));
 
        if (size > UBIFS_MAX_INO_DATA)
                }
                strcpy(name, XATTR_SECURITY_PREFIX);
                strcpy(name + XATTR_SECURITY_PREFIX_LEN, xattr->name);
+               /*
+                * creating a new inode without holding the inode rwsem,
+                * no need to check whether inode is locked.
+                */
                err = ubifs_xattr_set(inode, name, xattr->value,
-                                     xattr->value_len, 0);
+                                     xattr->value_len, 0, false);
                kfree(name);
                if (err < 0)
                        break;
        name = xattr_full_name(handler, name);
 
        if (value)
-               return ubifs_xattr_set(inode, name, value, size, flags);
+               return ubifs_xattr_set(inode, name, value, size, flags, true);
        else
                return ubifs_xattr_remove(inode, name);
 }