You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
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
This commit is contained in:
@@ -2159,7 +2159,7 @@ static const struct file_operations pfm_file_ops = {
|
||||
static char *pfmfs_dname(struct dentry *dentry, char *buffer, int buflen)
|
||||
{
|
||||
return dynamic_dname(dentry, buffer, buflen, "pfm:[%lu]",
|
||||
dentry->d_inode->i_ino);
|
||||
d_inode(dentry)->i_ino);
|
||||
}
|
||||
|
||||
static const struct dentry_operations pfmfs_dentry_operations = {
|
||||
|
||||
@@ -111,7 +111,7 @@ out:
|
||||
static int
|
||||
spufs_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
if ((attr->ia_valid & ATTR_SIZE) &&
|
||||
(attr->ia_size != inode->i_size))
|
||||
@@ -163,14 +163,14 @@ static void spufs_prune_dir(struct dentry *dir)
|
||||
{
|
||||
struct dentry *dentry, *tmp;
|
||||
|
||||
mutex_lock(&dir->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dir)->i_mutex);
|
||||
list_for_each_entry_safe(dentry, tmp, &dir->d_subdirs, d_child) {
|
||||
spin_lock(&dentry->d_lock);
|
||||
if (!(d_unhashed(dentry)) && dentry->d_inode) {
|
||||
if (!(d_unhashed(dentry)) && d_really_is_positive(dentry)) {
|
||||
dget_dlock(dentry);
|
||||
__d_drop(dentry);
|
||||
spin_unlock(&dentry->d_lock);
|
||||
simple_unlink(dir->d_inode, dentry);
|
||||
simple_unlink(d_inode(dir), dentry);
|
||||
/* XXX: what was dcache_lock protecting here? Other
|
||||
* filesystems (IB, configfs) release dcache_lock
|
||||
* before unlink */
|
||||
@@ -180,7 +180,7 @@ static void spufs_prune_dir(struct dentry *dir)
|
||||
}
|
||||
}
|
||||
shrink_dcache_parent(dir);
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
}
|
||||
|
||||
/* Caller must hold parent->i_mutex */
|
||||
@@ -192,7 +192,7 @@ static int spufs_rmdir(struct inode *parent, struct dentry *dir)
|
||||
d_drop(dir);
|
||||
res = simple_rmdir(parent, dir);
|
||||
/* We have to give up the mm_struct */
|
||||
spu_forget(SPUFS_I(dir->d_inode)->i_ctx);
|
||||
spu_forget(SPUFS_I(d_inode(dir))->i_ctx);
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -222,8 +222,8 @@ static int spufs_dir_close(struct inode *inode, struct file *file)
|
||||
int ret;
|
||||
|
||||
dir = file->f_path.dentry;
|
||||
parent = dir->d_parent->d_inode;
|
||||
ctx = SPUFS_I(dir->d_inode)->i_ctx;
|
||||
parent = d_inode(dir->d_parent);
|
||||
ctx = SPUFS_I(d_inode(dir))->i_ctx;
|
||||
|
||||
mutex_lock_nested(&parent->i_mutex, I_MUTEX_PARENT);
|
||||
ret = spufs_rmdir(parent, dir);
|
||||
@@ -460,7 +460,7 @@ spufs_create_context(struct inode *inode, struct dentry *dentry,
|
||||
goto out_aff_unlock;
|
||||
|
||||
if (affinity) {
|
||||
spufs_set_affinity(flags, SPUFS_I(dentry->d_inode)->i_ctx,
|
||||
spufs_set_affinity(flags, SPUFS_I(d_inode(dentry))->i_ctx,
|
||||
neighbor);
|
||||
if (neighbor)
|
||||
put_spu_context(neighbor);
|
||||
@@ -504,7 +504,7 @@ spufs_mkgang(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
|
||||
d_instantiate(dentry, inode);
|
||||
inc_nlink(dir);
|
||||
inc_nlink(dentry->d_inode);
|
||||
inc_nlink(d_inode(dentry));
|
||||
return ret;
|
||||
|
||||
out_iput:
|
||||
@@ -561,7 +561,7 @@ static struct file_system_type spufs_type;
|
||||
long spufs_create(struct path *path, struct dentry *dentry,
|
||||
unsigned int flags, umode_t mode, struct file *filp)
|
||||
{
|
||||
struct inode *dir = path->dentry->d_inode;
|
||||
struct inode *dir = d_inode(path->dentry);
|
||||
int ret;
|
||||
|
||||
/* check if we are on spufs */
|
||||
|
||||
@@ -48,7 +48,7 @@ static struct dentry *hypfs_last_dentry;
|
||||
static void hypfs_update_update(struct super_block *sb)
|
||||
{
|
||||
struct hypfs_sb_info *sb_info = sb->s_fs_info;
|
||||
struct inode *inode = sb_info->update_file->d_inode;
|
||||
struct inode *inode = d_inode(sb_info->update_file);
|
||||
|
||||
sb_info->last_update = get_seconds();
|
||||
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
|
||||
@@ -64,7 +64,7 @@ static void hypfs_add_dentry(struct dentry *dentry)
|
||||
|
||||
static inline int hypfs_positive(struct dentry *dentry)
|
||||
{
|
||||
return dentry->d_inode && !d_unhashed(dentry);
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
static void hypfs_remove(struct dentry *dentry)
|
||||
@@ -72,16 +72,16 @@ static void hypfs_remove(struct dentry *dentry)
|
||||
struct dentry *parent;
|
||||
|
||||
parent = dentry->d_parent;
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
if (hypfs_positive(dentry)) {
|
||||
if (d_is_dir(dentry))
|
||||
simple_rmdir(parent->d_inode, dentry);
|
||||
simple_rmdir(d_inode(parent), dentry);
|
||||
else
|
||||
simple_unlink(parent->d_inode, dentry);
|
||||
simple_unlink(d_inode(parent), dentry);
|
||||
}
|
||||
d_delete(dentry);
|
||||
dput(dentry);
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
}
|
||||
|
||||
static void hypfs_delete_tree(struct dentry *root)
|
||||
@@ -336,7 +336,7 @@ static struct dentry *hypfs_create_file(struct dentry *parent, const char *name,
|
||||
struct dentry *dentry;
|
||||
struct inode *inode;
|
||||
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
dentry = lookup_one_len(name, parent, strlen(name));
|
||||
if (IS_ERR(dentry)) {
|
||||
dentry = ERR_PTR(-ENOMEM);
|
||||
@@ -357,14 +357,14 @@ static struct dentry *hypfs_create_file(struct dentry *parent, const char *name,
|
||||
} else if (S_ISDIR(mode)) {
|
||||
inode->i_op = &simple_dir_inode_operations;
|
||||
inode->i_fop = &simple_dir_operations;
|
||||
inc_nlink(parent->d_inode);
|
||||
inc_nlink(d_inode(parent));
|
||||
} else
|
||||
BUG();
|
||||
inode->i_private = data;
|
||||
d_instantiate(dentry, inode);
|
||||
dget(dentry);
|
||||
fail:
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
return dentry;
|
||||
}
|
||||
|
||||
|
||||
@@ -666,7 +666,7 @@ static int probe_sysfs_permissions(struct pci_dev *dev)
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
inode = path.dentry->d_inode;
|
||||
inode = d_backing_inode(path.dentry);
|
||||
|
||||
r = inode_permission(inode, MAY_READ | MAY_WRITE | MAY_ACCESS);
|
||||
path_put(&path);
|
||||
|
||||
+16
-16
@@ -157,10 +157,10 @@ static int dev_mkdir(const char *name, umode_t mode)
|
||||
if (IS_ERR(dentry))
|
||||
return PTR_ERR(dentry);
|
||||
|
||||
err = vfs_mkdir(path.dentry->d_inode, dentry, mode);
|
||||
err = vfs_mkdir(d_inode(path.dentry), dentry, mode);
|
||||
if (!err)
|
||||
/* mark as kernel-created inode */
|
||||
dentry->d_inode->i_private = &thread;
|
||||
d_inode(dentry)->i_private = &thread;
|
||||
done_path_create(&path, dentry);
|
||||
return err;
|
||||
}
|
||||
@@ -207,7 +207,7 @@ static int handle_create(const char *nodename, umode_t mode, kuid_t uid,
|
||||
if (IS_ERR(dentry))
|
||||
return PTR_ERR(dentry);
|
||||
|
||||
err = vfs_mknod(path.dentry->d_inode, dentry, mode, dev->devt);
|
||||
err = vfs_mknod(d_inode(path.dentry), dentry, mode, dev->devt);
|
||||
if (!err) {
|
||||
struct iattr newattrs;
|
||||
|
||||
@@ -215,12 +215,12 @@ static int handle_create(const char *nodename, umode_t mode, kuid_t uid,
|
||||
newattrs.ia_uid = uid;
|
||||
newattrs.ia_gid = gid;
|
||||
newattrs.ia_valid = ATTR_MODE|ATTR_UID|ATTR_GID;
|
||||
mutex_lock(&dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dentry)->i_mutex);
|
||||
notify_change(dentry, &newattrs, NULL);
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry)->i_mutex);
|
||||
|
||||
/* mark as kernel-created inode */
|
||||
dentry->d_inode->i_private = &thread;
|
||||
d_inode(dentry)->i_private = &thread;
|
||||
}
|
||||
done_path_create(&path, dentry);
|
||||
return err;
|
||||
@@ -235,16 +235,16 @@ static int dev_rmdir(const char *name)
|
||||
dentry = kern_path_locked(name, &parent);
|
||||
if (IS_ERR(dentry))
|
||||
return PTR_ERR(dentry);
|
||||
if (dentry->d_inode) {
|
||||
if (dentry->d_inode->i_private == &thread)
|
||||
err = vfs_rmdir(parent.dentry->d_inode, dentry);
|
||||
if (d_really_is_positive(dentry)) {
|
||||
if (d_inode(dentry)->i_private == &thread)
|
||||
err = vfs_rmdir(d_inode(parent.dentry), dentry);
|
||||
else
|
||||
err = -EPERM;
|
||||
} else {
|
||||
err = -ENOENT;
|
||||
}
|
||||
dput(dentry);
|
||||
mutex_unlock(&parent.dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent.dentry)->i_mutex);
|
||||
path_put(&parent);
|
||||
return err;
|
||||
}
|
||||
@@ -306,11 +306,11 @@ static int handle_remove(const char *nodename, struct device *dev)
|
||||
if (IS_ERR(dentry))
|
||||
return PTR_ERR(dentry);
|
||||
|
||||
if (dentry->d_inode) {
|
||||
if (d_really_is_positive(dentry)) {
|
||||
struct kstat stat;
|
||||
struct path p = {.mnt = parent.mnt, .dentry = dentry};
|
||||
err = vfs_getattr(&p, &stat);
|
||||
if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {
|
||||
if (!err && dev_mynode(dev, d_inode(dentry), &stat)) {
|
||||
struct iattr newattrs;
|
||||
/*
|
||||
* before unlinking this node, reset permissions
|
||||
@@ -321,10 +321,10 @@ static int handle_remove(const char *nodename, struct device *dev)
|
||||
newattrs.ia_mode = stat.mode & ~0777;
|
||||
newattrs.ia_valid =
|
||||
ATTR_UID|ATTR_GID|ATTR_MODE;
|
||||
mutex_lock(&dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dentry)->i_mutex);
|
||||
notify_change(dentry, &newattrs, NULL);
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
err = vfs_unlink(parent.dentry->d_inode, dentry, NULL);
|
||||
mutex_unlock(&d_inode(dentry)->i_mutex);
|
||||
err = vfs_unlink(d_inode(parent.dentry), dentry, NULL);
|
||||
if (!err || err == -ENOENT)
|
||||
deleted = 1;
|
||||
}
|
||||
@@ -332,7 +332,7 @@ static int handle_remove(const char *nodename, struct device *dev)
|
||||
err = -ENOENT;
|
||||
}
|
||||
dput(dentry);
|
||||
mutex_unlock(&parent.dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent.dentry)->i_mutex);
|
||||
|
||||
path_put(&parent);
|
||||
if (deleted && strchr(nodename, '/'))
|
||||
|
||||
@@ -424,7 +424,7 @@ static int in_flight_summary_show(struct seq_file *m, void *pos)
|
||||
* So we have our own inline version of it above. :-( */
|
||||
static inline int debugfs_positive(struct dentry *dentry)
|
||||
{
|
||||
return dentry->d_inode && !d_unhashed(dentry);
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
/* 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
|
||||
* or has debugfs_remove() already been called? */
|
||||
parent = file->f_path.dentry->d_parent;
|
||||
/* not sure if this can happen: */
|
||||
if (!parent || !parent->d_inode)
|
||||
if (!parent || d_really_is_negative(parent))
|
||||
goto out;
|
||||
/* serialize with d_delete() */
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
/* Make sure the object is still alive */
|
||||
if (debugfs_positive(file->f_path.dentry)
|
||||
&& kref_get_unless_zero(kref))
|
||||
ret = 0;
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
if (!ret) {
|
||||
ret = single_open(file, show, data);
|
||||
if (ret)
|
||||
|
||||
@@ -82,14 +82,14 @@ static int create_file(const char *name, umode_t mode,
|
||||
{
|
||||
int error;
|
||||
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
*dentry = lookup_one_len(name, parent, strlen(name));
|
||||
if (!IS_ERR(*dentry))
|
||||
error = ipathfs_mknod(parent->d_inode, *dentry,
|
||||
error = ipathfs_mknod(d_inode(parent), *dentry,
|
||||
mode, fops, data);
|
||||
else
|
||||
error = PTR_ERR(*dentry);
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
|
||||
return error;
|
||||
}
|
||||
@@ -277,11 +277,11 @@ static int remove_file(struct dentry *parent, char *name)
|
||||
}
|
||||
|
||||
spin_lock(&tmp->d_lock);
|
||||
if (!d_unhashed(tmp) && tmp->d_inode) {
|
||||
if (!d_unhashed(tmp) && d_really_is_positive(tmp)) {
|
||||
dget_dlock(tmp);
|
||||
__d_drop(tmp);
|
||||
spin_unlock(&tmp->d_lock);
|
||||
simple_unlink(parent->d_inode, tmp);
|
||||
simple_unlink(d_inode(parent), tmp);
|
||||
} else
|
||||
spin_unlock(&tmp->d_lock);
|
||||
|
||||
@@ -302,7 +302,7 @@ static int remove_device_files(struct super_block *sb,
|
||||
int ret;
|
||||
|
||||
root = dget(sb->s_root);
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
snprintf(unit, sizeof unit, "%02d", dd->ipath_unit);
|
||||
dir = lookup_one_len(unit, root, strlen(unit));
|
||||
|
||||
@@ -315,10 +315,10 @@ static int remove_device_files(struct super_block *sb,
|
||||
remove_file(dir, "flash");
|
||||
remove_file(dir, "atomic_counters");
|
||||
d_delete(dir);
|
||||
ret = simple_rmdir(root->d_inode, dir);
|
||||
ret = simple_rmdir(d_inode(root), dir);
|
||||
|
||||
bail:
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
dput(root);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -89,14 +89,14 @@ static int create_file(const char *name, umode_t mode,
|
||||
{
|
||||
int error;
|
||||
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
*dentry = lookup_one_len(name, parent, strlen(name));
|
||||
if (!IS_ERR(*dentry))
|
||||
error = qibfs_mknod(parent->d_inode, *dentry,
|
||||
error = qibfs_mknod(d_inode(parent), *dentry,
|
||||
mode, fops, data);
|
||||
else
|
||||
error = PTR_ERR(*dentry);
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
|
||||
return error;
|
||||
}
|
||||
@@ -455,10 +455,10 @@ static int remove_file(struct dentry *parent, char *name)
|
||||
}
|
||||
|
||||
spin_lock(&tmp->d_lock);
|
||||
if (!d_unhashed(tmp) && tmp->d_inode) {
|
||||
if (!d_unhashed(tmp) && d_really_is_positive(tmp)) {
|
||||
__d_drop(tmp);
|
||||
spin_unlock(&tmp->d_lock);
|
||||
simple_unlink(parent->d_inode, tmp);
|
||||
simple_unlink(d_inode(parent), tmp);
|
||||
} else {
|
||||
spin_unlock(&tmp->d_lock);
|
||||
}
|
||||
@@ -481,7 +481,7 @@ static int remove_device_files(struct super_block *sb,
|
||||
int ret, i;
|
||||
|
||||
root = dget(sb->s_root);
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
snprintf(unit, sizeof(unit), "%u", dd->unit);
|
||||
dir = lookup_one_len(unit, root, strlen(unit));
|
||||
|
||||
@@ -491,7 +491,7 @@ static int remove_device_files(struct super_block *sb,
|
||||
goto bail;
|
||||
}
|
||||
|
||||
mutex_lock(&dir->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dir)->i_mutex);
|
||||
remove_file(dir, "counters");
|
||||
remove_file(dir, "counter_names");
|
||||
remove_file(dir, "portcounter_names");
|
||||
@@ -506,13 +506,13 @@ static int remove_device_files(struct super_block *sb,
|
||||
}
|
||||
}
|
||||
remove_file(dir, "flash");
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
ret = simple_rmdir(root->d_inode, dir);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
ret = simple_rmdir(d_inode(root), dir);
|
||||
d_delete(dir);
|
||||
dput(dir);
|
||||
|
||||
bail:
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
dput(root);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1169,9 +1169,9 @@ static struct mtd_info * __init open_mtd_by_chdev(const char *mtd_dev)
|
||||
return ERR_PTR(err);
|
||||
|
||||
/* MTD device number is defined by the major / minor numbers */
|
||||
major = imajor(path.dentry->d_inode);
|
||||
minor = iminor(path.dentry->d_inode);
|
||||
mode = path.dentry->d_inode->i_mode;
|
||||
major = imajor(d_backing_inode(path.dentry));
|
||||
minor = iminor(d_backing_inode(path.dentry));
|
||||
mode = d_backing_inode(path.dentry)->i_mode;
|
||||
path_put(&path);
|
||||
if (major != MTD_CHAR_MAJOR || !S_ISCHR(mode))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
@@ -314,7 +314,7 @@ struct ubi_volume_desc *ubi_open_volume_path(const char *pathname, int mode)
|
||||
if (error)
|
||||
return ERR_PTR(error);
|
||||
|
||||
inode = path.dentry->d_inode;
|
||||
inode = d_backing_inode(path.dentry);
|
||||
mod = inode->i_mode;
|
||||
ubi_num = ubi_major2num(imajor(inode));
|
||||
vol_id = iminor(inode) - 1;
|
||||
|
||||
@@ -538,7 +538,7 @@ static ssize_t tp_la_write(struct file *file, const char __user *buf,
|
||||
char s[32];
|
||||
unsigned long val;
|
||||
size_t size = min(sizeof(s) - 1, count);
|
||||
struct adapter *adap = FILE_DATA(file)->i_private;
|
||||
struct adapter *adap = file_inode(file)->i_private;
|
||||
|
||||
if (copy_from_user(s, buf, size))
|
||||
return -EFAULT;
|
||||
@@ -647,7 +647,7 @@ static int pm_stats_open(struct inode *inode, struct file *file)
|
||||
static ssize_t pm_stats_clear(struct file *file, const char __user *buf,
|
||||
size_t count, loff_t *pos)
|
||||
{
|
||||
struct adapter *adap = FILE_DATA(file)->i_private;
|
||||
struct adapter *adap = file_inode(file)->i_private;
|
||||
|
||||
t4_write_reg(adap, PM_RX_STAT_CONFIG_A, 0);
|
||||
t4_write_reg(adap, PM_TX_STAT_CONFIG_A, 0);
|
||||
@@ -1005,7 +1005,7 @@ static ssize_t mbox_write(struct file *file, const char __user *buf,
|
||||
&data[7], &c) < 8 || c != '\n')
|
||||
return -EINVAL;
|
||||
|
||||
ino = FILE_DATA(file);
|
||||
ino = file_inode(file);
|
||||
mbox = (uintptr_t)ino->i_private & 7;
|
||||
adap = ino->i_private - mbox;
|
||||
addr = adap->regs + PF_REG(mbox, CIM_PF_MAILBOX_DATA_A);
|
||||
@@ -1034,7 +1034,7 @@ static ssize_t flash_read(struct file *file, char __user *buf, size_t count,
|
||||
loff_t *ppos)
|
||||
{
|
||||
loff_t pos = *ppos;
|
||||
loff_t avail = FILE_DATA(file)->i_size;
|
||||
loff_t avail = file_inode(file)->i_size;
|
||||
struct adapter *adap = file->private_data;
|
||||
|
||||
if (pos < 0)
|
||||
@@ -1479,7 +1479,7 @@ static ssize_t rss_key_write(struct file *file, const char __user *buf,
|
||||
int i, j;
|
||||
u32 key[10];
|
||||
char s[100], *p;
|
||||
struct adapter *adap = FILE_DATA(file)->i_private;
|
||||
struct adapter *adap = file_inode(file)->i_private;
|
||||
|
||||
if (count > sizeof(s) - 1)
|
||||
return -EINVAL;
|
||||
@@ -1951,12 +1951,6 @@ static const struct file_operations mem_debugfs_fops = {
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
static void set_debugfs_file_size(struct dentry *de, loff_t size)
|
||||
{
|
||||
if (!IS_ERR(de) && de->d_inode)
|
||||
de->d_inode->i_size = size;
|
||||
}
|
||||
|
||||
static void add_debugfs_mem(struct adapter *adap, const char *name,
|
||||
unsigned int idx, unsigned int size_mb)
|
||||
{
|
||||
@@ -2072,9 +2066,8 @@ int t4_setup_debugfs(struct adapter *adap)
|
||||
}
|
||||
}
|
||||
|
||||
de = debugfs_create_file("flash", S_IRUSR, adap->debugfs_root, adap,
|
||||
&flash_debugfs_fops);
|
||||
set_debugfs_file_size(de, adap->params.sf_size);
|
||||
de = debugfs_create_file_size("flash", S_IRUSR, adap->debugfs_root, adap,
|
||||
&flash_debugfs_fops, adap->params.sf_size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -37,8 +37,6 @@
|
||||
|
||||
#include <linux/export.h>
|
||||
|
||||
#define FILE_DATA(_file) ((_file)->f_path.dentry->d_inode)
|
||||
|
||||
#define DEFINE_SIMPLE_DEBUGFS_FILE(name) \
|
||||
static int name##_open(struct inode *inode, struct file *file) \
|
||||
{ \
|
||||
|
||||
@@ -138,22 +138,22 @@ static int __oprofilefs_create_file(struct dentry *root, char const *name,
|
||||
struct dentry *dentry;
|
||||
struct inode *inode;
|
||||
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
dentry = d_alloc_name(root, name);
|
||||
if (!dentry) {
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
inode = oprofilefs_get_inode(root->d_sb, S_IFREG | perm);
|
||||
if (!inode) {
|
||||
dput(dentry);
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
inode->i_fop = fops;
|
||||
inode->i_private = priv;
|
||||
d_add(dentry, inode);
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -215,22 +215,22 @@ struct dentry *oprofilefs_mkdir(struct dentry *parent, char const *name)
|
||||
struct dentry *dentry;
|
||||
struct inode *inode;
|
||||
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
dentry = d_alloc_name(parent, name);
|
||||
if (!dentry) {
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
return NULL;
|
||||
}
|
||||
inode = oprofilefs_get_inode(parent->d_sb, S_IFDIR | 0755);
|
||||
if (!inode) {
|
||||
dput(dentry);
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
return NULL;
|
||||
}
|
||||
inode->i_op = &simple_dir_inode_operations;
|
||||
inode->i_fop = &simple_dir_operations;
|
||||
d_add(dentry, inode);
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
return dentry;
|
||||
}
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@ static int ll_ddelete(const struct dentry *de)
|
||||
|
||||
CDEBUG(D_DENTRY, "%s dentry %pd (%p, parent %p, inode %p) %s%s\n",
|
||||
d_lustre_invalid((struct dentry *)de) ? "deleting" : "keeping",
|
||||
de, de, de->d_parent, de->d_inode,
|
||||
de, de, de->d_parent, d_inode(de),
|
||||
d_unhashed(de) ? "" : "hashed,",
|
||||
list_empty(&de->d_subdirs) ? "" : "subdirs");
|
||||
|
||||
@@ -167,8 +167,8 @@ static int ll_ddelete(const struct dentry *de)
|
||||
#if 0
|
||||
/* if not ldlm lock for this inode, set i_nlink to 0 so that
|
||||
* this inode can be recycled later b=20433 */
|
||||
if (de->d_inode && !find_cbdata(de->d_inode))
|
||||
clear_nlink(de->d_inode);
|
||||
if (d_really_is_positive(de) && !find_cbdata(d_inode(de)))
|
||||
clear_nlink(d_inode(de));
|
||||
#endif
|
||||
|
||||
if (d_lustre_invalid((struct dentry *)de))
|
||||
@@ -181,7 +181,7 @@ int ll_d_init(struct dentry *de)
|
||||
LASSERT(de != NULL);
|
||||
|
||||
CDEBUG(D_DENTRY, "ldd on dentry %pd (%p) parent %p inode %p refc %d\n",
|
||||
de, de, de->d_parent, de->d_inode,
|
||||
de, de, de->d_parent, d_inode(de),
|
||||
d_count(de));
|
||||
|
||||
if (de->d_fsdata == NULL) {
|
||||
@@ -261,7 +261,7 @@ void ll_invalidate_aliases(struct inode *inode)
|
||||
ll_d_hlist_for_each_entry(dentry, p, &inode->i_dentry, d_u.d_alias) {
|
||||
CDEBUG(D_DENTRY, "dentry in drop %pd (%p) parent %p inode %p flags %d\n",
|
||||
dentry, dentry, dentry->d_parent,
|
||||
dentry->d_inode, dentry->d_flags);
|
||||
d_inode(dentry), dentry->d_flags);
|
||||
|
||||
d_lustre_invalidate(dentry, 0);
|
||||
}
|
||||
@@ -309,7 +309,7 @@ void ll_lookup_finish_locks(struct lookup_intent *it, struct inode *inode)
|
||||
static int ll_revalidate_dentry(struct dentry *dentry,
|
||||
unsigned int lookup_flags)
|
||||
{
|
||||
struct inode *dir = dentry->d_parent->d_inode;
|
||||
struct inode *dir = d_inode(dentry->d_parent);
|
||||
|
||||
/*
|
||||
* if open&create is set, talk to MDS to make sure file is created if
|
||||
@@ -329,7 +329,7 @@ static int ll_revalidate_dentry(struct dentry *dentry,
|
||||
if (lookup_flags & LOOKUP_RCU)
|
||||
return -ECHILD;
|
||||
|
||||
do_statahead_enter(dir, &dentry, dentry->d_inode == NULL);
|
||||
do_statahead_enter(dir, &dentry, d_inode(dentry) == NULL);
|
||||
ll_statahead_mark(dir, dentry);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -388,7 +388,7 @@ int ll_file_release(struct inode *inode, struct file *file)
|
||||
static int ll_intent_file_open(struct dentry *dentry, void *lmm,
|
||||
int lmmsize, struct lookup_intent *itp)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ll_sb_info *sbi = ll_i2sbi(inode);
|
||||
struct dentry *parent = dentry->d_parent;
|
||||
const char *name = dentry->d_name.name;
|
||||
@@ -413,7 +413,7 @@ static int ll_intent_file_open(struct dentry *dentry, void *lmm,
|
||||
opc = LUSTRE_OPC_CREATE;
|
||||
}
|
||||
|
||||
op_data = ll_prep_md_op_data(NULL, parent->d_inode,
|
||||
op_data = ll_prep_md_op_data(NULL, d_inode(parent),
|
||||
inode, name, len,
|
||||
O_RDWR, opc, NULL);
|
||||
if (IS_ERR(op_data))
|
||||
@@ -2896,7 +2896,7 @@ static int ll_inode_revalidate_fini(struct inode *inode, int rc)
|
||||
|
||||
static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ptlrpc_request *req = NULL;
|
||||
struct obd_export *exp;
|
||||
int rc = 0;
|
||||
@@ -2948,12 +2948,12 @@ static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
|
||||
do_lookup() -> ll_revalidate_it(). We cannot use d_drop
|
||||
here to preserve get_cwd functionality on 2.6.
|
||||
Bug 10503 */
|
||||
if (!dentry->d_inode->i_nlink)
|
||||
if (!d_inode(dentry)->i_nlink)
|
||||
d_lustre_invalidate(dentry, 0);
|
||||
|
||||
ll_lookup_finish_locks(&oit, inode);
|
||||
} else if (!ll_have_md_lock(dentry->d_inode, &ibits, LCK_MINMODE)) {
|
||||
struct ll_sb_info *sbi = ll_i2sbi(dentry->d_inode);
|
||||
} else if (!ll_have_md_lock(d_inode(dentry), &ibits, LCK_MINMODE)) {
|
||||
struct ll_sb_info *sbi = ll_i2sbi(d_inode(dentry));
|
||||
u64 valid = OBD_MD_FLGETATTR;
|
||||
struct md_op_data *op_data;
|
||||
int ealen = 0;
|
||||
@@ -2991,7 +2991,7 @@ out:
|
||||
|
||||
static int ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
int rc;
|
||||
|
||||
rc = __ll_inode_revalidate(dentry, ibits);
|
||||
@@ -3019,7 +3019,7 @@ static int ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
|
||||
|
||||
int ll_getattr(struct vfsmount *mnt, struct dentry *de, struct kstat *stat)
|
||||
{
|
||||
struct inode *inode = de->d_inode;
|
||||
struct inode *inode = d_inode(de);
|
||||
struct ll_sb_info *sbi = ll_i2sbi(inode);
|
||||
struct ll_inode_info *lli = ll_i2info(inode);
|
||||
int res = 0;
|
||||
|
||||
@@ -1488,7 +1488,7 @@ static inline void d_lustre_invalidate(struct dentry *dentry, int nested)
|
||||
{
|
||||
CDEBUG(D_DENTRY, "invalidate dentry %pd (%p) parent %p inode %p refc %d\n",
|
||||
dentry, dentry,
|
||||
dentry->d_parent, dentry->d_inode, d_count(dentry));
|
||||
dentry->d_parent, d_inode(dentry), d_count(dentry));
|
||||
|
||||
spin_lock_nested(&dentry->d_lock,
|
||||
nested ? DENTRY_D_LOCK_NESTED : DENTRY_D_LOCK_NORMAL);
|
||||
|
||||
@@ -1166,7 +1166,7 @@ static int ll_md_setattr(struct dentry *dentry, struct md_op_data *op_data,
|
||||
struct md_open_data **mod)
|
||||
{
|
||||
struct lustre_md md;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ll_sb_info *sbi = ll_i2sbi(inode);
|
||||
struct ptlrpc_request *request = NULL;
|
||||
int rc, ia_valid;
|
||||
@@ -1290,7 +1290,7 @@ static int ll_setattr_ost(struct inode *inode, struct iattr *attr)
|
||||
*/
|
||||
int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ll_inode_info *lli = ll_i2info(inode);
|
||||
struct md_op_data *op_data = NULL;
|
||||
struct md_open_data *mod = NULL;
|
||||
@@ -1465,7 +1465,7 @@ out:
|
||||
|
||||
int ll_setattr(struct dentry *de, struct iattr *attr)
|
||||
{
|
||||
int mode = de->d_inode->i_mode;
|
||||
int mode = d_inode(de)->i_mode;
|
||||
|
||||
if ((attr->ia_valid & (ATTR_CTIME|ATTR_SIZE|ATTR_MODE)) ==
|
||||
(ATTR_CTIME|ATTR_SIZE|ATTR_MODE))
|
||||
|
||||
@@ -230,11 +230,11 @@ static int ll_nfs_get_name_filldir(struct dir_context *ctx, const char *name,
|
||||
static int ll_get_name(struct dentry *dentry, char *name,
|
||||
struct dentry *child)
|
||||
{
|
||||
struct inode *dir = dentry->d_inode;
|
||||
struct inode *dir = d_inode(dentry);
|
||||
int rc;
|
||||
struct ll_getname_data lgd = {
|
||||
.lgd_name = name,
|
||||
.lgd_fid = ll_i2info(child->d_inode)->lli_fid,
|
||||
.lgd_fid = ll_i2info(d_inode(child))->lli_fid,
|
||||
.ctx.actor = ll_nfs_get_name_filldir,
|
||||
};
|
||||
|
||||
@@ -282,7 +282,7 @@ static struct dentry *ll_fh_to_parent(struct super_block *sb, struct fid *fid,
|
||||
static struct dentry *ll_get_parent(struct dentry *dchild)
|
||||
{
|
||||
struct ptlrpc_request *req = NULL;
|
||||
struct inode *dir = dchild->d_inode;
|
||||
struct inode *dir = d_inode(dchild);
|
||||
struct ll_sb_info *sbi;
|
||||
struct dentry *result = NULL;
|
||||
struct mdt_body *body;
|
||||
|
||||
@@ -155,7 +155,7 @@ static void ll_invalidate_negative_children(struct inode *dir)
|
||||
list_for_each_entry_safe(child, tmp_subdir,
|
||||
&dentry->d_subdirs,
|
||||
d_child) {
|
||||
if (child->d_inode == NULL)
|
||||
if (d_really_is_negative(child))
|
||||
d_lustre_invalidate(child, 1);
|
||||
}
|
||||
}
|
||||
@@ -392,7 +392,7 @@ struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de)
|
||||
iput(inode);
|
||||
CDEBUG(D_DENTRY,
|
||||
"Reuse dentry %p inode %p refc %d flags %#x\n",
|
||||
new, new->d_inode, d_count(new), new->d_flags);
|
||||
new, d_inode(new), d_count(new), new->d_flags);
|
||||
return new;
|
||||
}
|
||||
}
|
||||
@@ -401,7 +401,7 @@ struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de)
|
||||
return ERR_PTR(rc);
|
||||
d_add(de, inode);
|
||||
CDEBUG(D_DENTRY, "Add dentry %p inode %p refc %d flags %#x\n",
|
||||
de, de->d_inode, d_count(de), de->d_flags);
|
||||
de, d_inode(de), d_count(de), de->d_flags);
|
||||
return de;
|
||||
}
|
||||
|
||||
@@ -448,7 +448,7 @@ static int ll_lookup_it_finish(struct ptlrpc_request *request,
|
||||
!it_disposition(it, DISP_OPEN_CREATE)) {
|
||||
/* With DISP_OPEN_CREATE dentry will
|
||||
instantiated in ll_create_it. */
|
||||
LASSERT((*de)->d_inode == NULL);
|
||||
LASSERT(d_inode(*de) == NULL);
|
||||
d_instantiate(*de, inode);
|
||||
}
|
||||
|
||||
@@ -541,7 +541,7 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,
|
||||
goto out;
|
||||
}
|
||||
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
if ((it->it_op & IT_OPEN) && inode &&
|
||||
!S_ISREG(inode->i_mode) &&
|
||||
!S_ISDIR(inode->i_mode)) {
|
||||
@@ -638,9 +638,9 @@ static int ll_atomic_open(struct inode *dir, struct dentry *dentry,
|
||||
|
||||
*opened |= FILE_CREATED;
|
||||
}
|
||||
if (dentry->d_inode && it_disposition(it, DISP_OPEN_OPEN)) {
|
||||
if (d_really_is_positive(dentry) && it_disposition(it, DISP_OPEN_OPEN)) {
|
||||
/* Open dentry. */
|
||||
if (S_ISFIFO(dentry->d_inode->i_mode)) {
|
||||
if (S_ISFIFO(d_inode(dentry)->i_mode)) {
|
||||
/* We cannot call open here as it would
|
||||
* deadlock.
|
||||
*/
|
||||
@@ -862,8 +862,8 @@ static int ll_create_nd(struct inode *dir, struct dentry *dentry,
|
||||
|
||||
static inline void ll_get_child_fid(struct dentry *child, struct lu_fid *fid)
|
||||
{
|
||||
if (child->d_inode)
|
||||
*fid = *ll_inode2fid(child->d_inode);
|
||||
if (d_really_is_positive(child))
|
||||
*fid = *ll_inode2fid(d_inode(child));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1076,7 +1076,7 @@ static int ll_symlink(struct inode *dir, struct dentry *dentry,
|
||||
static int ll_link(struct dentry *old_dentry, struct inode *dir,
|
||||
struct dentry *new_dentry)
|
||||
{
|
||||
struct inode *src = old_dentry->d_inode;
|
||||
struct inode *src = d_inode(old_dentry);
|
||||
struct ll_sb_info *sbi = ll_i2sbi(dir);
|
||||
struct ptlrpc_request *request = NULL;
|
||||
struct md_op_data *op_data;
|
||||
|
||||
@@ -880,7 +880,7 @@ static int do_sa_lookup(struct inode *dir, struct ll_sa_entry *entry)
|
||||
static int do_sa_revalidate(struct inode *dir, struct ll_sa_entry *entry,
|
||||
struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct lookup_intent it = { .it_op = IT_GETATTR,
|
||||
.d.lustre.it_lock_handle = 0 };
|
||||
struct md_enqueue_info *minfo;
|
||||
@@ -926,7 +926,7 @@ static int do_sa_revalidate(struct inode *dir, struct ll_sa_entry *entry,
|
||||
static void ll_statahead_one(struct dentry *parent, const char *entry_name,
|
||||
int entry_name_len)
|
||||
{
|
||||
struct inode *dir = parent->d_inode;
|
||||
struct inode *dir = d_inode(parent);
|
||||
struct ll_inode_info *lli = ll_i2info(dir);
|
||||
struct ll_statahead_info *sai = lli->lli_sai;
|
||||
struct dentry *dentry = NULL;
|
||||
@@ -944,8 +944,8 @@ static void ll_statahead_one(struct dentry *parent, const char *entry_name,
|
||||
rc = do_sa_lookup(dir, entry);
|
||||
} else {
|
||||
rc = do_sa_revalidate(dir, entry, dentry);
|
||||
if (rc == 1 && agl_should_run(sai, dentry->d_inode))
|
||||
ll_agl_add(sai, dentry->d_inode, entry->se_index);
|
||||
if (rc == 1 && agl_should_run(sai, d_inode(dentry)))
|
||||
ll_agl_add(sai, d_inode(dentry), entry->se_index);
|
||||
}
|
||||
|
||||
if (dentry != NULL)
|
||||
@@ -968,7 +968,7 @@ static void ll_statahead_one(struct dentry *parent, const char *entry_name,
|
||||
static int ll_agl_thread(void *arg)
|
||||
{
|
||||
struct dentry *parent = (struct dentry *)arg;
|
||||
struct inode *dir = parent->d_inode;
|
||||
struct inode *dir = d_inode(parent);
|
||||
struct ll_inode_info *plli = ll_i2info(dir);
|
||||
struct ll_inode_info *clli;
|
||||
struct ll_sb_info *sbi = ll_i2sbi(dir);
|
||||
@@ -1042,7 +1042,7 @@ static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
|
||||
CDEBUG(D_READA, "start agl thread: sai %p, parent %pd\n",
|
||||
sai, parent);
|
||||
|
||||
plli = ll_i2info(parent->d_inode);
|
||||
plli = ll_i2info(d_inode(parent));
|
||||
task = kthread_run(ll_agl_thread, parent,
|
||||
"ll_agl_%u", plli->lli_opendir_pid);
|
||||
if (IS_ERR(task)) {
|
||||
@@ -1059,7 +1059,7 @@ static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
|
||||
static int ll_statahead_thread(void *arg)
|
||||
{
|
||||
struct dentry *parent = (struct dentry *)arg;
|
||||
struct inode *dir = parent->d_inode;
|
||||
struct inode *dir = d_inode(parent);
|
||||
struct ll_inode_info *plli = ll_i2info(dir);
|
||||
struct ll_inode_info *clli;
|
||||
struct ll_sb_info *sbi = ll_i2sbi(dir);
|
||||
@@ -1604,7 +1604,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
|
||||
rc = md_revalidate_lock(ll_i2mdexp(dir), &it,
|
||||
ll_inode2fid(inode), &bits);
|
||||
if (rc == 1) {
|
||||
if ((*dentryp)->d_inode == NULL) {
|
||||
if (d_inode(*dentryp) == NULL) {
|
||||
struct dentry *alias;
|
||||
|
||||
alias = ll_splice_alias(inode,
|
||||
@@ -1614,13 +1614,13 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
|
||||
return PTR_ERR(alias);
|
||||
}
|
||||
*dentryp = alias;
|
||||
} else if ((*dentryp)->d_inode != inode) {
|
||||
} else if (d_inode(*dentryp) != inode) {
|
||||
/* revalidate, but inode is recreated */
|
||||
CDEBUG(D_READA,
|
||||
"stale dentry %pd inode %lu/%u, statahead inode %lu/%u\n",
|
||||
*dentryp,
|
||||
(*dentryp)->d_inode->i_ino,
|
||||
(*dentryp)->d_inode->i_generation,
|
||||
d_inode(*dentryp)->i_ino,
|
||||
d_inode(*dentryp)->i_generation,
|
||||
inode->i_ino,
|
||||
inode->i_generation);
|
||||
ll_sai_unplug(sai, entry);
|
||||
@@ -1666,8 +1666,8 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
|
||||
|
||||
/* get parent reference count here, and put it in ll_statahead_thread */
|
||||
parent = dget((*dentryp)->d_parent);
|
||||
if (unlikely(sai->sai_inode != parent->d_inode)) {
|
||||
struct ll_inode_info *nlli = ll_i2info(parent->d_inode);
|
||||
if (unlikely(sai->sai_inode != d_inode(parent))) {
|
||||
struct ll_inode_info *nlli = ll_i2info(d_inode(parent));
|
||||
|
||||
CWARN("Race condition, someone changed %pd just now: old parent "DFID", new parent "DFID"\n",
|
||||
*dentryp,
|
||||
@@ -1689,7 +1689,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
|
||||
ll_sai_get(sai);
|
||||
lli->lli_sai = sai;
|
||||
|
||||
plli = ll_i2info(parent->d_inode);
|
||||
plli = ll_i2info(d_inode(parent));
|
||||
rc = PTR_ERR(kthread_run(ll_statahead_thread, parent,
|
||||
"ll_sa_%u", plli->lli_opendir_pid));
|
||||
thread = &sai->sai_thread;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user