|
@@ -464,6 +464,8 @@ void sysfs_addrm_start(struct sysfs_addrm_cxt *acxt,
|
|
*/
|
|
*/
|
|
int __sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
|
int __sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
|
{
|
|
{
|
|
|
|
+ struct sysfs_inode_attrs *ps_iattr;
|
|
|
|
+
|
|
if (sysfs_find_dirent(acxt->parent_sd, sd->s_name))
|
|
if (sysfs_find_dirent(acxt->parent_sd, sd->s_name))
|
|
return -EEXIST;
|
|
return -EEXIST;
|
|
|
|
|
|
@@ -476,6 +478,13 @@ int __sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
|
|
|
|
|
sysfs_link_sibling(sd);
|
|
sysfs_link_sibling(sd);
|
|
|
|
|
|
|
|
+ /* Update timestamps on the parent */
|
|
|
|
+ ps_iattr = acxt->parent_sd->s_iattr;
|
|
|
|
+ if (ps_iattr) {
|
|
|
|
+ struct iattr *ps_iattrs = &ps_iattr->ia_iattr;
|
|
|
|
+ ps_iattrs->ia_ctime = ps_iattrs->ia_mtime = CURRENT_TIME;
|
|
|
|
+ }
|
|
|
|
+
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -554,10 +563,19 @@ int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
|
*/
|
|
*/
|
|
void sysfs_remove_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
|
void sysfs_remove_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
|
{
|
|
{
|
|
|
|
+ struct sysfs_inode_attrs *ps_iattr;
|
|
|
|
+
|
|
BUG_ON(sd->s_flags & SYSFS_FLAG_REMOVED);
|
|
BUG_ON(sd->s_flags & SYSFS_FLAG_REMOVED);
|
|
|
|
|
|
sysfs_unlink_sibling(sd);
|
|
sysfs_unlink_sibling(sd);
|
|
|
|
|
|
|
|
+ /* Update timestamps on the parent */
|
|
|
|
+ ps_iattr = acxt->parent_sd->s_iattr;
|
|
|
|
+ if (ps_iattr) {
|
|
|
|
+ struct iattr *ps_iattrs = &ps_iattr->ia_iattr;
|
|
|
|
+ ps_iattrs->ia_ctime = ps_iattrs->ia_mtime = CURRENT_TIME;
|
|
|
|
+ }
|
|
|
|
+
|
|
sd->s_flags |= SYSFS_FLAG_REMOVED;
|
|
sd->s_flags |= SYSFS_FLAG_REMOVED;
|
|
sd->s_sibling = acxt->removed;
|
|
sd->s_sibling = acxt->removed;
|
|
acxt->removed = sd;
|
|
acxt->removed = sd;
|