summaryrefslogtreecommitdiff
path: root/fs/ubifs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ubifs/dir.c')
-rw-r--r--fs/ubifs/dir.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index f5d5ee43ae6e..a52871ee4d16 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -578,6 +578,11 @@ static int ubifs_unlink(struct inode *dir, struct dentry *dentry)
dbg_gen("dent '%pd' from ino %lu (nlink %d) in dir ino %lu",
dentry, inode->i_ino,
inode->i_nlink, dir->i_ino);
+
+ err = ubifs_purge_xattrs(inode);
+ if (err)
+ return err;
+
ubifs_assert(mutex_is_locked(&dir->i_mutex));
ubifs_assert(mutex_is_locked(&inode->i_mutex));
err = dbg_check_synced_i_size(c, inode);
@@ -673,6 +678,10 @@ static int ubifs_rmdir(struct inode *dir, struct dentry *dentry)
if (err)
return err;
+ err = ubifs_purge_xattrs(inode);
+ if (err)
+ return err;
+
err = ubifs_budget_space(c, &req);
if (err) {
if (err != -ENOSPC)
@@ -1004,9 +1013,13 @@ static int ubifs_rename(struct inode *old_dir, struct dentry *old_dentry,
new_dentry, new_dir->i_ino);
ubifs_assert(mutex_is_locked(&old_dir->i_mutex));
ubifs_assert(mutex_is_locked(&new_dir->i_mutex));
- if (unlink)
+ if (unlink) {
ubifs_assert(mutex_is_locked(&new_inode->i_mutex));
+ err = ubifs_purge_xattrs(new_inode);
+ if (err)
+ return err;
+ }
if (unlink && is_dir) {
err = check_dir_empty(c, new_inode);
@@ -1188,10 +1201,12 @@ const struct inode_operations ubifs_dir_inode_operations = {
.rename = ubifs_rename,
.setattr = ubifs_setattr,
.getattr = ubifs_getattr,
+#ifdef CONFIG_UBIFS_FS_XATTR
.setxattr = ubifs_setxattr,
.getxattr = ubifs_getxattr,
.listxattr = ubifs_listxattr,
.removexattr = ubifs_removexattr,
+#endif
#ifdef CONFIG_UBIFS_ATIME_SUPPORT
.update_time = ubifs_update_time,
#endif