Skip to content

Commit 9ec3a64

Browse files
committed
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull fourth vfs update from Al Viro: "d_inode() annotations from David Howells (sat in for-next since before the beginning of merge window) + four assorted fixes" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: RCU pathwalk breakage when running into a symlink overmounting something fix I_DIO_WAKEUP definition direct-io: only inc/dec inode->i_dio_count for file systems fs/9p: fix readdir() VFS: assorted d_backing_inode() annotations VFS: fs/inode.c helpers: d_inode() annotations VFS: fs/cachefiles: d_backing_inode() annotations VFS: fs library helpers: d_inode() annotations VFS: assorted weird filesystems: d_inode() annotations VFS: normal filesystems (and lustre): d_inode() annotations VFS: security/: d_inode() annotations VFS: security/: d_backing_inode() annotations VFS: net/: d_inode() annotations VFS: net/unix: d_backing_inode() annotations VFS: kernel/: d_inode() annotations VFS: audit: d_backing_inode() annotations VFS: Fix up some ->d_inode accesses in the chelsio driver VFS: Cachefiles should perform fs modifications on the top layer only VFS: AF_UNIX sockets should call mknod on the top layer only
2 parents c8b3fd0 + 3cab989 commit 9ec3a64

File tree

343 files changed

+1877
-1867
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

343 files changed

+1877
-1867
lines changed

arch/ia64/kernel/perfmon.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2159,7 +2159,7 @@ static const struct file_operations pfm_file_ops = {
21592159
static char *pfmfs_dname(struct dentry *dentry, char *buffer, int buflen)
21602160
{
21612161
return dynamic_dname(dentry, buffer, buflen, "pfm:[%lu]",
2162-
dentry->d_inode->i_ino);
2162+
d_inode(dentry)->i_ino);
21632163
}
21642164

21652165
static const struct dentry_operations pfmfs_dentry_operations = {

arch/powerpc/platforms/cell/spufs/inode.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ spufs_new_inode(struct super_block *sb, umode_t mode)
111111
static int
112112
spufs_setattr(struct dentry *dentry, struct iattr *attr)
113113
{
114-
struct inode *inode = dentry->d_inode;
114+
struct inode *inode = d_inode(dentry);
115115

116116
if ((attr->ia_valid & ATTR_SIZE) &&
117117
(attr->ia_size != inode->i_size))
@@ -163,14 +163,14 @@ static void spufs_prune_dir(struct dentry *dir)
163163
{
164164
struct dentry *dentry, *tmp;
165165

166-
mutex_lock(&dir->d_inode->i_mutex);
166+
mutex_lock(&d_inode(dir)->i_mutex);
167167
list_for_each_entry_safe(dentry, tmp, &dir->d_subdirs, d_child) {
168168
spin_lock(&dentry->d_lock);
169-
if (!(d_unhashed(dentry)) && dentry->d_inode) {
169+
if (!(d_unhashed(dentry)) && d_really_is_positive(dentry)) {
170170
dget_dlock(dentry);
171171
__d_drop(dentry);
172172
spin_unlock(&dentry->d_lock);
173-
simple_unlink(dir->d_inode, dentry);
173+
simple_unlink(d_inode(dir), dentry);
174174
/* XXX: what was dcache_lock protecting here? Other
175175
* filesystems (IB, configfs) release dcache_lock
176176
* before unlink */
@@ -180,7 +180,7 @@ static void spufs_prune_dir(struct dentry *dir)
180180
}
181181
}
182182
shrink_dcache_parent(dir);
183-
mutex_unlock(&dir->d_inode->i_mutex);
183+
mutex_unlock(&d_inode(dir)->i_mutex);
184184
}
185185

186186
/* Caller must hold parent->i_mutex */
@@ -192,7 +192,7 @@ static int spufs_rmdir(struct inode *parent, struct dentry *dir)
192192
d_drop(dir);
193193
res = simple_rmdir(parent, dir);
194194
/* We have to give up the mm_struct */
195-
spu_forget(SPUFS_I(dir->d_inode)->i_ctx);
195+
spu_forget(SPUFS_I(d_inode(dir))->i_ctx);
196196
return res;
197197
}
198198

@@ -222,8 +222,8 @@ static int spufs_dir_close(struct inode *inode, struct file *file)
222222
int ret;
223223

224224
dir = file->f_path.dentry;
225-
parent = dir->d_parent->d_inode;
226-
ctx = SPUFS_I(dir->d_inode)->i_ctx;
225+
parent = d_inode(dir->d_parent);
226+
ctx = SPUFS_I(d_inode(dir))->i_ctx;
227227

228228
mutex_lock_nested(&parent->i_mutex, I_MUTEX_PARENT);
229229
ret = spufs_rmdir(parent, dir);
@@ -460,7 +460,7 @@ spufs_create_context(struct inode *inode, struct dentry *dentry,
460460
goto out_aff_unlock;
461461

462462
if (affinity) {
463-
spufs_set_affinity(flags, SPUFS_I(dentry->d_inode)->i_ctx,
463+
spufs_set_affinity(flags, SPUFS_I(d_inode(dentry))->i_ctx,
464464
neighbor);
465465
if (neighbor)
466466
put_spu_context(neighbor);
@@ -504,7 +504,7 @@ spufs_mkgang(struct inode *dir, struct dentry *dentry, umode_t mode)
504504

505505
d_instantiate(dentry, inode);
506506
inc_nlink(dir);
507-
inc_nlink(dentry->d_inode);
507+
inc_nlink(d_inode(dentry));
508508
return ret;
509509

510510
out_iput:
@@ -561,7 +561,7 @@ static struct file_system_type spufs_type;
561561
long spufs_create(struct path *path, struct dentry *dentry,
562562
unsigned int flags, umode_t mode, struct file *filp)
563563
{
564-
struct inode *dir = path->dentry->d_inode;
564+
struct inode *dir = d_inode(path->dentry);
565565
int ret;
566566

567567
/* check if we are on spufs */

arch/s390/hypfs/inode.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static struct dentry *hypfs_last_dentry;
4848
static void hypfs_update_update(struct super_block *sb)
4949
{
5050
struct hypfs_sb_info *sb_info = sb->s_fs_info;
51-
struct inode *inode = sb_info->update_file->d_inode;
51+
struct inode *inode = d_inode(sb_info->update_file);
5252

5353
sb_info->last_update = get_seconds();
5454
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
@@ -64,24 +64,24 @@ static void hypfs_add_dentry(struct dentry *dentry)
6464

6565
static inline int hypfs_positive(struct dentry *dentry)
6666
{
67-
return dentry->d_inode && !d_unhashed(dentry);
67+
return d_really_is_positive(dentry) && !d_unhashed(dentry);
6868
}
6969

7070
static void hypfs_remove(struct dentry *dentry)
7171
{
7272
struct dentry *parent;
7373

7474
parent = dentry->d_parent;
75-
mutex_lock(&parent->d_inode->i_mutex);
75+
mutex_lock(&d_inode(parent)->i_mutex);
7676
if (hypfs_positive(dentry)) {
7777
if (d_is_dir(dentry))
78-
simple_rmdir(parent->d_inode, dentry);
78+
simple_rmdir(d_inode(parent), dentry);
7979
else
80-
simple_unlink(parent->d_inode, dentry);
80+
simple_unlink(d_inode(parent), dentry);
8181
}
8282
d_delete(dentry);
8383
dput(dentry);
84-
mutex_unlock(&parent->d_inode->i_mutex);
84+
mutex_unlock(&d_inode(parent)->i_mutex);
8585
}
8686

8787
static void hypfs_delete_tree(struct dentry *root)
@@ -336,7 +336,7 @@ static struct dentry *hypfs_create_file(struct dentry *parent, const char *name,
336336
struct dentry *dentry;
337337
struct inode *inode;
338338

339-
mutex_lock(&parent->d_inode->i_mutex);
339+
mutex_lock(&d_inode(parent)->i_mutex);
340340
dentry = lookup_one_len(name, parent, strlen(name));
341341
if (IS_ERR(dentry)) {
342342
dentry = ERR_PTR(-ENOMEM);
@@ -357,14 +357,14 @@ static struct dentry *hypfs_create_file(struct dentry *parent, const char *name,
357357
} else if (S_ISDIR(mode)) {
358358
inode->i_op = &simple_dir_inode_operations;
359359
inode->i_fop = &simple_dir_operations;
360-
inc_nlink(parent->d_inode);
360+
inc_nlink(d_inode(parent));
361361
} else
362362
BUG();
363363
inode->i_private = data;
364364
d_instantiate(dentry, inode);
365365
dget(dentry);
366366
fail:
367-
mutex_unlock(&parent->d_inode->i_mutex);
367+
mutex_unlock(&d_inode(parent)->i_mutex);
368368
return dentry;
369369
}
370370

arch/x86/kvm/assigned-dev.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -666,7 +666,7 @@ static int probe_sysfs_permissions(struct pci_dev *dev)
666666
if (r)
667667
return r;
668668

669-
inode = path.dentry->d_inode;
669+
inode = d_backing_inode(path.dentry);
670670

671671
r = inode_permission(inode, MAY_READ | MAY_WRITE | MAY_ACCESS);
672672
path_put(&path);

drivers/base/devtmpfs.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,10 @@ static int dev_mkdir(const char *name, umode_t mode)
157157
if (IS_ERR(dentry))
158158
return PTR_ERR(dentry);
159159

160-
err = vfs_mkdir(path.dentry->d_inode, dentry, mode);
160+
err = vfs_mkdir(d_inode(path.dentry), dentry, mode);
161161
if (!err)
162162
/* mark as kernel-created inode */
163-
dentry->d_inode->i_private = &thread;
163+
d_inode(dentry)->i_private = &thread;
164164
done_path_create(&path, dentry);
165165
return err;
166166
}
@@ -207,20 +207,20 @@ static int handle_create(const char *nodename, umode_t mode, kuid_t uid,
207207
if (IS_ERR(dentry))
208208
return PTR_ERR(dentry);
209209

210-
err = vfs_mknod(path.dentry->d_inode, dentry, mode, dev->devt);
210+
err = vfs_mknod(d_inode(path.dentry), dentry, mode, dev->devt);
211211
if (!err) {
212212
struct iattr newattrs;
213213

214214
newattrs.ia_mode = mode;
215215
newattrs.ia_uid = uid;
216216
newattrs.ia_gid = gid;
217217
newattrs.ia_valid = ATTR_MODE|ATTR_UID|ATTR_GID;
218-
mutex_lock(&dentry->d_inode->i_mutex);
218+
mutex_lock(&d_inode(dentry)->i_mutex);
219219
notify_change(dentry, &newattrs, NULL);
220-
mutex_unlock(&dentry->d_inode->i_mutex);
220+
mutex_unlock(&d_inode(dentry)->i_mutex);
221221

222222
/* mark as kernel-created inode */
223-
dentry->d_inode->i_private = &thread;
223+
d_inode(dentry)->i_private = &thread;
224224
}
225225
done_path_create(&path, dentry);
226226
return err;
@@ -235,16 +235,16 @@ static int dev_rmdir(const char *name)
235235
dentry = kern_path_locked(name, &parent);
236236
if (IS_ERR(dentry))
237237
return PTR_ERR(dentry);
238-
if (dentry->d_inode) {
239-
if (dentry->d_inode->i_private == &thread)
240-
err = vfs_rmdir(parent.dentry->d_inode, dentry);
238+
if (d_really_is_positive(dentry)) {
239+
if (d_inode(dentry)->i_private == &thread)
240+
err = vfs_rmdir(d_inode(parent.dentry), dentry);
241241
else
242242
err = -EPERM;
243243
} else {
244244
err = -ENOENT;
245245
}
246246
dput(dentry);
247-
mutex_unlock(&parent.dentry->d_inode->i_mutex);
247+
mutex_unlock(&d_inode(parent.dentry)->i_mutex);
248248
path_put(&parent);
249249
return err;
250250
}
@@ -306,11 +306,11 @@ static int handle_remove(const char *nodename, struct device *dev)
306306
if (IS_ERR(dentry))
307307
return PTR_ERR(dentry);
308308

309-
if (dentry->d_inode) {
309+
if (d_really_is_positive(dentry)) {
310310
struct kstat stat;
311311
struct path p = {.mnt = parent.mnt, .dentry = dentry};
312312
err = vfs_getattr(&p, &stat);
313-
if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {
313+
if (!err && dev_mynode(dev, d_inode(dentry), &stat)) {
314314
struct iattr newattrs;
315315
/*
316316
* before unlinking this node, reset permissions
@@ -321,18 +321,18 @@ static int handle_remove(const char *nodename, struct device *dev)
321321
newattrs.ia_mode = stat.mode & ~0777;
322322
newattrs.ia_valid =
323323
ATTR_UID|ATTR_GID|ATTR_MODE;
324-
mutex_lock(&dentry->d_inode->i_mutex);
324+
mutex_lock(&d_inode(dentry)->i_mutex);
325325
notify_change(dentry, &newattrs, NULL);
326-
mutex_unlock(&dentry->d_inode->i_mutex);
327-
err = vfs_unlink(parent.dentry->d_inode, dentry, NULL);
326+
mutex_unlock(&d_inode(dentry)->i_mutex);
327+
err = vfs_unlink(d_inode(parent.dentry), dentry, NULL);
328328
if (!err || err == -ENOENT)
329329
deleted = 1;
330330
}
331331
} else {
332332
err = -ENOENT;
333333
}
334334
dput(dentry);
335-
mutex_unlock(&parent.dentry->d_inode->i_mutex);
335+
mutex_unlock(&d_inode(parent.dentry)->i_mutex);
336336

337337
path_put(&parent);
338338
if (deleted && strchr(nodename, '/'))

drivers/block/drbd/drbd_debugfs.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ static int in_flight_summary_show(struct seq_file *m, void *pos)
424424
* So we have our own inline version of it above. :-( */
425425
static inline int debugfs_positive(struct dentry *dentry)
426426
{
427-
return dentry->d_inode && !d_unhashed(dentry);
427+
return d_really_is_positive(dentry) && !d_unhashed(dentry);
428428
}
429429

430430
/* make sure at *open* time that the respective object won't go away. */
@@ -439,15 +439,15 @@ static int drbd_single_open(struct file *file, int (*show)(struct seq_file *, vo
439439
* or has debugfs_remove() already been called? */
440440
parent = file->f_path.dentry->d_parent;
441441
/* not sure if this can happen: */
442-
if (!parent || !parent->d_inode)
442+
if (!parent || d_really_is_negative(parent))
443443
goto out;
444444
/* serialize with d_delete() */
445-
mutex_lock(&parent->d_inode->i_mutex);
445+
mutex_lock(&d_inode(parent)->i_mutex);
446446
/* Make sure the object is still alive */
447447
if (debugfs_positive(file->f_path.dentry)
448448
&& kref_get_unless_zero(kref))
449449
ret = 0;
450-
mutex_unlock(&parent->d_inode->i_mutex);
450+
mutex_unlock(&d_inode(parent)->i_mutex);
451451
if (!ret) {
452452
ret = single_open(file, show, data);
453453
if (ret)

drivers/infiniband/hw/ipath/ipath_fs.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,14 @@ static int create_file(const char *name, umode_t mode,
8282
{
8383
int error;
8484

85-
mutex_lock(&parent->d_inode->i_mutex);
85+
mutex_lock(&d_inode(parent)->i_mutex);
8686
*dentry = lookup_one_len(name, parent, strlen(name));
8787
if (!IS_ERR(*dentry))
88-
error = ipathfs_mknod(parent->d_inode, *dentry,
88+
error = ipathfs_mknod(d_inode(parent), *dentry,
8989
mode, fops, data);
9090
else
9191
error = PTR_ERR(*dentry);
92-
mutex_unlock(&parent->d_inode->i_mutex);
92+
mutex_unlock(&d_inode(parent)->i_mutex);
9393

9494
return error;
9595
}
@@ -277,11 +277,11 @@ static int remove_file(struct dentry *parent, char *name)
277277
}
278278

279279
spin_lock(&tmp->d_lock);
280-
if (!d_unhashed(tmp) && tmp->d_inode) {
280+
if (!d_unhashed(tmp) && d_really_is_positive(tmp)) {
281281
dget_dlock(tmp);
282282
__d_drop(tmp);
283283
spin_unlock(&tmp->d_lock);
284-
simple_unlink(parent->d_inode, tmp);
284+
simple_unlink(d_inode(parent), tmp);
285285
} else
286286
spin_unlock(&tmp->d_lock);
287287

@@ -302,7 +302,7 @@ static int remove_device_files(struct super_block *sb,
302302
int ret;
303303

304304
root = dget(sb->s_root);
305-
mutex_lock(&root->d_inode->i_mutex);
305+
mutex_lock(&d_inode(root)->i_mutex);
306306
snprintf(unit, sizeof unit, "%02d", dd->ipath_unit);
307307
dir = lookup_one_len(unit, root, strlen(unit));
308308

@@ -315,10 +315,10 @@ static int remove_device_files(struct super_block *sb,
315315
remove_file(dir, "flash");
316316
remove_file(dir, "atomic_counters");
317317
d_delete(dir);
318-
ret = simple_rmdir(root->d_inode, dir);
318+
ret = simple_rmdir(d_inode(root), dir);
319319

320320
bail:
321-
mutex_unlock(&root->d_inode->i_mutex);
321+
mutex_unlock(&d_inode(root)->i_mutex);
322322
dput(root);
323323
return ret;
324324
}

0 commit comments

Comments
 (0)