]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ovl_lookup_real_one(): don't bother with strlen()
authorAl Viro <viro@zeniv.linux.org.uk>
Fri, 26 Apr 2019 17:07:27 +0000 (13:07 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 26 Apr 2019 17:13:33 +0000 (13:13 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/dcache.c
fs/debugfs/inode.c
fs/namei.c
fs/notify/fsnotify.c
fs/overlayfs/export.c
include/linux/dcache.h
include/linux/fsnotify.h

index 6dd58ced8236ce2d0c367a37e559c4e07e9e9172..982d97bbb72cad7f8416d1814f42254c5cd0919d 100644 (file)
@@ -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);
        }
index 95b5e78c22b1e98811d3aca9c64c2c5deb54c6fe..f7064048d27171e744d1945ee3876a8a4bf0451f 100644 (file)
@@ -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);
index dede0147b3f6ec1f011c306f978b49926efb2b35..c96713077326321d19717bea5687955cf9dba895 100644 (file)
@@ -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,
index df06f3da166c1e64160e0d7c90811a17863d9fbd..fb22f76329ae92ecf6d88d6fef17abf501a270c4 100644 (file)
@@ -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);
        }
 
index 54e5d17d7f3e5c91488b6ec4cab54c8177850fd3..cc1c9e5606baea6217485fe08a13c878f0826ad5 100644 (file)
@@ -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;
index 2f044e232e1bde14a1e9bc6534e3b6baeddabe04..73c3a8f9058096f76a732aa2ba26d3bfe1e6923a 100644 (file)
@@ -593,7 +593,7 @@ static inline struct inode *d_real_inode(const struct dentry *dentry)
 }
 
 struct name_snapshot {
-       const unsigned char *name;
+       struct qstr name;
        unsigned char inline_name[DNAME_INLINE_LEN];
 };
 void take_dentry_name_snapshot(struct name_snapshot *, struct dentry *);
index 09587e2860b53e5db5d280925eaebf8f2f421431..e09cfff69bb241426e6c59777974fd9e032b8dad 100644 (file)
@@ -178,7 +178,7 @@ static inline void fsnotify_nameremove(struct dentry *dentry, int isdir)
        take_dentry_name_snapshot(&name, dentry);
 
        fsnotify(d_inode(parent), mask, d_inode(dentry), FSNOTIFY_EVENT_INODE,
-                name.name, 0);
+                name.name.name, 0);
 
        release_dentry_name_snapshot(&name);
        dput(parent);