Loading fs/dcache.c +6 −8 Original line number Diff line number Diff line Loading @@ -284,25 +284,23 @@ static inline int dname_external(const struct dentry *dentry) void take_dentry_name_snapshot(struct name_snapshot *name, struct dentry *dentry) { spin_lock(&dentry->d_lock); name->name = dentry->d_name; if (unlikely(dname_external(dentry))) { struct external_name *p = external_name(dentry); atomic_inc(&p->u.count); spin_unlock(&dentry->d_lock); name->name = p->name; atomic_inc(&external_name(dentry)->u.count); } else { memcpy(name->inline_name, dentry->d_iname, dentry->d_name.len + 1); spin_unlock(&dentry->d_lock); name->name = name->inline_name; name->name.name = name->inline_name; } spin_unlock(&dentry->d_lock); } EXPORT_SYMBOL(take_dentry_name_snapshot); void release_dentry_name_snapshot(struct name_snapshot *name) { if (unlikely(name->name != name->inline_name)) { if (unlikely(name->name.name != name->inline_name)) { struct external_name *p; p = container_of(name->name, struct external_name, name[0]); p = container_of(name->name.name, struct external_name, name[0]); if (unlikely(atomic_dec_and_test(&p->u.count))) kfree_rcu(p, u.head); } Loading fs/debugfs/inode.c +1 −1 Original line number Diff line number Diff line Loading @@ -819,7 +819,7 @@ struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, goto exit; } d_move(old_dentry, dentry); fsnotify_move(d_inode(old_dir), d_inode(new_dir), old_name.name, fsnotify_move(d_inode(old_dir), d_inode(new_dir), old_name.name.name, d_is_dir(old_dentry), NULL, old_dentry); release_dentry_name_snapshot(&old_name); Loading fs/namei.c +1 −1 Original line number Diff line number Diff line Loading @@ -4498,7 +4498,7 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, inode_unlock(target); dput(new_dentry); if (!error) { fsnotify_move(old_dir, new_dir, old_name.name, is_dir, fsnotify_move(old_dir, new_dir, old_name.name.name, is_dir, !(flags & RENAME_EXCHANGE) ? target : NULL, old_dentry); if (flags & RENAME_EXCHANGE) { fsnotify_move(new_dir, old_dir, old_dentry->d_name.name, Loading fs/notify/fsnotify.c +2 −2 Original line number Diff line number Diff line Loading @@ -179,10 +179,10 @@ int __fsnotify_parent(const struct path *path, struct dentry *dentry, __u32 mask take_dentry_name_snapshot(&name, dentry); if (path) ret = fsnotify(p_inode, mask, path, FSNOTIFY_EVENT_PATH, name.name, 0); name.name.name, 0); else ret = fsnotify(p_inode, mask, dentry->d_inode, FSNOTIFY_EVENT_INODE, name.name, 0); name.name.name, 0); release_dentry_name_snapshot(&name); } Loading fs/overlayfs/export.c +1 −1 Original line number Diff line number Diff line Loading @@ -398,7 +398,7 @@ static struct dentry *ovl_lookup_real_one(struct dentry *connected, * pointer because we hold no lock on the real dentry. */ take_dentry_name_snapshot(&name, real); this = lookup_one_len(name.name, connected, strlen(name.name)); this = lookup_one_len(name.name.name, connected, name.name.len); err = PTR_ERR(this); if (IS_ERR(this)) { goto fail; Loading Loading
fs/dcache.c +6 −8 Original line number Diff line number Diff line Loading @@ -284,25 +284,23 @@ static inline int dname_external(const struct dentry *dentry) void take_dentry_name_snapshot(struct name_snapshot *name, struct dentry *dentry) { spin_lock(&dentry->d_lock); name->name = dentry->d_name; if (unlikely(dname_external(dentry))) { struct external_name *p = external_name(dentry); atomic_inc(&p->u.count); spin_unlock(&dentry->d_lock); name->name = p->name; atomic_inc(&external_name(dentry)->u.count); } else { memcpy(name->inline_name, dentry->d_iname, dentry->d_name.len + 1); spin_unlock(&dentry->d_lock); name->name = name->inline_name; name->name.name = name->inline_name; } spin_unlock(&dentry->d_lock); } EXPORT_SYMBOL(take_dentry_name_snapshot); void release_dentry_name_snapshot(struct name_snapshot *name) { if (unlikely(name->name != name->inline_name)) { if (unlikely(name->name.name != name->inline_name)) { struct external_name *p; p = container_of(name->name, struct external_name, name[0]); p = container_of(name->name.name, struct external_name, name[0]); if (unlikely(atomic_dec_and_test(&p->u.count))) kfree_rcu(p, u.head); } Loading
fs/debugfs/inode.c +1 −1 Original line number Diff line number Diff line Loading @@ -819,7 +819,7 @@ struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry, goto exit; } d_move(old_dentry, dentry); fsnotify_move(d_inode(old_dir), d_inode(new_dir), old_name.name, fsnotify_move(d_inode(old_dir), d_inode(new_dir), old_name.name.name, d_is_dir(old_dentry), NULL, old_dentry); release_dentry_name_snapshot(&old_name); Loading
fs/namei.c +1 −1 Original line number Diff line number Diff line Loading @@ -4498,7 +4498,7 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, inode_unlock(target); dput(new_dentry); if (!error) { fsnotify_move(old_dir, new_dir, old_name.name, is_dir, fsnotify_move(old_dir, new_dir, old_name.name.name, is_dir, !(flags & RENAME_EXCHANGE) ? target : NULL, old_dentry); if (flags & RENAME_EXCHANGE) { fsnotify_move(new_dir, old_dir, old_dentry->d_name.name, Loading
fs/notify/fsnotify.c +2 −2 Original line number Diff line number Diff line Loading @@ -179,10 +179,10 @@ int __fsnotify_parent(const struct path *path, struct dentry *dentry, __u32 mask take_dentry_name_snapshot(&name, dentry); if (path) ret = fsnotify(p_inode, mask, path, FSNOTIFY_EVENT_PATH, name.name, 0); name.name.name, 0); else ret = fsnotify(p_inode, mask, dentry->d_inode, FSNOTIFY_EVENT_INODE, name.name, 0); name.name.name, 0); release_dentry_name_snapshot(&name); } Loading
fs/overlayfs/export.c +1 −1 Original line number Diff line number Diff line Loading @@ -398,7 +398,7 @@ static struct dentry *ovl_lookup_real_one(struct dentry *connected, * pointer because we hold no lock on the real dentry. */ take_dentry_name_snapshot(&name, real); this = lookup_one_len(name.name, connected, strlen(name.name)); this = lookup_one_len(name.name.name, connected, name.name.len); err = PTR_ERR(this); if (IS_ERR(this)) { goto fail; Loading