mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
ovl_lookup_real_one(): don't bother with strlen()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
1d8b29fdb7
commit
230c6402b1
7 changed files with 13 additions and 15 deletions
14
fs/dcache.c
14
fs/dcache.c
|
@ -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)
|
void take_dentry_name_snapshot(struct name_snapshot *name, struct dentry *dentry)
|
||||||
{
|
{
|
||||||
spin_lock(&dentry->d_lock);
|
spin_lock(&dentry->d_lock);
|
||||||
|
name->name = dentry->d_name;
|
||||||
if (unlikely(dname_external(dentry))) {
|
if (unlikely(dname_external(dentry))) {
|
||||||
struct external_name *p = external_name(dentry);
|
atomic_inc(&external_name(dentry)->u.count);
|
||||||
atomic_inc(&p->u.count);
|
|
||||||
spin_unlock(&dentry->d_lock);
|
|
||||||
name->name = p->name;
|
|
||||||
} else {
|
} else {
|
||||||
memcpy(name->inline_name, dentry->d_iname,
|
memcpy(name->inline_name, dentry->d_iname,
|
||||||
dentry->d_name.len + 1);
|
dentry->d_name.len + 1);
|
||||||
spin_unlock(&dentry->d_lock);
|
name->name.name = name->inline_name;
|
||||||
name->name = name->inline_name;
|
|
||||||
}
|
}
|
||||||
|
spin_unlock(&dentry->d_lock);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(take_dentry_name_snapshot);
|
EXPORT_SYMBOL(take_dentry_name_snapshot);
|
||||||
|
|
||||||
void release_dentry_name_snapshot(struct name_snapshot *name)
|
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;
|
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)))
|
if (unlikely(atomic_dec_and_test(&p->u.count)))
|
||||||
kfree_rcu(p, u.head);
|
kfree_rcu(p, u.head);
|
||||||
}
|
}
|
||||||
|
|
|
@ -819,7 +819,7 @@ struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
d_move(old_dentry, dentry);
|
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),
|
d_is_dir(old_dentry),
|
||||||
NULL, old_dentry);
|
NULL, old_dentry);
|
||||||
release_dentry_name_snapshot(&old_name);
|
release_dentry_name_snapshot(&old_name);
|
||||||
|
|
|
@ -4498,7 +4498,7 @@ out:
|
||||||
inode_unlock(target);
|
inode_unlock(target);
|
||||||
dput(new_dentry);
|
dput(new_dentry);
|
||||||
if (!error) {
|
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);
|
!(flags & RENAME_EXCHANGE) ? target : NULL, old_dentry);
|
||||||
if (flags & RENAME_EXCHANGE) {
|
if (flags & RENAME_EXCHANGE) {
|
||||||
fsnotify_move(new_dir, old_dir, old_dentry->d_name.name,
|
fsnotify_move(new_dir, old_dir, old_dentry->d_name.name,
|
||||||
|
|
|
@ -179,10 +179,10 @@ int __fsnotify_parent(const struct path *path, struct dentry *dentry, __u32 mask
|
||||||
take_dentry_name_snapshot(&name, dentry);
|
take_dentry_name_snapshot(&name, dentry);
|
||||||
if (path)
|
if (path)
|
||||||
ret = fsnotify(p_inode, mask, path, FSNOTIFY_EVENT_PATH,
|
ret = fsnotify(p_inode, mask, path, FSNOTIFY_EVENT_PATH,
|
||||||
name.name, 0);
|
name.name.name, 0);
|
||||||
else
|
else
|
||||||
ret = fsnotify(p_inode, mask, dentry->d_inode, FSNOTIFY_EVENT_INODE,
|
ret = fsnotify(p_inode, mask, dentry->d_inode, FSNOTIFY_EVENT_INODE,
|
||||||
name.name, 0);
|
name.name.name, 0);
|
||||||
release_dentry_name_snapshot(&name);
|
release_dentry_name_snapshot(&name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -398,7 +398,7 @@ static struct dentry *ovl_lookup_real_one(struct dentry *connected,
|
||||||
* pointer because we hold no lock on the real dentry.
|
* pointer because we hold no lock on the real dentry.
|
||||||
*/
|
*/
|
||||||
take_dentry_name_snapshot(&name, real);
|
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);
|
err = PTR_ERR(this);
|
||||||
if (IS_ERR(this)) {
|
if (IS_ERR(this)) {
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
|
@ -593,7 +593,7 @@ static inline struct inode *d_real_inode(const struct dentry *dentry)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct name_snapshot {
|
struct name_snapshot {
|
||||||
const unsigned char *name;
|
struct qstr name;
|
||||||
unsigned char inline_name[DNAME_INLINE_LEN];
|
unsigned char inline_name[DNAME_INLINE_LEN];
|
||||||
};
|
};
|
||||||
void take_dentry_name_snapshot(struct name_snapshot *, struct dentry *);
|
void take_dentry_name_snapshot(struct name_snapshot *, struct dentry *);
|
||||||
|
|
|
@ -178,7 +178,7 @@ static inline void fsnotify_nameremove(struct dentry *dentry, int isdir)
|
||||||
take_dentry_name_snapshot(&name, dentry);
|
take_dentry_name_snapshot(&name, dentry);
|
||||||
|
|
||||||
fsnotify(d_inode(parent), mask, d_inode(dentry), FSNOTIFY_EVENT_INODE,
|
fsnotify(d_inode(parent), mask, d_inode(dentry), FSNOTIFY_EVENT_INODE,
|
||||||
name.name, 0);
|
name.name.name, 0);
|
||||||
|
|
||||||
release_dentry_name_snapshot(&name);
|
release_dentry_name_snapshot(&name);
|
||||||
dput(parent);
|
dput(parent);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue