Skip to content

Commit 9883d18

Browse files
author
Al Viro
committed
namei: move saved_nd pointer into struct nameidata
these guys are always declared next to each other; might as well put the former (pointer to previous instance) into the latter and simplify the calling conventions for {set,restore}_nameidata() Signed-off-by: Al Viro <[email protected]>
1 parent 520ae68 commit 9883d18

File tree

1 file changed

+24
-22
lines changed

1 file changed

+24
-22
lines changed

fs/namei.c

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -498,10 +498,8 @@ struct nameidata {
498498
struct qstr last;
499499
struct path root;
500500
struct inode *inode; /* path.dentry.d_inode */
501-
struct filename *name;
502-
int dfd;
503501
unsigned int flags;
504-
unsigned seq, m_seq, root_seq;
502+
unsigned seq, m_seq;
505503
int last_type;
506504
unsigned depth;
507505
int total_link_count;
@@ -512,23 +510,26 @@ struct nameidata {
512510
struct inode *inode;
513511
unsigned seq;
514512
} *stack, internal[EMBEDDED_LEVELS];
513+
struct filename *name;
514+
struct nameidata *saved;
515+
unsigned root_seq;
516+
int dfd;
515517
};
516518

517-
static struct nameidata *set_nameidata(struct nameidata *p, int dfd,
518-
struct filename *name)
519+
static void set_nameidata(struct nameidata *p, int dfd, struct filename *name)
519520
{
520521
struct nameidata *old = current->nameidata;
521522
p->stack = p->internal;
522523
p->dfd = dfd;
523524
p->name = name;
524525
p->total_link_count = old ? old->total_link_count : 0;
526+
p->saved = old;
525527
current->nameidata = p;
526-
return old;
527528
}
528529

529-
static void restore_nameidata(struct nameidata *old)
530+
static void restore_nameidata(void)
530531
{
531-
struct nameidata *now = current->nameidata;
532+
struct nameidata *now = current->nameidata, *old = now->saved;
532533

533534
current->nameidata = old;
534535
if (old)
@@ -2120,14 +2121,14 @@ static int filename_lookup(int dfd, struct filename *name, unsigned flags,
21202121
struct path *path, struct path *root)
21212122
{
21222123
int retval;
2123-
struct nameidata nd, *saved_nd;
2124+
struct nameidata nd;
21242125
if (IS_ERR(name))
21252126
return PTR_ERR(name);
2126-
saved_nd = set_nameidata(&nd, dfd, name);
21272127
if (unlikely(root)) {
21282128
nd.root = *root;
21292129
flags |= LOOKUP_ROOT;
21302130
}
2131+
set_nameidata(&nd, dfd, name);
21312132
retval = path_lookupat(&nd, flags | LOOKUP_RCU, path);
21322133
if (unlikely(retval == -ECHILD))
21332134
retval = path_lookupat(&nd, flags, path);
@@ -2136,7 +2137,7 @@ static int filename_lookup(int dfd, struct filename *name, unsigned flags,
21362137

21372138
if (likely(!retval))
21382139
audit_inode(name, path->dentry, flags & LOOKUP_PARENT);
2139-
restore_nameidata(saved_nd);
2140+
restore_nameidata();
21402141
putname(name);
21412142
return retval;
21422143
}
@@ -2166,11 +2167,11 @@ static struct filename *filename_parentat(int dfd, struct filename *name,
21662167
struct qstr *last, int *type)
21672168
{
21682169
int retval;
2169-
struct nameidata nd, *saved_nd;
2170+
struct nameidata nd;
21702171

21712172
if (IS_ERR(name))
21722173
return name;
2173-
saved_nd = set_nameidata(&nd, dfd, name);
2174+
set_nameidata(&nd, dfd, name);
21742175
retval = path_parentat(&nd, flags | LOOKUP_RCU, parent);
21752176
if (unlikely(retval == -ECHILD))
21762177
retval = path_parentat(&nd, flags, parent);
@@ -2184,7 +2185,7 @@ static struct filename *filename_parentat(int dfd, struct filename *name,
21842185
putname(name);
21852186
name = ERR_PTR(retval);
21862187
}
2187-
restore_nameidata(saved_nd);
2188+
restore_nameidata();
21882189
return name;
21892190
}
21902191

@@ -2445,19 +2446,19 @@ static int
24452446
filename_mountpoint(int dfd, struct filename *name, struct path *path,
24462447
unsigned int flags)
24472448
{
2448-
struct nameidata nd, *saved;
2449+
struct nameidata nd;
24492450
int error;
24502451
if (IS_ERR(name))
24512452
return PTR_ERR(name);
2452-
saved = set_nameidata(&nd, dfd, name);
2453+
set_nameidata(&nd, dfd, name);
24532454
error = path_mountpoint(&nd, flags | LOOKUP_RCU, path);
24542455
if (unlikely(error == -ECHILD))
24552456
error = path_mountpoint(&nd, flags, path);
24562457
if (unlikely(error == -ESTALE))
24572458
error = path_mountpoint(&nd, flags | LOOKUP_REVAL, path);
24582459
if (likely(!error))
24592460
audit_inode(name, path->dentry, 0);
2460-
restore_nameidata(saved);
2461+
restore_nameidata();
24612462
putname(name);
24622463
return error;
24632464
}
@@ -3327,23 +3328,24 @@ static struct file *path_openat(struct nameidata *nd,
33273328
struct file *do_filp_open(int dfd, struct filename *pathname,
33283329
const struct open_flags *op)
33293330
{
3330-
struct nameidata nd, *saved_nd = set_nameidata(&nd, dfd, pathname);
3331+
struct nameidata nd;
33313332
int flags = op->lookup_flags;
33323333
struct file *filp;
33333334

3335+
set_nameidata(&nd, dfd, pathname);
33343336
filp = path_openat(&nd, op, flags | LOOKUP_RCU);
33353337
if (unlikely(filp == ERR_PTR(-ECHILD)))
33363338
filp = path_openat(&nd, op, flags);
33373339
if (unlikely(filp == ERR_PTR(-ESTALE)))
33383340
filp = path_openat(&nd, op, flags | LOOKUP_REVAL);
3339-
restore_nameidata(saved_nd);
3341+
restore_nameidata();
33403342
return filp;
33413343
}
33423344

33433345
struct file *do_file_open_root(struct dentry *dentry, struct vfsmount *mnt,
33443346
const char *name, const struct open_flags *op)
33453347
{
3346-
struct nameidata nd, *saved_nd;
3348+
struct nameidata nd;
33473349
struct file *file;
33483350
struct filename *filename;
33493351
int flags = op->lookup_flags | LOOKUP_ROOT;
@@ -3358,13 +3360,13 @@ struct file *do_file_open_root(struct dentry *dentry, struct vfsmount *mnt,
33583360
if (unlikely(IS_ERR(filename)))
33593361
return ERR_CAST(filename);
33603362

3361-
saved_nd = set_nameidata(&nd, -1, filename);
3363+
set_nameidata(&nd, -1, filename);
33623364
file = path_openat(&nd, op, flags | LOOKUP_RCU);
33633365
if (unlikely(file == ERR_PTR(-ECHILD)))
33643366
file = path_openat(&nd, op, flags);
33653367
if (unlikely(file == ERR_PTR(-ESTALE)))
33663368
file = path_openat(&nd, op, flags | LOOKUP_REVAL);
3367-
restore_nameidata(saved_nd);
3369+
restore_nameidata();
33683370
putname(filename);
33693371
return file;
33703372
}

0 commit comments

Comments
 (0)