]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - fs/ubifs/dir.c
Merge tag 'for-linus-6.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw...
[thirdparty/linux.git] / fs / ubifs / dir.c
index f59acd6a3615e7c6877a879a09eb0213706d2d9b..0f29cf2011361c6f9d663dc21f09e363de0c7e0f 100644 (file)
@@ -68,13 +68,14 @@ static int inherit_flags(const struct inode *dir, umode_t mode)
  * @c: UBIFS file-system description object
  * @dir: parent directory inode
  * @mode: inode mode flags
+ * @is_xattr: whether the inode is xattr inode
  *
  * This function finds an unused inode number, allocates new inode and
  * initializes it. Returns new inode in case of success and an error code in
  * case of failure.
  */
 struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
-                             umode_t mode)
+                             umode_t mode, bool is_xattr)
 {
        int err;
        struct inode *inode;
@@ -99,10 +100,12 @@ struct inode *ubifs_new_inode(struct ubifs_info *c, struct inode *dir,
                         current_time(inode);
        inode->i_mapping->nrpages = 0;
 
-       err = fscrypt_prepare_new_inode(dir, inode, &encrypted);
-       if (err) {
-               ubifs_err(c, "fscrypt_prepare_new_inode failed: %i", err);
-               goto out_iput;
+       if (!is_xattr) {
+               err = fscrypt_prepare_new_inode(dir, inode, &encrypted);
+               if (err) {
+                       ubifs_err(c, "fscrypt_prepare_new_inode failed: %i", err);
+                       goto out_iput;
+               }
        }
 
        switch (mode & S_IFMT) {
@@ -309,7 +312,7 @@ static int ubifs_create(struct user_namespace *mnt_userns, struct inode *dir,
 
        sz_change = CALC_DENT_SIZE(fname_len(&nm));
 
-       inode = ubifs_new_inode(c, dir, mode);
+       inode = ubifs_new_inode(c, dir, mode, false);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
                goto out_fname;
@@ -370,7 +373,7 @@ static struct inode *create_whiteout(struct inode *dir, struct dentry *dentry)
        if (err)
                return ERR_PTR(err);
 
-       inode = ubifs_new_inode(c, dir, mode);
+       inode = ubifs_new_inode(c, dir, mode, false);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
                goto out_free;
@@ -463,7 +466,7 @@ static int ubifs_tmpfile(struct user_namespace *mnt_userns, struct inode *dir,
                return err;
        }
 
-       inode = ubifs_new_inode(c, dir, mode);
+       inode = ubifs_new_inode(c, dir, mode, false);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
                goto out_budg;
@@ -873,7 +876,7 @@ out_fname:
 }
 
 /**
- * check_dir_empty - check if a directory is empty or not.
+ * ubifs_check_dir_empty - check if a directory is empty or not.
  * @dir: VFS inode object of the directory to check
  *
  * This function checks if directory @dir is empty. Returns zero if the
@@ -1005,7 +1008,7 @@ static int ubifs_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
 
        sz_change = CALC_DENT_SIZE(fname_len(&nm));
 
-       inode = ubifs_new_inode(c, dir, S_IFDIR | mode);
+       inode = ubifs_new_inode(c, dir, S_IFDIR | mode, false);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
                goto out_fname;
@@ -1092,7 +1095,7 @@ static int ubifs_mknod(struct user_namespace *mnt_userns, struct inode *dir,
 
        sz_change = CALC_DENT_SIZE(fname_len(&nm));
 
-       inode = ubifs_new_inode(c, dir, mode);
+       inode = ubifs_new_inode(c, dir, mode, false);
        if (IS_ERR(inode)) {
                kfree(dev);
                err = PTR_ERR(inode);
@@ -1174,7 +1177,7 @@ static int ubifs_symlink(struct user_namespace *mnt_userns, struct inode *dir,
 
        sz_change = CALC_DENT_SIZE(fname_len(&nm));
 
-       inode = ubifs_new_inode(c, dir, S_IFLNK | S_IRWXUGO);
+       inode = ubifs_new_inode(c, dir, S_IFLNK | S_IRWXUGO, false);
        if (IS_ERR(inode)) {
                err = PTR_ERR(inode);
                goto out_fname;