fix setattr error handling in sysfs, configfs

sysfs and configfs setattr functions have error cases after the generic inode's
attributes have been changed. Fix consistency by changing the generic inode
attributes only when it is guaranteed to succeed.

Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

authored by Nick Piggin and committed by Al Viro 8718d36c 5b54470d

+8 -7
+4 -5
fs/configfs/inode.c
··· 72 if (!sd) 73 return -EINVAL; 74 75 - error = simple_setattr(dentry, iattr); 76 - if (error) 77 - return error; 78 - 79 sd_iattr = sd->s_iattr; 80 if (!sd_iattr) { 81 /* setting attributes for the first time, allocate now */ ··· 85 sd_iattr->ia_atime = sd_iattr->ia_mtime = sd_iattr->ia_ctime = CURRENT_TIME; 86 sd->s_iattr = sd_iattr; 87 } 88 - 89 /* attributes were changed atleast once in past */ 90 91 if (ia_valid & ATTR_UID) 92 sd_iattr->ia_uid = iattr->ia_uid;
··· 72 if (!sd) 73 return -EINVAL; 74 75 sd_iattr = sd->s_iattr; 76 if (!sd_iattr) { 77 /* setting attributes for the first time, allocate now */ ··· 89 sd_iattr->ia_atime = sd_iattr->ia_mtime = sd_iattr->ia_ctime = CURRENT_TIME; 90 sd->s_iattr = sd_iattr; 91 } 92 /* attributes were changed atleast once in past */ 93 + 94 + error = simple_setattr(dentry, iattr); 95 + if (error) 96 + return error; 97 98 if (ia_valid & ATTR_UID) 99 sd_iattr->ia_uid = iattr->ia_uid;
+4 -2
fs/sysfs/inode.c
··· 117 if (error) 118 goto out; 119 120 /* this ignores size changes */ 121 generic_setattr(inode, iattr); 122 - 123 - error = sysfs_sd_setattr(sd, iattr); 124 125 out: 126 mutex_unlock(&sysfs_mutex);
··· 117 if (error) 118 goto out; 119 120 + error = sysfs_sd_setattr(sd, iattr); 121 + if (error) 122 + goto out; 123 + 124 /* this ignores size changes */ 125 generic_setattr(inode, iattr); 126 127 out: 128 mutex_unlock(&sysfs_mutex);