| From 4b7176712189de3edbee23a42a5b7a8d2b400bba Mon Sep 17 00:00:00 2001 |
| From: Jeff Mahoney <jeffm@suse.com> |
| Date: Wed, 15 Jan 2020 13:00:59 -0500 |
| Subject: [PATCH] reiserfs: fix handling of -EOPNOTSUPP in |
| reiserfs_for_each_xattr |
| |
| commit 394440d469413fa9b74f88a11f144d76017221f2 upstream. |
| |
| Commit 60e4cf67a58 (reiserfs: fix extended attributes on the root |
| directory) introduced a regression open_xa_root started returning |
| -EOPNOTSUPP but it was not handled properly in reiserfs_for_each_xattr. |
| |
| When the reiserfs module is built without CONFIG_REISERFS_FS_XATTR, |
| deleting an inode would result in a warning and chowning an inode |
| would also result in a warning and then fail to complete. |
| |
| With CONFIG_REISERFS_FS_XATTR enabled, the xattr root would always be |
| present for read-write operations. |
| |
| This commit handles -EOPNOSUPP in the same way -ENODATA is handled. |
| |
| Fixes: 60e4cf67a582 ("reiserfs: fix extended attributes on the root directory") |
| CC: stable@vger.kernel.org # Commit 60e4cf67a58 was picked up by stable |
| Link: https://lore.kernel.org/r/20200115180059.6935-1-jeffm@suse.com |
| Reported-by: Michael Brunnbauer <brunni@netestate.de> |
| Signed-off-by: Jeff Mahoney <jeffm@suse.com> |
| Signed-off-by: Jan Kara <jack@suse.cz> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c |
| index 62b40df36c98..28b241cd6987 100644 |
| --- a/fs/reiserfs/xattr.c |
| +++ b/fs/reiserfs/xattr.c |
| @@ -319,8 +319,12 @@ static int reiserfs_for_each_xattr(struct inode *inode, |
| out_dir: |
| dput(dir); |
| out: |
| - /* -ENODATA isn't an error */ |
| - if (err == -ENODATA) |
| + /* |
| + * -ENODATA: this object doesn't have any xattrs |
| + * -EOPNOTSUPP: this file system doesn't have xattrs enabled on disk. |
| + * Neither are errors |
| + */ |
| + if (err == -ENODATA || err == -EOPNOTSUPP) |
| err = 0; |
| return err; |
| } |
| -- |
| 2.7.4 |
| |