forked from Minki/linux
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:
commit
9ec3a646fe
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -120,7 +120,7 @@ failed:
|
||||
|
||||
static void *ll_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ptlrpc_request *request = NULL;
|
||||
int rc;
|
||||
char *symname = NULL;
|
||||
|
@ -214,7 +214,7 @@ int ll_setxattr_common(struct inode *inode, const char *name,
|
||||
int ll_setxattr(struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size, int flags)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
LASSERT(inode);
|
||||
LASSERT(name);
|
||||
@ -267,7 +267,7 @@ int ll_setxattr(struct dentry *dentry, const char *name,
|
||||
|
||||
int ll_removexattr(struct dentry *dentry, const char *name)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
LASSERT(inode);
|
||||
LASSERT(name);
|
||||
@ -457,7 +457,7 @@ out:
|
||||
ssize_t ll_getxattr(struct dentry *dentry, const char *name,
|
||||
void *buffer, size_t size)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
LASSERT(inode);
|
||||
LASSERT(name);
|
||||
@ -545,7 +545,7 @@ out:
|
||||
|
||||
ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
int rc = 0, rc2 = 0;
|
||||
struct lov_mds_md *lmm = NULL;
|
||||
struct ptlrpc_request *request = NULL;
|
||||
|
@ -1505,7 +1505,7 @@ static void destroy_ep_files (struct dev_data *dev)
|
||||
list_del_init (&ep->epfiles);
|
||||
dentry = ep->dentry;
|
||||
ep->dentry = NULL;
|
||||
parent = dentry->d_parent->d_inode;
|
||||
parent = d_inode(dentry->d_parent);
|
||||
|
||||
/* break link to controller */
|
||||
if (ep->state == STATE_EP_ENABLED)
|
||||
|
@ -247,7 +247,7 @@ static int v9fs_xattr_get_acl(struct dentry *dentry, const char *name,
|
||||
if ((v9ses->flags & V9FS_ACCESS_MASK) != V9FS_ACCESS_CLIENT)
|
||||
return v9fs_remote_get_acl(dentry, name, buffer, size, type);
|
||||
|
||||
acl = v9fs_get_cached_acl(dentry->d_inode, type);
|
||||
acl = v9fs_get_cached_acl(d_inode(dentry), type);
|
||||
if (IS_ERR(acl))
|
||||
return PTR_ERR(acl);
|
||||
if (acl == NULL)
|
||||
@ -285,7 +285,7 @@ static int v9fs_xattr_set_acl(struct dentry *dentry, const char *name,
|
||||
int retval;
|
||||
struct posix_acl *acl;
|
||||
struct v9fs_session_info *v9ses;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
if (strcmp(name, "") != 0)
|
||||
return -EINVAL;
|
||||
|
@ -53,7 +53,7 @@ static int v9fs_cached_dentry_delete(const struct dentry *dentry)
|
||||
dentry, dentry);
|
||||
|
||||
/* Don't cache negative dentries */
|
||||
if (!dentry->d_inode)
|
||||
if (d_really_is_negative(dentry))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
@ -83,7 +83,7 @@ static int v9fs_lookup_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
if (flags & LOOKUP_RCU)
|
||||
return -ECHILD;
|
||||
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
if (!inode)
|
||||
goto out_valid;
|
||||
|
||||
|
@ -138,6 +138,8 @@ static int v9fs_dir_readdir(struct file *file, struct dir_context *ctx)
|
||||
&err);
|
||||
if (err)
|
||||
return err;
|
||||
if (n == 0)
|
||||
return 0;
|
||||
|
||||
rdir->head = 0;
|
||||
rdir->tail = n;
|
||||
|
@ -595,7 +595,7 @@ static int v9fs_remove(struct inode *dir, struct dentry *dentry, int flags)
|
||||
dir, dentry, flags);
|
||||
|
||||
v9ses = v9fs_inode2v9ses(dir);
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
dfid = v9fs_fid_lookup(dentry->d_parent);
|
||||
if (IS_ERR(dfid)) {
|
||||
retval = PTR_ERR(dfid);
|
||||
@ -864,7 +864,7 @@ v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry,
|
||||
}
|
||||
|
||||
/* Only creates */
|
||||
if (!(flags & O_CREAT) || dentry->d_inode)
|
||||
if (!(flags & O_CREAT) || d_really_is_positive(dentry))
|
||||
return finish_no_open(file, res);
|
||||
|
||||
err = 0;
|
||||
@ -881,7 +881,7 @@ v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry,
|
||||
}
|
||||
|
||||
v9fs_invalidate_inode_attr(dir);
|
||||
v9inode = V9FS_I(dentry->d_inode);
|
||||
v9inode = V9FS_I(d_inode(dentry));
|
||||
mutex_lock(&v9inode->v_mutex);
|
||||
if ((v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) &&
|
||||
!v9inode->writeback_fid &&
|
||||
@ -908,7 +908,7 @@ v9fs_vfs_atomic_open(struct inode *dir, struct dentry *dentry,
|
||||
|
||||
file->private_data = fid;
|
||||
if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE)
|
||||
v9fs_cache_inode_set_cookie(dentry->d_inode, file);
|
||||
v9fs_cache_inode_set_cookie(d_inode(dentry), file);
|
||||
|
||||
*opened |= FILE_CREATED;
|
||||
out:
|
||||
@ -969,8 +969,8 @@ v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
|
||||
p9_debug(P9_DEBUG_VFS, "\n");
|
||||
retval = 0;
|
||||
old_inode = old_dentry->d_inode;
|
||||
new_inode = new_dentry->d_inode;
|
||||
old_inode = d_inode(old_dentry);
|
||||
new_inode = d_inode(new_dentry);
|
||||
v9ses = v9fs_inode2v9ses(old_inode);
|
||||
oldfid = v9fs_fid_lookup(old_dentry);
|
||||
if (IS_ERR(oldfid))
|
||||
@ -1061,7 +1061,7 @@ v9fs_vfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
p9_debug(P9_DEBUG_VFS, "dentry: %p\n", dentry);
|
||||
v9ses = v9fs_dentry2v9ses(dentry);
|
||||
if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) {
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
generic_fillattr(d_inode(dentry), stat);
|
||||
return 0;
|
||||
}
|
||||
fid = v9fs_fid_lookup(dentry);
|
||||
@ -1072,8 +1072,8 @@ v9fs_vfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
if (IS_ERR(st))
|
||||
return PTR_ERR(st);
|
||||
|
||||
v9fs_stat2inode(st, dentry->d_inode, dentry->d_inode->i_sb);
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
v9fs_stat2inode(st, d_inode(dentry), d_inode(dentry)->i_sb);
|
||||
generic_fillattr(d_inode(dentry), stat);
|
||||
|
||||
p9stat_free(st);
|
||||
kfree(st);
|
||||
@ -1095,7 +1095,7 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
|
||||
struct p9_wstat wstat;
|
||||
|
||||
p9_debug(P9_DEBUG_VFS, "\n");
|
||||
retval = inode_change_ok(dentry->d_inode, iattr);
|
||||
retval = inode_change_ok(d_inode(dentry), iattr);
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
@ -1128,20 +1128,20 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
|
||||
|
||||
/* Write all dirty data */
|
||||
if (d_is_reg(dentry))
|
||||
filemap_write_and_wait(dentry->d_inode->i_mapping);
|
||||
filemap_write_and_wait(d_inode(dentry)->i_mapping);
|
||||
|
||||
retval = p9_client_wstat(fid, &wstat);
|
||||
if (retval < 0)
|
||||
return retval;
|
||||
|
||||
if ((iattr->ia_valid & ATTR_SIZE) &&
|
||||
iattr->ia_size != i_size_read(dentry->d_inode))
|
||||
truncate_setsize(dentry->d_inode, iattr->ia_size);
|
||||
iattr->ia_size != i_size_read(d_inode(dentry)))
|
||||
truncate_setsize(d_inode(dentry), iattr->ia_size);
|
||||
|
||||
v9fs_invalidate_inode_attr(dentry->d_inode);
|
||||
v9fs_invalidate_inode_attr(d_inode(dentry));
|
||||
|
||||
setattr_copy(dentry->d_inode, iattr);
|
||||
mark_inode_dirty(dentry->d_inode);
|
||||
setattr_copy(d_inode(dentry), iattr);
|
||||
mark_inode_dirty(d_inode(dentry));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1403,7 +1403,7 @@ v9fs_vfs_link(struct dentry *old_dentry, struct inode *dir,
|
||||
retval = v9fs_vfs_mkspecial(dir, dentry, P9_DMLINK, name);
|
||||
__putname(name);
|
||||
if (!retval) {
|
||||
v9fs_refresh_inode(oldfid, old_dentry->d_inode);
|
||||
v9fs_refresh_inode(oldfid, d_inode(old_dentry));
|
||||
v9fs_invalidate_inode_attr(dir);
|
||||
}
|
||||
clunk_fid:
|
||||
|
@ -265,7 +265,7 @@ v9fs_vfs_atomic_open_dotl(struct inode *dir, struct dentry *dentry,
|
||||
}
|
||||
|
||||
/* Only creates */
|
||||
if (!(flags & O_CREAT) || dentry->d_inode)
|
||||
if (!(flags & O_CREAT) || d_really_is_positive(dentry))
|
||||
return finish_no_open(file, res);
|
||||
|
||||
v9ses = v9fs_inode2v9ses(dir);
|
||||
@ -481,7 +481,7 @@ v9fs_vfs_getattr_dotl(struct vfsmount *mnt, struct dentry *dentry,
|
||||
p9_debug(P9_DEBUG_VFS, "dentry: %p\n", dentry);
|
||||
v9ses = v9fs_dentry2v9ses(dentry);
|
||||
if (v9ses->cache == CACHE_LOOSE || v9ses->cache == CACHE_FSCACHE) {
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
generic_fillattr(d_inode(dentry), stat);
|
||||
return 0;
|
||||
}
|
||||
fid = v9fs_fid_lookup(dentry);
|
||||
@ -496,8 +496,8 @@ v9fs_vfs_getattr_dotl(struct vfsmount *mnt, struct dentry *dentry,
|
||||
if (IS_ERR(st))
|
||||
return PTR_ERR(st);
|
||||
|
||||
v9fs_stat2inode_dotl(st, dentry->d_inode);
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
v9fs_stat2inode_dotl(st, d_inode(dentry));
|
||||
generic_fillattr(d_inode(dentry), stat);
|
||||
/* Change block size to what the server returned */
|
||||
stat->blksize = st->st_blksize;
|
||||
|
||||
@ -557,7 +557,7 @@ int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr)
|
||||
int retval;
|
||||
struct p9_fid *fid;
|
||||
struct p9_iattr_dotl p9attr;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
p9_debug(P9_DEBUG_VFS, "\n");
|
||||
|
||||
@ -795,10 +795,10 @@ v9fs_vfs_link_dotl(struct dentry *old_dentry, struct inode *dir,
|
||||
if (IS_ERR(fid))
|
||||
return PTR_ERR(fid);
|
||||
|
||||
v9fs_refresh_inode_dotl(fid, old_dentry->d_inode);
|
||||
v9fs_refresh_inode_dotl(fid, d_inode(old_dentry));
|
||||
}
|
||||
ihold(old_dentry->d_inode);
|
||||
d_instantiate(dentry, old_dentry->d_inode);
|
||||
ihold(d_inode(old_dentry));
|
||||
d_instantiate(dentry, d_inode(old_dentry));
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -168,8 +168,8 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
|
||||
retval = PTR_ERR(st);
|
||||
goto release_sb;
|
||||
}
|
||||
root->d_inode->i_ino = v9fs_qid2ino(&st->qid);
|
||||
v9fs_stat2inode_dotl(st, root->d_inode);
|
||||
d_inode(root)->i_ino = v9fs_qid2ino(&st->qid);
|
||||
v9fs_stat2inode_dotl(st, d_inode(root));
|
||||
kfree(st);
|
||||
} else {
|
||||
struct p9_wstat *st = NULL;
|
||||
@ -179,8 +179,8 @@ static struct dentry *v9fs_mount(struct file_system_type *fs_type, int flags,
|
||||
goto release_sb;
|
||||
}
|
||||
|
||||
root->d_inode->i_ino = v9fs_qid2ino(&st->qid);
|
||||
v9fs_stat2inode(st, root->d_inode, sb);
|
||||
d_inode(root)->i_ino = v9fs_qid2ino(&st->qid);
|
||||
v9fs_stat2inode(st, d_inode(root), sb);
|
||||
|
||||
p9stat_free(st);
|
||||
kfree(st);
|
||||
|
@ -298,7 +298,7 @@ out:
|
||||
int
|
||||
adfs_notify_change(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct super_block *sb = inode->i_sb;
|
||||
unsigned int ia_valid = attr->ia_valid;
|
||||
int error;
|
||||
|
@ -138,7 +138,7 @@ affs_fix_dcache(struct inode *inode, u32 entry_ino)
|
||||
static int
|
||||
affs_remove_link(struct dentry *dentry)
|
||||
{
|
||||
struct inode *dir, *inode = dentry->d_inode;
|
||||
struct inode *dir, *inode = d_inode(dentry);
|
||||
struct super_block *sb = inode->i_sb;
|
||||
struct buffer_head *bh = NULL, *link_bh = NULL;
|
||||
u32 link_ino, ino;
|
||||
@ -268,11 +268,11 @@ affs_remove_header(struct dentry *dentry)
|
||||
struct buffer_head *bh = NULL;
|
||||
int retval;
|
||||
|
||||
dir = dentry->d_parent->d_inode;
|
||||
dir = d_inode(dentry->d_parent);
|
||||
sb = dir->i_sb;
|
||||
|
||||
retval = -ENOENT;
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
if (!inode)
|
||||
goto done;
|
||||
|
||||
@ -471,10 +471,9 @@ affs_warning(struct super_block *sb, const char *function, const char *fmt, ...)
|
||||
bool
|
||||
affs_nofilenametruncate(const struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
return affs_test_opt(AFFS_SB(inode->i_sb)->s_flags, SF_NO_TRUNCATE);
|
||||
|
||||
}
|
||||
|
||||
/* Check if the name is valid for a affs object. */
|
||||
|
@ -213,7 +213,7 @@ affs_write_inode(struct inode *inode, struct writeback_control *wbc)
|
||||
int
|
||||
affs_notify_change(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
int error;
|
||||
|
||||
pr_debug("notify_change(%lu,0x%x)\n", inode->i_ino, attr->ia_valid);
|
||||
|
@ -251,7 +251,7 @@ int
|
||||
affs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
pr_debug("%s(dir=%lu, %lu \"%pd\")\n", __func__, dir->i_ino,
|
||||
dentry->d_inode->i_ino, dentry);
|
||||
d_inode(dentry)->i_ino, dentry);
|
||||
|
||||
return affs_remove_header(dentry);
|
||||
}
|
||||
@ -320,7 +320,7 @@ int
|
||||
affs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
pr_debug("%s(dir=%lu, %lu \"%pd\")\n", __func__, dir->i_ino,
|
||||
dentry->d_inode->i_ino, dentry);
|
||||
d_inode(dentry)->i_ino, dentry);
|
||||
|
||||
return affs_remove_header(dentry);
|
||||
}
|
||||
@ -403,7 +403,7 @@ err:
|
||||
int
|
||||
affs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = old_dentry->d_inode;
|
||||
struct inode *inode = d_inode(old_dentry);
|
||||
|
||||
pr_debug("%s(%lu, %lu, \"%pd\")\n", __func__, inode->i_ino, dir->i_ino,
|
||||
dentry);
|
||||
@ -430,13 +430,13 @@ affs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
return retval;
|
||||
|
||||
/* Unlink destination if it already exists */
|
||||
if (new_dentry->d_inode) {
|
||||
if (d_really_is_positive(new_dentry)) {
|
||||
retval = affs_remove_header(new_dentry);
|
||||
if (retval)
|
||||
return retval;
|
||||
}
|
||||
|
||||
bh = affs_bread(sb, old_dentry->d_inode->i_ino);
|
||||
bh = affs_bread(sb, d_inode(old_dentry)->i_ino);
|
||||
if (!bh)
|
||||
return -EIO;
|
||||
|
||||
|
42
fs/afs/dir.c
42
fs/afs/dir.c
@ -505,7 +505,7 @@ static struct dentry *afs_lookup(struct inode *dir, struct dentry *dentry,
|
||||
_enter("{%x:%u},%p{%pd},",
|
||||
vnode->fid.vid, vnode->fid.vnode, dentry, dentry);
|
||||
|
||||
ASSERTCMP(dentry->d_inode, ==, NULL);
|
||||
ASSERTCMP(d_inode(dentry), ==, NULL);
|
||||
|
||||
if (dentry->d_name.len >= AFSNAMEMAX) {
|
||||
_leave(" = -ENAMETOOLONG");
|
||||
@ -563,8 +563,8 @@ success:
|
||||
_leave(" = 0 { vn=%u u=%u } -> { ino=%lu v=%u }",
|
||||
fid.vnode,
|
||||
fid.unique,
|
||||
dentry->d_inode->i_ino,
|
||||
dentry->d_inode->i_generation);
|
||||
d_inode(dentry)->i_ino,
|
||||
d_inode(dentry)->i_generation);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@ -586,9 +586,9 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
if (flags & LOOKUP_RCU)
|
||||
return -ECHILD;
|
||||
|
||||
vnode = AFS_FS_I(dentry->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(dentry));
|
||||
|
||||
if (dentry->d_inode)
|
||||
if (d_really_is_positive(dentry))
|
||||
_enter("{v={%x:%u} n=%pd fl=%lx},",
|
||||
vnode->fid.vid, vnode->fid.vnode, dentry,
|
||||
vnode->flags);
|
||||
@ -601,7 +601,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
|
||||
/* lock down the parent dentry so we can peer at it */
|
||||
parent = dget_parent(dentry);
|
||||
dir = AFS_FS_I(parent->d_inode);
|
||||
dir = AFS_FS_I(d_inode(parent));
|
||||
|
||||
/* validate the parent directory */
|
||||
if (test_bit(AFS_VNODE_MODIFIED, &dir->flags))
|
||||
@ -623,9 +623,9 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
switch (ret) {
|
||||
case 0:
|
||||
/* the filename maps to something */
|
||||
if (!dentry->d_inode)
|
||||
if (d_really_is_negative(dentry))
|
||||
goto out_bad;
|
||||
if (is_bad_inode(dentry->d_inode)) {
|
||||
if (is_bad_inode(d_inode(dentry))) {
|
||||
printk("kAFS: afs_d_revalidate: %pd2 has bad inode\n",
|
||||
dentry);
|
||||
goto out_bad;
|
||||
@ -647,7 +647,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
_debug("%pd: file deleted (uq %u -> %u I:%u)",
|
||||
dentry, fid.unique,
|
||||
vnode->fid.unique,
|
||||
dentry->d_inode->i_generation);
|
||||
d_inode(dentry)->i_generation);
|
||||
spin_lock(&vnode->lock);
|
||||
set_bit(AFS_VNODE_DELETED, &vnode->flags);
|
||||
spin_unlock(&vnode->lock);
|
||||
@ -658,7 +658,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
case -ENOENT:
|
||||
/* the filename is unknown */
|
||||
_debug("%pd: dirent not found", dentry);
|
||||
if (dentry->d_inode)
|
||||
if (d_really_is_positive(dentry))
|
||||
goto not_found;
|
||||
goto out_valid;
|
||||
|
||||
@ -703,9 +703,9 @@ static int afs_d_delete(const struct dentry *dentry)
|
||||
if (dentry->d_flags & DCACHE_NFSFS_RENAMED)
|
||||
goto zap;
|
||||
|
||||
if (dentry->d_inode &&
|
||||
(test_bit(AFS_VNODE_DELETED, &AFS_FS_I(dentry->d_inode)->flags) ||
|
||||
test_bit(AFS_VNODE_PSEUDODIR, &AFS_FS_I(dentry->d_inode)->flags)))
|
||||
if (d_really_is_positive(dentry) &&
|
||||
(test_bit(AFS_VNODE_DELETED, &AFS_FS_I(d_inode(dentry))->flags) ||
|
||||
test_bit(AFS_VNODE_PSEUDODIR, &AFS_FS_I(d_inode(dentry))->flags)))
|
||||
goto zap;
|
||||
|
||||
_leave(" = 0 [keep]");
|
||||
@ -814,8 +814,8 @@ static int afs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
if (ret < 0)
|
||||
goto rmdir_error;
|
||||
|
||||
if (dentry->d_inode) {
|
||||
vnode = AFS_FS_I(dentry->d_inode);
|
||||
if (d_really_is_positive(dentry)) {
|
||||
vnode = AFS_FS_I(d_inode(dentry));
|
||||
clear_nlink(&vnode->vfs_inode);
|
||||
set_bit(AFS_VNODE_DELETED, &vnode->flags);
|
||||
afs_discard_callback_on_delete(vnode);
|
||||
@ -856,8 +856,8 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (dentry->d_inode) {
|
||||
vnode = AFS_FS_I(dentry->d_inode);
|
||||
if (d_really_is_positive(dentry)) {
|
||||
vnode = AFS_FS_I(d_inode(dentry));
|
||||
|
||||
/* make sure we have a callback promise on the victim */
|
||||
ret = afs_validate(vnode, key);
|
||||
@ -869,7 +869,7 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
if (ret < 0)
|
||||
goto remove_error;
|
||||
|
||||
if (dentry->d_inode) {
|
||||
if (d_really_is_positive(dentry)) {
|
||||
/* if the file wasn't deleted due to excess hard links, the
|
||||
* fileserver will break the callback promise on the file - if
|
||||
* it had one - before it returns to us, and if it was deleted,
|
||||
@ -879,7 +879,7 @@ static int afs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
* or it was outstanding on a different server, then it won't
|
||||
* break it either...
|
||||
*/
|
||||
vnode = AFS_FS_I(dentry->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(dentry));
|
||||
if (test_bit(AFS_VNODE_DELETED, &vnode->flags))
|
||||
_debug("AFS_VNODE_DELETED");
|
||||
if (test_bit(AFS_VNODE_CB_BROKEN, &vnode->flags))
|
||||
@ -977,7 +977,7 @@ static int afs_link(struct dentry *from, struct inode *dir,
|
||||
struct key *key;
|
||||
int ret;
|
||||
|
||||
vnode = AFS_FS_I(from->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(from));
|
||||
dvnode = AFS_FS_I(dir);
|
||||
|
||||
_enter("{%x:%u},{%x:%u},{%pd}",
|
||||
@ -1089,7 +1089,7 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
struct key *key;
|
||||
int ret;
|
||||
|
||||
vnode = AFS_FS_I(old_dentry->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(old_dentry));
|
||||
orig_dvnode = AFS_FS_I(old_dir);
|
||||
new_dvnode = AFS_FS_I(new_dir);
|
||||
|
||||
|
@ -379,7 +379,7 @@ int afs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
{
|
||||
struct inode *inode;
|
||||
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
|
||||
_enter("{ ino=%lu v=%u }", inode->i_ino, inode->i_generation);
|
||||
|
||||
@ -458,7 +458,7 @@ void afs_evict_inode(struct inode *inode)
|
||||
*/
|
||||
int afs_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
struct afs_vnode *vnode = AFS_FS_I(dentry->d_inode);
|
||||
struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry));
|
||||
struct key *key;
|
||||
int ret;
|
||||
|
||||
|
@ -134,7 +134,7 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
|
||||
|
||||
_enter("{%pd}", mntpt);
|
||||
|
||||
BUG_ON(!mntpt->d_inode);
|
||||
BUG_ON(!d_inode(mntpt));
|
||||
|
||||
ret = -ENOMEM;
|
||||
devname = (char *) get_zeroed_page(GFP_KERNEL);
|
||||
@ -145,7 +145,7 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
|
||||
if (!options)
|
||||
goto error_no_options;
|
||||
|
||||
vnode = AFS_FS_I(mntpt->d_inode);
|
||||
vnode = AFS_FS_I(d_inode(mntpt));
|
||||
if (test_bit(AFS_VNODE_PSEUDODIR, &vnode->flags)) {
|
||||
/* if the directory is a pseudo directory, use the d_name */
|
||||
static const char afs_root_cell[] = ":root.cell.";
|
||||
@ -169,14 +169,14 @@ static struct vfsmount *afs_mntpt_do_automount(struct dentry *mntpt)
|
||||
}
|
||||
} else {
|
||||
/* read the contents of the AFS special symlink */
|
||||
loff_t size = i_size_read(mntpt->d_inode);
|
||||
loff_t size = i_size_read(d_inode(mntpt));
|
||||
char *buf;
|
||||
|
||||
ret = -EINVAL;
|
||||
if (size > PAGE_SIZE - 1)
|
||||
goto error_no_page;
|
||||
|
||||
page = read_mapping_page(mntpt->d_inode->i_mapping, 0, NULL);
|
||||
page = read_mapping_page(d_inode(mntpt)->i_mapping, 0, NULL);
|
||||
if (IS_ERR(page)) {
|
||||
ret = PTR_ERR(page);
|
||||
goto error_no_page;
|
||||
|
@ -529,7 +529,7 @@ static void afs_destroy_inode(struct inode *inode)
|
||||
static int afs_statfs(struct dentry *dentry, struct kstatfs *buf)
|
||||
{
|
||||
struct afs_volume_status vs;
|
||||
struct afs_vnode *vnode = AFS_FS_I(dentry->d_inode);
|
||||
struct afs_vnode *vnode = AFS_FS_I(d_inode(dentry));
|
||||
struct key *key;
|
||||
int ret;
|
||||
|
||||
|
@ -235,12 +235,12 @@ static inline u32 autofs4_get_dev(struct autofs_sb_info *sbi)
|
||||
|
||||
static inline u64 autofs4_get_ino(struct autofs_sb_info *sbi)
|
||||
{
|
||||
return sbi->sb->s_root->d_inode->i_ino;
|
||||
return d_inode(sbi->sb->s_root)->i_ino;
|
||||
}
|
||||
|
||||
static inline int simple_positive(struct dentry *dentry)
|
||||
{
|
||||
return dentry->d_inode && !d_unhashed(dentry);
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
static inline void __autofs4_add_expiring(struct dentry *dentry)
|
||||
|
@ -374,7 +374,7 @@ static struct dentry *should_expire(struct dentry *dentry,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (dentry->d_inode && d_is_symlink(dentry)) {
|
||||
if (d_really_is_positive(dentry) && d_is_symlink(dentry)) {
|
||||
DPRINTK("checking symlink %p %pd", dentry, dentry);
|
||||
/*
|
||||
* A symlink can't be "busy" in the usual sense so
|
||||
|
@ -71,7 +71,7 @@ void autofs4_kill_sb(struct super_block *sb)
|
||||
static int autofs4_show_options(struct seq_file *m, struct dentry *root)
|
||||
{
|
||||
struct autofs_sb_info *sbi = autofs4_sbi(root->d_sb);
|
||||
struct inode *root_inode = root->d_sb->s_root->d_inode;
|
||||
struct inode *root_inode = d_inode(root->d_sb->s_root);
|
||||
|
||||
if (!sbi)
|
||||
return 0;
|
||||
@ -352,8 +352,8 @@ struct inode *autofs4_get_inode(struct super_block *sb, umode_t mode)
|
||||
|
||||
inode->i_mode = mode;
|
||||
if (sb->s_root) {
|
||||
inode->i_uid = sb->s_root->d_inode->i_uid;
|
||||
inode->i_gid = sb->s_root->d_inode->i_gid;
|
||||
inode->i_uid = d_inode(sb->s_root)->i_uid;
|
||||
inode->i_gid = d_inode(sb->s_root)->i_gid;
|
||||
}
|
||||
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
|
||||
inode->i_ino = get_next_ino();
|
||||
|
@ -240,7 +240,7 @@ static struct dentry *autofs4_lookup_expiring(struct dentry *dentry,
|
||||
spin_lock(&expiring->d_lock);
|
||||
|
||||
/* We've already been dentry_iput or unlinked */
|
||||
if (!expiring->d_inode)
|
||||
if (d_really_is_negative(expiring))
|
||||
goto next;
|
||||
|
||||
qstr = &expiring->d_name;
|
||||
@ -371,7 +371,7 @@ static struct vfsmount *autofs4_d_automount(struct path *path)
|
||||
* having d_mountpoint() true, so there's no need to call back
|
||||
* to the daemon.
|
||||
*/
|
||||
if (dentry->d_inode && d_is_symlink(dentry)) {
|
||||
if (d_really_is_positive(dentry) && d_is_symlink(dentry)) {
|
||||
spin_unlock(&sbi->fs_lock);
|
||||
goto done;
|
||||
}
|
||||
@ -459,7 +459,7 @@ static int autofs4_d_manage(struct dentry *dentry, bool rcu_walk)
|
||||
return 0;
|
||||
if (d_mountpoint(dentry))
|
||||
return 0;
|
||||
inode = ACCESS_ONCE(dentry->d_inode);
|
||||
inode = d_inode_rcu(dentry);
|
||||
if (inode && S_ISLNK(inode->i_mode))
|
||||
return -EISDIR;
|
||||
if (list_empty(&dentry->d_subdirs))
|
||||
@ -485,7 +485,7 @@ static int autofs4_d_manage(struct dentry *dentry, bool rcu_walk)
|
||||
* an incorrect ELOOP error return.
|
||||
*/
|
||||
if ((!d_mountpoint(dentry) && !simple_empty(dentry)) ||
|
||||
(dentry->d_inode && d_is_symlink(dentry)))
|
||||
(d_really_is_positive(dentry) && d_is_symlink(dentry)))
|
||||
status = -EISDIR;
|
||||
}
|
||||
spin_unlock(&sbi->fs_lock);
|
||||
@ -625,8 +625,8 @@ static int autofs4_dir_unlink(struct inode *dir, struct dentry *dentry)
|
||||
}
|
||||
dput(ino->dentry);
|
||||
|
||||
dentry->d_inode->i_size = 0;
|
||||
clear_nlink(dentry->d_inode);
|
||||
d_inode(dentry)->i_size = 0;
|
||||
clear_nlink(d_inode(dentry));
|
||||
|
||||
dir->i_mtime = CURRENT_TIME;
|
||||
|
||||
@ -719,8 +719,8 @@ static int autofs4_dir_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
atomic_dec(&p_ino->count);
|
||||
}
|
||||
dput(ino->dentry);
|
||||
dentry->d_inode->i_size = 0;
|
||||
clear_nlink(dentry->d_inode);
|
||||
d_inode(dentry)->i_size = 0;
|
||||
clear_nlink(d_inode(dentry));
|
||||
|
||||
if (dir->i_nlink)
|
||||
drop_nlink(dir);
|
||||
@ -839,7 +839,7 @@ static inline int autofs4_ask_umount(struct vfsmount *mnt, int __user *p)
|
||||
*/
|
||||
int is_autofs4_dentry(struct dentry *dentry)
|
||||
{
|
||||
return dentry && dentry->d_inode &&
|
||||
return dentry && d_really_is_positive(dentry) &&
|
||||
dentry->d_op == &autofs4_dentry_operations &&
|
||||
dentry->d_fsdata != NULL;
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
struct autofs_info *ino = autofs4_dentry_ino(dentry);
|
||||
if (ino && !autofs4_oz_mode(sbi))
|
||||
ino->last_used = jiffies;
|
||||
nd_set_link(nd, dentry->d_inode->i_private);
|
||||
nd_set_link(nd, d_inode(dentry)->i_private);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -322,7 +322,7 @@ static int validate_request(struct autofs_wait_queue **wait,
|
||||
* continue on and create a new request.
|
||||
*/
|
||||
if (!IS_ROOT(dentry)) {
|
||||
if (dentry->d_inode && d_unhashed(dentry)) {
|
||||
if (d_really_is_positive(dentry) && d_unhashed(dentry)) {
|
||||
struct dentry *parent = dentry->d_parent;
|
||||
new = d_lookup(parent, &dentry->d_name);
|
||||
if (new)
|
||||
@ -364,7 +364,7 @@ int autofs4_wait(struct autofs_sb_info *sbi, struct dentry *dentry,
|
||||
if (pid == 0 || tgid == 0)
|
||||
return -ENOENT;
|
||||
|
||||
if (!dentry->d_inode) {
|
||||
if (d_really_is_negative(dentry)) {
|
||||
/*
|
||||
* A wait for a negative dentry is invalid for certain
|
||||
* cases. A direct or offset mount "always" has its mount
|
||||
|
@ -471,7 +471,7 @@ static void *
|
||||
befs_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
{
|
||||
struct super_block *sb = dentry->d_sb;
|
||||
struct befs_inode_info *befs_ino = BEFS_I(dentry->d_inode);
|
||||
struct befs_inode_info *befs_ino = BEFS_I(d_inode(dentry));
|
||||
befs_data_stream *data = &befs_ino->i_data.ds;
|
||||
befs_off_t len = data->size;
|
||||
char *link;
|
||||
@ -501,7 +501,7 @@ befs_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
static void *
|
||||
befs_fast_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
{
|
||||
struct befs_inode_info *befs_ino = BEFS_I(dentry->d_inode);
|
||||
struct befs_inode_info *befs_ino = BEFS_I(d_inode(dentry));
|
||||
|
||||
nd_set_link(nd, befs_ino->i_data.symlink);
|
||||
return NULL;
|
||||
|
@ -153,7 +153,7 @@ static struct dentry *bfs_lookup(struct inode *dir, struct dentry *dentry,
|
||||
static int bfs_link(struct dentry *old, struct inode *dir,
|
||||
struct dentry *new)
|
||||
{
|
||||
struct inode *inode = old->d_inode;
|
||||
struct inode *inode = d_inode(old);
|
||||
struct bfs_sb_info *info = BFS_SB(inode->i_sb);
|
||||
int err;
|
||||
|
||||
@ -176,7 +176,7 @@ static int bfs_link(struct dentry *old, struct inode *dir,
|
||||
static int bfs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
int error = -ENOENT;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct buffer_head *bh;
|
||||
struct bfs_dirent *de;
|
||||
struct bfs_sb_info *info = BFS_SB(inode->i_sb);
|
||||
@ -216,7 +216,7 @@ static int bfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
int error = -ENOENT;
|
||||
|
||||
old_bh = new_bh = NULL;
|
||||
old_inode = old_dentry->d_inode;
|
||||
old_inode = d_inode(old_dentry);
|
||||
if (S_ISDIR(old_inode->i_mode))
|
||||
return -EINVAL;
|
||||
|
||||
@ -231,7 +231,7 @@ static int bfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
goto end_rename;
|
||||
|
||||
error = -EPERM;
|
||||
new_inode = new_dentry->d_inode;
|
||||
new_inode = d_inode(new_dentry);
|
||||
new_bh = bfs_find_entry(new_dir,
|
||||
new_dentry->d_name.name,
|
||||
new_dentry->d_name.len, &new_de);
|
||||
|
@ -591,7 +591,7 @@ static void kill_node(Node *e)
|
||||
write_unlock(&entries_lock);
|
||||
|
||||
if (dentry) {
|
||||
drop_nlink(dentry->d_inode);
|
||||
drop_nlink(d_inode(dentry));
|
||||
d_drop(dentry);
|
||||
dput(dentry);
|
||||
simple_release_fs(&bm_mnt, &entry_count);
|
||||
@ -638,11 +638,11 @@ static ssize_t bm_entry_write(struct file *file, const char __user *buffer,
|
||||
case 3:
|
||||
/* Delete this handler. */
|
||||
root = dget(file->f_path.dentry->d_sb->s_root);
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
|
||||
kill_node(e);
|
||||
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
dput(root);
|
||||
break;
|
||||
default:
|
||||
@ -675,14 +675,14 @@ static ssize_t bm_register_write(struct file *file, const char __user *buffer,
|
||||
return PTR_ERR(e);
|
||||
|
||||
root = dget(sb->s_root);
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
dentry = lookup_one_len(e->name, root, strlen(e->name));
|
||||
err = PTR_ERR(dentry);
|
||||
if (IS_ERR(dentry))
|
||||
goto out;
|
||||
|
||||
err = -EEXIST;
|
||||
if (dentry->d_inode)
|
||||
if (d_really_is_positive(dentry))
|
||||
goto out2;
|
||||
|
||||
inode = bm_get_inode(sb, S_IFREG | 0644);
|
||||
@ -711,7 +711,7 @@ static ssize_t bm_register_write(struct file *file, const char __user *buffer,
|
||||
out2:
|
||||
dput(dentry);
|
||||
out:
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
dput(root);
|
||||
|
||||
if (err) {
|
||||
@ -754,12 +754,12 @@ static ssize_t bm_status_write(struct file *file, const char __user *buffer,
|
||||
case 3:
|
||||
/* Delete all handlers. */
|
||||
root = dget(file->f_path.dentry->d_sb->s_root);
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
|
||||
while (!list_empty(&entries))
|
||||
kill_node(list_entry(entries.next, Node, list));
|
||||
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
dput(root);
|
||||
break;
|
||||
default:
|
||||
|
@ -152,7 +152,8 @@ blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, loff_t offset)
|
||||
struct inode *inode = file->f_mapping->host;
|
||||
|
||||
return __blockdev_direct_IO(iocb, inode, I_BDEV(inode), iter, offset,
|
||||
blkdev_get_block, NULL, NULL, 0);
|
||||
blkdev_get_block, NULL, NULL,
|
||||
DIO_SKIP_DIO_COUNT);
|
||||
}
|
||||
|
||||
int __sync_blockdev(struct block_device *bdev, int wait)
|
||||
@ -1716,7 +1717,7 @@ struct block_device *lookup_bdev(const char *pathname)
|
||||
if (error)
|
||||
return ERR_PTR(error);
|
||||
|
||||
inode = path.dentry->d_inode;
|
||||
inode = d_backing_inode(path.dentry);
|
||||
error = -ENOTBLK;
|
||||
if (!S_ISBLK(inode->i_mode))
|
||||
goto fail;
|
||||
|
@ -152,7 +152,7 @@ static struct dentry *btrfs_fh_to_dentry(struct super_block *sb, struct fid *fh,
|
||||
|
||||
static struct dentry *btrfs_get_parent(struct dentry *child)
|
||||
{
|
||||
struct inode *dir = child->d_inode;
|
||||
struct inode *dir = d_inode(child);
|
||||
struct btrfs_root *root = BTRFS_I(dir)->root;
|
||||
struct btrfs_path *path;
|
||||
struct extent_buffer *leaf;
|
||||
@ -220,8 +220,8 @@ fail:
|
||||
static int btrfs_get_name(struct dentry *parent, char *name,
|
||||
struct dentry *child)
|
||||
{
|
||||
struct inode *inode = child->d_inode;
|
||||
struct inode *dir = parent->d_inode;
|
||||
struct inode *inode = d_inode(child);
|
||||
struct inode *dir = d_inode(parent);
|
||||
struct btrfs_path *path;
|
||||
struct btrfs_root *root = BTRFS_I(dir)->root;
|
||||
struct btrfs_inode_ref *iref;
|
||||
|
@ -1862,7 +1862,7 @@ static int start_ordered_ops(struct inode *inode, loff_t start, loff_t end)
|
||||
int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
|
||||
{
|
||||
struct dentry *dentry = file->f_path.dentry;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct btrfs_root *root = BTRFS_I(inode)->root;
|
||||
struct btrfs_trans_handle *trans;
|
||||
struct btrfs_log_ctx ctx;
|
||||
|
@ -4020,16 +4020,16 @@ static int btrfs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
struct btrfs_root *root = BTRFS_I(dir)->root;
|
||||
struct btrfs_trans_handle *trans;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
int ret;
|
||||
|
||||
trans = __unlink_start_trans(dir);
|
||||
if (IS_ERR(trans))
|
||||
return PTR_ERR(trans);
|
||||
|
||||
btrfs_record_unlink_dir(trans, dir, dentry->d_inode, 0);
|
||||
btrfs_record_unlink_dir(trans, dir, d_inode(dentry), 0);
|
||||
|
||||
ret = btrfs_unlink_inode(trans, root, dir, dentry->d_inode,
|
||||
ret = btrfs_unlink_inode(trans, root, dir, d_inode(dentry),
|
||||
dentry->d_name.name, dentry->d_name.len);
|
||||
if (ret)
|
||||
goto out;
|
||||
@ -4128,7 +4128,7 @@ out:
|
||||
|
||||
static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
int err = 0;
|
||||
struct btrfs_root *root = BTRFS_I(dir)->root;
|
||||
struct btrfs_trans_handle *trans;
|
||||
@ -4155,7 +4155,7 @@ static int btrfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
goto out;
|
||||
|
||||
/* now the directory is empty */
|
||||
err = btrfs_unlink_inode(trans, root, dir, dentry->d_inode,
|
||||
err = btrfs_unlink_inode(trans, root, dir, d_inode(dentry),
|
||||
dentry->d_name.name, dentry->d_name.len);
|
||||
if (!err)
|
||||
btrfs_i_size_write(inode, 0);
|
||||
@ -4915,7 +4915,7 @@ static int btrfs_setsize(struct inode *inode, struct iattr *attr)
|
||||
|
||||
static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct btrfs_root *root = BTRFS_I(inode)->root;
|
||||
int err;
|
||||
|
||||
@ -5547,10 +5547,10 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
|
||||
static int btrfs_dentry_delete(const struct dentry *dentry)
|
||||
{
|
||||
struct btrfs_root *root;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
if (!inode && !IS_ROOT(dentry))
|
||||
inode = dentry->d_parent->d_inode;
|
||||
inode = d_inode(dentry->d_parent);
|
||||
|
||||
if (inode) {
|
||||
root = BTRFS_I(inode)->root;
|
||||
@ -6357,7 +6357,7 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
|
||||
{
|
||||
struct btrfs_trans_handle *trans;
|
||||
struct btrfs_root *root = BTRFS_I(dir)->root;
|
||||
struct inode *inode = old_dentry->d_inode;
|
||||
struct inode *inode = d_inode(old_dentry);
|
||||
u64 index;
|
||||
int err;
|
||||
int drop_inode = 0;
|
||||
@ -8260,7 +8260,7 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
|
||||
if (check_direct_IO(BTRFS_I(inode)->root, iocb, iter, offset))
|
||||
return 0;
|
||||
|
||||
atomic_inc(&inode->i_dio_count);
|
||||
inode_dio_begin(inode);
|
||||
smp_mb__after_atomic();
|
||||
|
||||
/*
|
||||
@ -8300,7 +8300,7 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
|
||||
current->journal_info = &outstanding_extents;
|
||||
} else if (test_bit(BTRFS_INODE_READDIO_NEED_LOCK,
|
||||
&BTRFS_I(inode)->runtime_flags)) {
|
||||
inode_dio_done(inode);
|
||||
inode_dio_end(inode);
|
||||
flags = DIO_LOCKING | DIO_SKIP_HOLES;
|
||||
wakeup = false;
|
||||
}
|
||||
@ -8319,7 +8319,7 @@ static ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
|
||||
}
|
||||
out:
|
||||
if (wakeup)
|
||||
inode_dio_done(inode);
|
||||
inode_dio_end(inode);
|
||||
if (relock)
|
||||
mutex_lock(&inode->i_mutex);
|
||||
|
||||
@ -9006,7 +9006,7 @@ static int btrfs_getattr(struct vfsmount *mnt,
|
||||
struct dentry *dentry, struct kstat *stat)
|
||||
{
|
||||
u64 delalloc_bytes;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
u32 blocksize = inode->i_sb->s_blocksize;
|
||||
|
||||
generic_fillattr(inode, stat);
|
||||
@ -9027,8 +9027,8 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
struct btrfs_trans_handle *trans;
|
||||
struct btrfs_root *root = BTRFS_I(old_dir)->root;
|
||||
struct btrfs_root *dest = BTRFS_I(new_dir)->root;
|
||||
struct inode *new_inode = new_dentry->d_inode;
|
||||
struct inode *old_inode = old_dentry->d_inode;
|
||||
struct inode *new_inode = d_inode(new_dentry);
|
||||
struct inode *old_inode = d_inode(old_dentry);
|
||||
struct timespec ctime = CURRENT_TIME;
|
||||
u64 index = 0;
|
||||
u64 root_objectid;
|
||||
@ -9140,7 +9140,7 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
old_dentry->d_name.len);
|
||||
} else {
|
||||
ret = __btrfs_unlink_inode(trans, root, old_dir,
|
||||
old_dentry->d_inode,
|
||||
d_inode(old_dentry),
|
||||
old_dentry->d_name.name,
|
||||
old_dentry->d_name.len);
|
||||
if (!ret)
|
||||
@ -9164,12 +9164,12 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
BUG_ON(new_inode->i_nlink == 0);
|
||||
} else {
|
||||
ret = btrfs_unlink_inode(trans, dest, new_dir,
|
||||
new_dentry->d_inode,
|
||||
d_inode(new_dentry),
|
||||
new_dentry->d_name.name,
|
||||
new_dentry->d_name.len);
|
||||
}
|
||||
if (!ret && new_inode->i_nlink == 0)
|
||||
ret = btrfs_orphan_add(trans, new_dentry->d_inode);
|
||||
ret = btrfs_orphan_add(trans, d_inode(new_dentry));
|
||||
if (ret) {
|
||||
btrfs_abort_transaction(trans, root, ret);
|
||||
goto out_fail;
|
||||
|
@ -724,7 +724,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
inode = btrfs_lookup_dentry(dentry->d_parent->d_inode, dentry);
|
||||
inode = btrfs_lookup_dentry(d_inode(dentry->d_parent), dentry);
|
||||
if (IS_ERR(inode)) {
|
||||
ret = PTR_ERR(inode);
|
||||
goto fail;
|
||||
@ -768,10 +768,10 @@ static int btrfs_may_delete(struct inode *dir, struct dentry *victim, int isdir)
|
||||
{
|
||||
int error;
|
||||
|
||||
if (!victim->d_inode)
|
||||
if (d_really_is_negative(victim))
|
||||
return -ENOENT;
|
||||
|
||||
BUG_ON(victim->d_parent->d_inode != dir);
|
||||
BUG_ON(d_inode(victim->d_parent) != dir);
|
||||
audit_inode_child(dir, victim, AUDIT_TYPE_CHILD_DELETE);
|
||||
|
||||
error = inode_permission(dir, MAY_WRITE | MAY_EXEC);
|
||||
@ -779,8 +779,8 @@ static int btrfs_may_delete(struct inode *dir, struct dentry *victim, int isdir)
|
||||
return error;
|
||||
if (IS_APPEND(dir))
|
||||
return -EPERM;
|
||||
if (check_sticky(dir, victim->d_inode) || IS_APPEND(victim->d_inode) ||
|
||||
IS_IMMUTABLE(victim->d_inode) || IS_SWAPFILE(victim->d_inode))
|
||||
if (check_sticky(dir, d_inode(victim)) || IS_APPEND(d_inode(victim)) ||
|
||||
IS_IMMUTABLE(d_inode(victim)) || IS_SWAPFILE(d_inode(victim)))
|
||||
return -EPERM;
|
||||
if (isdir) {
|
||||
if (!d_is_dir(victim))
|
||||
@ -799,7 +799,7 @@ static int btrfs_may_delete(struct inode *dir, struct dentry *victim, int isdir)
|
||||
/* copy of may_create in fs/namei.c() */
|
||||
static inline int btrfs_may_create(struct inode *dir, struct dentry *child)
|
||||
{
|
||||
if (child->d_inode)
|
||||
if (d_really_is_positive(child))
|
||||
return -EEXIST;
|
||||
if (IS_DEADDIR(dir))
|
||||
return -ENOENT;
|
||||
@ -817,7 +817,7 @@ static noinline int btrfs_mksubvol(struct path *parent,
|
||||
u64 *async_transid, bool readonly,
|
||||
struct btrfs_qgroup_inherit *inherit)
|
||||
{
|
||||
struct inode *dir = parent->dentry->d_inode;
|
||||
struct inode *dir = d_inode(parent->dentry);
|
||||
struct dentry *dentry;
|
||||
int error;
|
||||
|
||||
@ -831,7 +831,7 @@ static noinline int btrfs_mksubvol(struct path *parent,
|
||||
goto out_unlock;
|
||||
|
||||
error = -EEXIST;
|
||||
if (dentry->d_inode)
|
||||
if (d_really_is_positive(dentry))
|
||||
goto out_dput;
|
||||
|
||||
error = btrfs_may_create(dir, dentry);
|
||||
@ -2301,7 +2301,7 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
|
||||
{
|
||||
struct dentry *parent = file->f_path.dentry;
|
||||
struct dentry *dentry;
|
||||
struct inode *dir = parent->d_inode;
|
||||
struct inode *dir = d_inode(parent);
|
||||
struct inode *inode;
|
||||
struct btrfs_root *root = BTRFS_I(dir)->root;
|
||||
struct btrfs_root *dest = NULL;
|
||||
@ -2340,12 +2340,12 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,
|
||||
goto out_unlock_dir;
|
||||
}
|
||||
|
||||
if (!dentry->d_inode) {
|
||||
if (d_really_is_negative(dentry)) {
|
||||
err = -ENOENT;
|
||||
goto out_dput;
|
||||
}
|
||||
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
dest = BTRFS_I(inode)->root;
|
||||
if (!capable(CAP_SYS_ADMIN)) {
|
||||
/*
|
||||
|
@ -925,7 +925,7 @@ setup_root:
|
||||
* a reference to the dentry. We will have already gotten a reference
|
||||
* to the inode in btrfs_fill_super so we're good to go.
|
||||
*/
|
||||
if (!new && sb->s_root->d_inode == inode) {
|
||||
if (!new && d_inode(sb->s_root) == inode) {
|
||||
iput(inode);
|
||||
return dget(sb->s_root);
|
||||
}
|
||||
@ -1230,7 +1230,7 @@ static struct dentry *mount_subvol(const char *subvol_name, int flags,
|
||||
|
||||
root = mount_subtree(mnt, subvol_name);
|
||||
|
||||
if (!IS_ERR(root) && !is_subvolume_inode(root->d_inode)) {
|
||||
if (!IS_ERR(root) && !is_subvolume_inode(d_inode(root))) {
|
||||
struct super_block *s = root->d_sb;
|
||||
dput(root);
|
||||
root = ERR_PTR(-EINVAL);
|
||||
@ -1895,8 +1895,8 @@ static int btrfs_statfs(struct dentry *dentry, struct kstatfs *buf)
|
||||
buf->f_fsid.val[0] = be32_to_cpu(fsid[0]) ^ be32_to_cpu(fsid[2]);
|
||||
buf->f_fsid.val[1] = be32_to_cpu(fsid[1]) ^ be32_to_cpu(fsid[3]);
|
||||
/* Mask in the root object ID too, to disambiguate subvols */
|
||||
buf->f_fsid.val[0] ^= BTRFS_I(dentry->d_inode)->root->objectid >> 32;
|
||||
buf->f_fsid.val[1] ^= BTRFS_I(dentry->d_inode)->root->objectid;
|
||||
buf->f_fsid.val[0] ^= BTRFS_I(d_inode(dentry))->root->objectid >> 32;
|
||||
buf->f_fsid.val[1] ^= BTRFS_I(d_inode(dentry))->root->objectid;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -4474,9 +4474,9 @@ static noinline int check_parent_dirs_for_sync(struct btrfs_trans_handle *trans,
|
||||
goto out;
|
||||
|
||||
if (!S_ISDIR(inode->i_mode)) {
|
||||
if (!parent || !parent->d_inode || sb != parent->d_inode->i_sb)
|
||||
if (!parent || d_really_is_negative(parent) || sb != d_inode(parent)->i_sb)
|
||||
goto out;
|
||||
inode = parent->d_inode;
|
||||
inode = d_inode(parent);
|
||||
}
|
||||
|
||||
while (1) {
|
||||
@ -4502,7 +4502,7 @@ static noinline int check_parent_dirs_for_sync(struct btrfs_trans_handle *trans,
|
||||
break;
|
||||
}
|
||||
|
||||
if (!parent || !parent->d_inode || sb != parent->d_inode->i_sb)
|
||||
if (!parent || d_really_is_negative(parent) || sb != d_inode(parent)->i_sb)
|
||||
break;
|
||||
|
||||
if (IS_ROOT(parent))
|
||||
@ -4511,7 +4511,7 @@ static noinline int check_parent_dirs_for_sync(struct btrfs_trans_handle *trans,
|
||||
parent = dget_parent(parent);
|
||||
dput(old_parent);
|
||||
old_parent = parent;
|
||||
inode = parent->d_inode;
|
||||
inode = d_inode(parent);
|
||||
|
||||
}
|
||||
dput(old_parent);
|
||||
@ -4777,10 +4777,10 @@ static int btrfs_log_inode_parent(struct btrfs_trans_handle *trans,
|
||||
log_dentries = true;
|
||||
|
||||
while (1) {
|
||||
if (!parent || !parent->d_inode || sb != parent->d_inode->i_sb)
|
||||
if (!parent || d_really_is_negative(parent) || sb != d_inode(parent)->i_sb)
|
||||
break;
|
||||
|
||||
inode = parent->d_inode;
|
||||
inode = d_inode(parent);
|
||||
if (root != BTRFS_I(inode)->root)
|
||||
break;
|
||||
|
||||
@ -4845,7 +4845,7 @@ int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans,
|
||||
struct dentry *parent = dget_parent(dentry);
|
||||
int ret;
|
||||
|
||||
ret = btrfs_log_inode_parent(trans, root, dentry->d_inode, parent,
|
||||
ret = btrfs_log_inode_parent(trans, root, d_inode(dentry), parent,
|
||||
start, end, 0, ctx);
|
||||
dput(parent);
|
||||
|
||||
|
@ -261,7 +261,7 @@ out:
|
||||
ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size)
|
||||
{
|
||||
struct btrfs_key key, found_key;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct btrfs_root *root = BTRFS_I(inode)->root;
|
||||
struct btrfs_path *path;
|
||||
struct extent_buffer *leaf;
|
||||
@ -411,13 +411,13 @@ ssize_t btrfs_getxattr(struct dentry *dentry, const char *name,
|
||||
ret = btrfs_is_valid_xattr(name);
|
||||
if (ret)
|
||||
return ret;
|
||||
return __btrfs_getxattr(dentry->d_inode, name, buffer, size);
|
||||
return __btrfs_getxattr(d_inode(dentry), name, buffer, size);
|
||||
}
|
||||
|
||||
int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
||||
size_t size, int flags)
|
||||
{
|
||||
struct btrfs_root *root = BTRFS_I(dentry->d_inode)->root;
|
||||
struct btrfs_root *root = BTRFS_I(d_inode(dentry))->root;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
@ -440,19 +440,19 @@ int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
||||
return ret;
|
||||
|
||||
if (!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN))
|
||||
return btrfs_set_prop(dentry->d_inode, name,
|
||||
return btrfs_set_prop(d_inode(dentry), name,
|
||||
value, size, flags);
|
||||
|
||||
if (size == 0)
|
||||
value = ""; /* empty EA, do not remove */
|
||||
|
||||
return __btrfs_setxattr(NULL, dentry->d_inode, name, value, size,
|
||||
return __btrfs_setxattr(NULL, d_inode(dentry), name, value, size,
|
||||
flags);
|
||||
}
|
||||
|
||||
int btrfs_removexattr(struct dentry *dentry, const char *name)
|
||||
{
|
||||
struct btrfs_root *root = BTRFS_I(dentry->d_inode)->root;
|
||||
struct btrfs_root *root = BTRFS_I(d_inode(dentry))->root;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
@ -475,10 +475,10 @@ int btrfs_removexattr(struct dentry *dentry, const char *name)
|
||||
return ret;
|
||||
|
||||
if (!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN))
|
||||
return btrfs_set_prop(dentry->d_inode, name,
|
||||
return btrfs_set_prop(d_inode(dentry), name,
|
||||
NULL, 0, XATTR_REPLACE);
|
||||
|
||||
return __btrfs_setxattr(NULL, dentry->d_inode, name, NULL, 0,
|
||||
return __btrfs_setxattr(NULL, d_inode(dentry), name, NULL, 0,
|
||||
XATTR_REPLACE);
|
||||
}
|
||||
|
||||
|
@ -123,11 +123,11 @@ static int cachefiles_daemon_add_cache(struct cachefiles_cache *cache)
|
||||
|
||||
/* check parameters */
|
||||
ret = -EOPNOTSUPP;
|
||||
if (!root->d_inode ||
|
||||
!root->d_inode->i_op->lookup ||
|
||||
!root->d_inode->i_op->mkdir ||
|
||||
!root->d_inode->i_op->setxattr ||
|
||||
!root->d_inode->i_op->getxattr ||
|
||||
if (d_is_negative(root) ||
|
||||
!d_backing_inode(root)->i_op->lookup ||
|
||||
!d_backing_inode(root)->i_op->mkdir ||
|
||||
!d_backing_inode(root)->i_op->setxattr ||
|
||||
!d_backing_inode(root)->i_op->getxattr ||
|
||||
!root->d_sb->s_op->statfs ||
|
||||
!root->d_sb->s_op->sync_fs)
|
||||
goto error_unsupported;
|
||||
|
@ -441,12 +441,12 @@ static int cachefiles_attr_changed(struct fscache_object *_object)
|
||||
|
||||
fscache_set_store_limit(&object->fscache, ni_size);
|
||||
|
||||
oi_size = i_size_read(object->backer->d_inode);
|
||||
oi_size = i_size_read(d_backing_inode(object->backer));
|
||||
if (oi_size == ni_size)
|
||||
return 0;
|
||||
|
||||
cachefiles_begin_secure(cache, &saved_cred);
|
||||
mutex_lock(&object->backer->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(object->backer)->i_mutex);
|
||||
|
||||
/* if there's an extension to a partial page at the end of the backing
|
||||
* file, we need to discard the partial page so that we pick up new
|
||||
@ -465,7 +465,7 @@ static int cachefiles_attr_changed(struct fscache_object *_object)
|
||||
ret = notify_change(object->backer, &newattrs, NULL);
|
||||
|
||||
truncate_failed:
|
||||
mutex_unlock(&object->backer->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(object->backer)->i_mutex);
|
||||
cachefiles_end_secure(cache, saved_cred);
|
||||
|
||||
if (ret == -EIO) {
|
||||
|
@ -286,13 +286,13 @@ static int cachefiles_bury_object(struct cachefiles_cache *cache,
|
||||
if (ret < 0) {
|
||||
cachefiles_io_error(cache, "Unlink security error");
|
||||
} else {
|
||||
ret = vfs_unlink(dir->d_inode, rep, NULL);
|
||||
ret = vfs_unlink(d_inode(dir), rep, NULL);
|
||||
|
||||
if (preemptive)
|
||||
cachefiles_mark_object_buried(cache, rep);
|
||||
}
|
||||
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
|
||||
if (ret == -EIO)
|
||||
cachefiles_io_error(cache, "Unlink failed");
|
||||
@ -303,7 +303,7 @@ static int cachefiles_bury_object(struct cachefiles_cache *cache,
|
||||
|
||||
/* directories have to be moved to the graveyard */
|
||||
_debug("move stale object to graveyard");
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
|
||||
try_again:
|
||||
/* first step is to make up a grave dentry in the graveyard */
|
||||
@ -355,7 +355,7 @@ try_again:
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (grave->d_inode) {
|
||||
if (d_is_positive(grave)) {
|
||||
unlock_rename(cache->graveyard, dir);
|
||||
dput(grave);
|
||||
grave = NULL;
|
||||
@ -387,8 +387,8 @@ try_again:
|
||||
if (ret < 0) {
|
||||
cachefiles_io_error(cache, "Rename security error %d", ret);
|
||||
} else {
|
||||
ret = vfs_rename(dir->d_inode, rep,
|
||||
cache->graveyard->d_inode, grave, NULL, 0);
|
||||
ret = vfs_rename(d_inode(dir), rep,
|
||||
d_inode(cache->graveyard), grave, NULL, 0);
|
||||
if (ret != 0 && ret != -ENOMEM)
|
||||
cachefiles_io_error(cache,
|
||||
"Rename failed with error %d", ret);
|
||||
@ -415,18 +415,18 @@ int cachefiles_delete_object(struct cachefiles_cache *cache,
|
||||
_enter(",OBJ%x{%p}", object->fscache.debug_id, object->dentry);
|
||||
|
||||
ASSERT(object->dentry);
|
||||
ASSERT(object->dentry->d_inode);
|
||||
ASSERT(d_backing_inode(object->dentry));
|
||||
ASSERT(object->dentry->d_parent);
|
||||
|
||||
dir = dget_parent(object->dentry);
|
||||
|
||||
mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_PARENT);
|
||||
mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_PARENT);
|
||||
|
||||
if (test_bit(CACHEFILES_OBJECT_BURIED, &object->flags)) {
|
||||
/* object allocation for the same key preemptively deleted this
|
||||
* object's file so that it could create its own file */
|
||||
_debug("object preemptively buried");
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
ret = 0;
|
||||
} else {
|
||||
/* we need to check that our parent is _still_ our parent - it
|
||||
@ -438,7 +438,7 @@ int cachefiles_delete_object(struct cachefiles_cache *cache,
|
||||
/* it got moved, presumably by cachefilesd culling it,
|
||||
* so it's no longer in the key path and we can ignore
|
||||
* it */
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
@ -473,7 +473,7 @@ int cachefiles_walk_to_object(struct cachefiles_object *parent,
|
||||
path.mnt = cache->mnt;
|
||||
|
||||
ASSERT(parent->dentry);
|
||||
ASSERT(parent->dentry->d_inode);
|
||||
ASSERT(d_backing_inode(parent->dentry));
|
||||
|
||||
if (!(d_is_dir(parent->dentry))) {
|
||||
// TODO: convert file to dir
|
||||
@ -497,7 +497,7 @@ lookup_again:
|
||||
/* search the current directory for the element name */
|
||||
_debug("lookup '%s'", name);
|
||||
|
||||
mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_PARENT);
|
||||
mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_PARENT);
|
||||
|
||||
start = jiffies;
|
||||
next = lookup_one_len(name, dir, nlen);
|
||||
@ -505,21 +505,21 @@ lookup_again:
|
||||
if (IS_ERR(next))
|
||||
goto lookup_error;
|
||||
|
||||
_debug("next -> %p %s", next, next->d_inode ? "positive" : "negative");
|
||||
_debug("next -> %p %s", next, d_backing_inode(next) ? "positive" : "negative");
|
||||
|
||||
if (!key)
|
||||
object->new = !next->d_inode;
|
||||
object->new = !d_backing_inode(next);
|
||||
|
||||
/* if this element of the path doesn't exist, then the lookup phase
|
||||
* failed, and we can release any readers in the certain knowledge that
|
||||
* there's nothing for them to actually read */
|
||||
if (!next->d_inode)
|
||||
if (d_is_negative(next))
|
||||
fscache_object_lookup_negative(&object->fscache);
|
||||
|
||||
/* we need to create the object if it's negative */
|
||||
if (key || object->type == FSCACHE_COOKIE_TYPE_INDEX) {
|
||||
/* index objects and intervening tree levels must be subdirs */
|
||||
if (!next->d_inode) {
|
||||
if (d_is_negative(next)) {
|
||||
ret = cachefiles_has_space(cache, 1, 0);
|
||||
if (ret < 0)
|
||||
goto create_error;
|
||||
@ -529,26 +529,26 @@ lookup_again:
|
||||
if (ret < 0)
|
||||
goto create_error;
|
||||
start = jiffies;
|
||||
ret = vfs_mkdir(dir->d_inode, next, 0);
|
||||
ret = vfs_mkdir(d_inode(dir), next, 0);
|
||||
cachefiles_hist(cachefiles_mkdir_histogram, start);
|
||||
if (ret < 0)
|
||||
goto create_error;
|
||||
|
||||
ASSERT(next->d_inode);
|
||||
ASSERT(d_backing_inode(next));
|
||||
|
||||
_debug("mkdir -> %p{%p{ino=%lu}}",
|
||||
next, next->d_inode, next->d_inode->i_ino);
|
||||
next, d_backing_inode(next), d_backing_inode(next)->i_ino);
|
||||
|
||||
} else if (!d_can_lookup(next)) {
|
||||
pr_err("inode %lu is not a directory\n",
|
||||
next->d_inode->i_ino);
|
||||
d_backing_inode(next)->i_ino);
|
||||
ret = -ENOBUFS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* non-index objects start out life as files */
|
||||
if (!next->d_inode) {
|
||||
if (d_is_negative(next)) {
|
||||
ret = cachefiles_has_space(cache, 1, 0);
|
||||
if (ret < 0)
|
||||
goto create_error;
|
||||
@ -558,21 +558,21 @@ lookup_again:
|
||||
if (ret < 0)
|
||||
goto create_error;
|
||||
start = jiffies;
|
||||
ret = vfs_create(dir->d_inode, next, S_IFREG, true);
|
||||
ret = vfs_create(d_inode(dir), next, S_IFREG, true);
|
||||
cachefiles_hist(cachefiles_create_histogram, start);
|
||||
if (ret < 0)
|
||||
goto create_error;
|
||||
|
||||
ASSERT(next->d_inode);
|
||||
ASSERT(d_backing_inode(next));
|
||||
|
||||
_debug("create -> %p{%p{ino=%lu}}",
|
||||
next, next->d_inode, next->d_inode->i_ino);
|
||||
next, d_backing_inode(next), d_backing_inode(next)->i_ino);
|
||||
|
||||
} else if (!d_can_lookup(next) &&
|
||||
!d_is_reg(next)
|
||||
) {
|
||||
pr_err("inode %lu is not a file or directory\n",
|
||||
next->d_inode->i_ino);
|
||||
d_backing_inode(next)->i_ino);
|
||||
ret = -ENOBUFS;
|
||||
goto error;
|
||||
}
|
||||
@ -581,7 +581,7 @@ lookup_again:
|
||||
/* process the next component */
|
||||
if (key) {
|
||||
_debug("advance");
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
dput(dir);
|
||||
dir = next;
|
||||
next = NULL;
|
||||
@ -617,7 +617,7 @@ lookup_again:
|
||||
/* note that we're now using this object */
|
||||
ret = cachefiles_mark_object_active(cache, object);
|
||||
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
dput(dir);
|
||||
dir = NULL;
|
||||
|
||||
@ -646,7 +646,7 @@ lookup_again:
|
||||
const struct address_space_operations *aops;
|
||||
|
||||
ret = -EPERM;
|
||||
aops = object->dentry->d_inode->i_mapping->a_ops;
|
||||
aops = d_backing_inode(object->dentry)->i_mapping->a_ops;
|
||||
if (!aops->bmap)
|
||||
goto check_error;
|
||||
|
||||
@ -659,7 +659,7 @@ lookup_again:
|
||||
object->new = 0;
|
||||
fscache_obtained_object(&object->fscache);
|
||||
|
||||
_leave(" = 0 [%lu]", object->dentry->d_inode->i_ino);
|
||||
_leave(" = 0 [%lu]", d_backing_inode(object->dentry)->i_ino);
|
||||
return 0;
|
||||
|
||||
create_error:
|
||||
@ -695,7 +695,7 @@ lookup_error:
|
||||
cachefiles_io_error(cache, "Lookup failed");
|
||||
next = NULL;
|
||||
error:
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
dput(next);
|
||||
error_out2:
|
||||
dput(dir);
|
||||
@ -719,7 +719,7 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
||||
_enter(",,%s", dirname);
|
||||
|
||||
/* search the current directory for the element name */
|
||||
mutex_lock(&dir->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dir)->i_mutex);
|
||||
|
||||
start = jiffies;
|
||||
subdir = lookup_one_len(dirname, dir, strlen(dirname));
|
||||
@ -731,10 +731,10 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
||||
}
|
||||
|
||||
_debug("subdir -> %p %s",
|
||||
subdir, subdir->d_inode ? "positive" : "negative");
|
||||
subdir, d_backing_inode(subdir) ? "positive" : "negative");
|
||||
|
||||
/* we need to create the subdir if it doesn't exist yet */
|
||||
if (!subdir->d_inode) {
|
||||
if (d_is_negative(subdir)) {
|
||||
ret = cachefiles_has_space(cache, 1, 0);
|
||||
if (ret < 0)
|
||||
goto mkdir_error;
|
||||
@ -746,22 +746,22 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
||||
ret = security_path_mkdir(&path, subdir, 0700);
|
||||
if (ret < 0)
|
||||
goto mkdir_error;
|
||||
ret = vfs_mkdir(dir->d_inode, subdir, 0700);
|
||||
ret = vfs_mkdir(d_inode(dir), subdir, 0700);
|
||||
if (ret < 0)
|
||||
goto mkdir_error;
|
||||
|
||||
ASSERT(subdir->d_inode);
|
||||
ASSERT(d_backing_inode(subdir));
|
||||
|
||||
_debug("mkdir -> %p{%p{ino=%lu}}",
|
||||
subdir,
|
||||
subdir->d_inode,
|
||||
subdir->d_inode->i_ino);
|
||||
d_backing_inode(subdir),
|
||||
d_backing_inode(subdir)->i_ino);
|
||||
}
|
||||
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
|
||||
/* we need to make sure the subdir is a directory */
|
||||
ASSERT(subdir->d_inode);
|
||||
ASSERT(d_backing_inode(subdir));
|
||||
|
||||
if (!d_can_lookup(subdir)) {
|
||||
pr_err("%s is not a directory\n", dirname);
|
||||
@ -770,18 +770,18 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
|
||||
}
|
||||
|
||||
ret = -EPERM;
|
||||
if (!subdir->d_inode->i_op->setxattr ||
|
||||
!subdir->d_inode->i_op->getxattr ||
|
||||
!subdir->d_inode->i_op->lookup ||
|
||||
!subdir->d_inode->i_op->mkdir ||
|
||||
!subdir->d_inode->i_op->create ||
|
||||
(!subdir->d_inode->i_op->rename &&
|
||||
!subdir->d_inode->i_op->rename2) ||
|
||||
!subdir->d_inode->i_op->rmdir ||
|
||||
!subdir->d_inode->i_op->unlink)
|
||||
if (!d_backing_inode(subdir)->i_op->setxattr ||
|
||||
!d_backing_inode(subdir)->i_op->getxattr ||
|
||||
!d_backing_inode(subdir)->i_op->lookup ||
|
||||
!d_backing_inode(subdir)->i_op->mkdir ||
|
||||
!d_backing_inode(subdir)->i_op->create ||
|
||||
(!d_backing_inode(subdir)->i_op->rename &&
|
||||
!d_backing_inode(subdir)->i_op->rename2) ||
|
||||
!d_backing_inode(subdir)->i_op->rmdir ||
|
||||
!d_backing_inode(subdir)->i_op->unlink)
|
||||
goto check_error;
|
||||
|
||||
_leave(" = [%lu]", subdir->d_inode->i_ino);
|
||||
_leave(" = [%lu]", d_backing_inode(subdir)->i_ino);
|
||||
return subdir;
|
||||
|
||||
check_error:
|
||||
@ -790,19 +790,19 @@ check_error:
|
||||
return ERR_PTR(ret);
|
||||
|
||||
mkdir_error:
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
dput(subdir);
|
||||
pr_err("mkdir %s failed with error %d\n", dirname, ret);
|
||||
return ERR_PTR(ret);
|
||||
|
||||
lookup_error:
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
ret = PTR_ERR(subdir);
|
||||
pr_err("Lookup %s failed with error %d\n", dirname, ret);
|
||||
return ERR_PTR(ret);
|
||||
|
||||
nomem_d_alloc:
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
_leave(" = -ENOMEM");
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
@ -827,7 +827,7 @@ static struct dentry *cachefiles_check_active(struct cachefiles_cache *cache,
|
||||
// dir, filename);
|
||||
|
||||
/* look up the victim */
|
||||
mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_PARENT);
|
||||
mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_PARENT);
|
||||
|
||||
start = jiffies;
|
||||
victim = lookup_one_len(filename, dir, strlen(filename));
|
||||
@ -836,13 +836,13 @@ static struct dentry *cachefiles_check_active(struct cachefiles_cache *cache,
|
||||
goto lookup_error;
|
||||
|
||||
//_debug("victim -> %p %s",
|
||||
// victim, victim->d_inode ? "positive" : "negative");
|
||||
// victim, d_backing_inode(victim) ? "positive" : "negative");
|
||||
|
||||
/* if the object is no longer there then we probably retired the object
|
||||
* at the netfs's request whilst the cull was in progress
|
||||
*/
|
||||
if (!victim->d_inode) {
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
if (d_is_negative(victim)) {
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
dput(victim);
|
||||
_leave(" = -ENOENT [absent]");
|
||||
return ERR_PTR(-ENOENT);
|
||||
@ -871,13 +871,13 @@ static struct dentry *cachefiles_check_active(struct cachefiles_cache *cache,
|
||||
|
||||
object_in_use:
|
||||
read_unlock(&cache->active_lock);
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
dput(victim);
|
||||
//_leave(" = -EBUSY [in use]");
|
||||
return ERR_PTR(-EBUSY);
|
||||
|
||||
lookup_error:
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
ret = PTR_ERR(victim);
|
||||
if (ret == -ENOENT) {
|
||||
/* file or dir now absent - probably retired by netfs */
|
||||
@ -913,7 +913,7 @@ int cachefiles_cull(struct cachefiles_cache *cache, struct dentry *dir,
|
||||
return PTR_ERR(victim);
|
||||
|
||||
_debug("victim -> %p %s",
|
||||
victim, victim->d_inode ? "positive" : "negative");
|
||||
victim, d_backing_inode(victim) ? "positive" : "negative");
|
||||
|
||||
/* okay... the victim is not being used so we can cull it
|
||||
* - start by marking it as stale
|
||||
@ -936,7 +936,7 @@ int cachefiles_cull(struct cachefiles_cache *cache, struct dentry *dir,
|
||||
return 0;
|
||||
|
||||
error_unlock:
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
error:
|
||||
dput(victim);
|
||||
if (ret == -ENOENT) {
|
||||
@ -971,7 +971,7 @@ int cachefiles_check_in_use(struct cachefiles_cache *cache, struct dentry *dir,
|
||||
if (IS_ERR(victim))
|
||||
return PTR_ERR(victim);
|
||||
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
dput(victim);
|
||||
//_leave(" = 0");
|
||||
return 0;
|
||||
|
@ -74,12 +74,12 @@ static int cachefiles_read_waiter(wait_queue_t *wait, unsigned mode,
|
||||
static int cachefiles_read_reissue(struct cachefiles_object *object,
|
||||
struct cachefiles_one_read *monitor)
|
||||
{
|
||||
struct address_space *bmapping = object->backer->d_inode->i_mapping;
|
||||
struct address_space *bmapping = d_backing_inode(object->backer)->i_mapping;
|
||||
struct page *backpage = monitor->back_page, *backpage2;
|
||||
int ret;
|
||||
|
||||
_enter("{ino=%lx},{%lx,%lx}",
|
||||
object->backer->d_inode->i_ino,
|
||||
d_backing_inode(object->backer)->i_ino,
|
||||
backpage->index, backpage->flags);
|
||||
|
||||
/* skip if the page was truncated away completely */
|
||||
@ -157,7 +157,7 @@ static void cachefiles_read_copier(struct fscache_operation *_op)
|
||||
object = container_of(op->op.object,
|
||||
struct cachefiles_object, fscache);
|
||||
|
||||
_enter("{ino=%lu}", object->backer->d_inode->i_ino);
|
||||
_enter("{ino=%lu}", d_backing_inode(object->backer)->i_ino);
|
||||
|
||||
max = 8;
|
||||
spin_lock_irq(&object->work_lock);
|
||||
@ -247,7 +247,7 @@ static int cachefiles_read_backing_file_one(struct cachefiles_object *object,
|
||||
init_waitqueue_func_entry(&monitor->monitor, cachefiles_read_waiter);
|
||||
|
||||
/* attempt to get hold of the backing page */
|
||||
bmapping = object->backer->d_inode->i_mapping;
|
||||
bmapping = d_backing_inode(object->backer)->i_mapping;
|
||||
newpage = NULL;
|
||||
|
||||
for (;;) {
|
||||
@ -408,7 +408,7 @@ int cachefiles_read_or_alloc_page(struct fscache_retrieval *op,
|
||||
if (!object->backer)
|
||||
goto enobufs;
|
||||
|
||||
inode = object->backer->d_inode;
|
||||
inode = d_backing_inode(object->backer);
|
||||
ASSERT(S_ISREG(inode->i_mode));
|
||||
ASSERT(inode->i_mapping->a_ops->bmap);
|
||||
ASSERT(inode->i_mapping->a_ops->readpages);
|
||||
@ -468,7 +468,7 @@ static int cachefiles_read_backing_file(struct cachefiles_object *object,
|
||||
struct list_head *list)
|
||||
{
|
||||
struct cachefiles_one_read *monitor = NULL;
|
||||
struct address_space *bmapping = object->backer->d_inode->i_mapping;
|
||||
struct address_space *bmapping = d_backing_inode(object->backer)->i_mapping;
|
||||
struct page *newpage = NULL, *netpage, *_n, *backpage = NULL;
|
||||
int ret = 0;
|
||||
|
||||
@ -705,7 +705,7 @@ int cachefiles_read_or_alloc_pages(struct fscache_retrieval *op,
|
||||
if (cachefiles_has_space(cache, 0, *nr_pages) < 0)
|
||||
space = 0;
|
||||
|
||||
inode = object->backer->d_inode;
|
||||
inode = d_backing_inode(object->backer);
|
||||
ASSERT(S_ISREG(inode->i_mode));
|
||||
ASSERT(inode->i_mapping->a_ops->bmap);
|
||||
ASSERT(inode->i_mapping->a_ops->readpages);
|
||||
|
@ -55,14 +55,14 @@ static int cachefiles_check_cache_dir(struct cachefiles_cache *cache,
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = security_inode_mkdir(root->d_inode, root, 0);
|
||||
ret = security_inode_mkdir(d_backing_inode(root), root, 0);
|
||||
if (ret < 0) {
|
||||
pr_err("Security denies permission to make dirs: error %d",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = security_inode_create(root->d_inode, root, 0);
|
||||
ret = security_inode_create(d_backing_inode(root), root, 0);
|
||||
if (ret < 0)
|
||||
pr_err("Security denies permission to create files: error %d",
|
||||
ret);
|
||||
@ -95,7 +95,7 @@ int cachefiles_determine_cache_security(struct cachefiles_cache *cache,
|
||||
|
||||
/* use the cache root dir's security context as the basis with
|
||||
* which create files */
|
||||
ret = set_create_files_as(new, root->d_inode);
|
||||
ret = set_create_files_as(new, d_backing_inode(root));
|
||||
if (ret < 0) {
|
||||
abort_creds(new);
|
||||
cachefiles_begin_secure(cache, _saved_cred);
|
||||
|
@ -33,7 +33,7 @@ int cachefiles_check_object_type(struct cachefiles_object *object)
|
||||
int ret;
|
||||
|
||||
ASSERT(dentry);
|
||||
ASSERT(dentry->d_inode);
|
||||
ASSERT(d_backing_inode(dentry));
|
||||
|
||||
if (!object->fscache.cookie)
|
||||
strcpy(type, "C3");
|
||||
@ -52,7 +52,7 @@ int cachefiles_check_object_type(struct cachefiles_object *object)
|
||||
|
||||
if (ret != -EEXIST) {
|
||||
pr_err("Can't set xattr on %pd [%lu] (err %d)\n",
|
||||
dentry, dentry->d_inode->i_ino,
|
||||
dentry, d_backing_inode(dentry)->i_ino,
|
||||
-ret);
|
||||
goto error;
|
||||
}
|
||||
@ -64,7 +64,7 @@ int cachefiles_check_object_type(struct cachefiles_object *object)
|
||||
goto bad_type_length;
|
||||
|
||||
pr_err("Can't read xattr on %pd [%lu] (err %d)\n",
|
||||
dentry, dentry->d_inode->i_ino,
|
||||
dentry, d_backing_inode(dentry)->i_ino,
|
||||
-ret);
|
||||
goto error;
|
||||
}
|
||||
@ -84,14 +84,14 @@ error:
|
||||
|
||||
bad_type_length:
|
||||
pr_err("Cache object %lu type xattr length incorrect\n",
|
||||
dentry->d_inode->i_ino);
|
||||
d_backing_inode(dentry)->i_ino);
|
||||
ret = -EIO;
|
||||
goto error;
|
||||
|
||||
bad_type:
|
||||
xtype[2] = 0;
|
||||
pr_err("Cache object %pd [%lu] type %s not %s\n",
|
||||
dentry, dentry->d_inode->i_ino,
|
||||
dentry, d_backing_inode(dentry)->i_ino,
|
||||
xtype, type);
|
||||
ret = -EIO;
|
||||
goto error;
|
||||
@ -165,7 +165,7 @@ int cachefiles_check_auxdata(struct cachefiles_object *object)
|
||||
int ret;
|
||||
|
||||
ASSERT(dentry);
|
||||
ASSERT(dentry->d_inode);
|
||||
ASSERT(d_backing_inode(dentry));
|
||||
ASSERT(object->fscache.cookie->def->check_aux);
|
||||
|
||||
auxbuf = kmalloc(sizeof(struct cachefiles_xattr) + 512, GFP_KERNEL);
|
||||
@ -204,7 +204,7 @@ int cachefiles_check_object_xattr(struct cachefiles_object *object,
|
||||
_enter("%p,#%d", object, auxdata->len);
|
||||
|
||||
ASSERT(dentry);
|
||||
ASSERT(dentry->d_inode);
|
||||
ASSERT(d_backing_inode(dentry));
|
||||
|
||||
auxbuf = kmalloc(sizeof(struct cachefiles_xattr) + 512, cachefiles_gfp);
|
||||
if (!auxbuf) {
|
||||
@ -225,7 +225,7 @@ int cachefiles_check_object_xattr(struct cachefiles_object *object,
|
||||
|
||||
cachefiles_io_error_obj(object,
|
||||
"Can't read xattr on %lu (err %d)",
|
||||
dentry->d_inode->i_ino, -ret);
|
||||
d_backing_inode(dentry)->i_ino, -ret);
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -276,7 +276,7 @@ int cachefiles_check_object_xattr(struct cachefiles_object *object,
|
||||
cachefiles_io_error_obj(object,
|
||||
"Can't update xattr on %lu"
|
||||
" (error %d)",
|
||||
dentry->d_inode->i_ino, -ret);
|
||||
d_backing_inode(dentry)->i_ino, -ret);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
@ -291,7 +291,7 @@ error:
|
||||
|
||||
bad_type_length:
|
||||
pr_err("Cache object %lu xattr length incorrect\n",
|
||||
dentry->d_inode->i_ino);
|
||||
d_backing_inode(dentry)->i_ino);
|
||||
ret = -EIO;
|
||||
goto error;
|
||||
|
||||
@ -316,7 +316,7 @@ int cachefiles_remove_object_xattr(struct cachefiles_cache *cache,
|
||||
cachefiles_io_error(cache,
|
||||
"Can't remove xattr from %lu"
|
||||
" (error %d)",
|
||||
dentry->d_inode->i_ino, -ret);
|
||||
d_backing_inode(dentry)->i_ino, -ret);
|
||||
}
|
||||
|
||||
_leave(" = %d", ret);
|
||||
|
@ -3422,7 +3422,7 @@ int ceph_encode_inode_release(void **p, struct inode *inode,
|
||||
int ceph_encode_dentry_release(void **p, struct dentry *dentry,
|
||||
int mds, int drop, int unless)
|
||||
{
|
||||
struct inode *dir = dentry->d_parent->d_inode;
|
||||
struct inode *dir = d_inode(dentry->d_parent);
|
||||
struct ceph_mds_request_release *rel = *p;
|
||||
struct ceph_dentry_info *di = ceph_dentry(dentry);
|
||||
int force = 0;
|
||||
|
@ -84,7 +84,7 @@ static int mdsc_show(struct seq_file *s, void *p)
|
||||
path = NULL;
|
||||
spin_lock(&req->r_dentry->d_lock);
|
||||
seq_printf(s, " #%llx/%pd (%s)",
|
||||
ceph_ino(req->r_dentry->d_parent->d_inode),
|
||||
ceph_ino(d_inode(req->r_dentry->d_parent)),
|
||||
req->r_dentry,
|
||||
path ? path : "");
|
||||
spin_unlock(&req->r_dentry->d_lock);
|
||||
|
@ -49,9 +49,9 @@ int ceph_init_dentry(struct dentry *dentry)
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (ceph_snap(dentry->d_parent->d_inode) == CEPH_NOSNAP)
|
||||
if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_NOSNAP)
|
||||
d_set_d_op(dentry, &ceph_dentry_ops);
|
||||
else if (ceph_snap(dentry->d_parent->d_inode) == CEPH_SNAPDIR)
|
||||
else if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_SNAPDIR)
|
||||
d_set_d_op(dentry, &ceph_snapdir_dentry_ops);
|
||||
else
|
||||
d_set_d_op(dentry, &ceph_snap_dentry_ops);
|
||||
@ -77,7 +77,7 @@ struct inode *ceph_get_dentry_parent_inode(struct dentry *dentry)
|
||||
|
||||
spin_lock(&dentry->d_lock);
|
||||
if (!IS_ROOT(dentry)) {
|
||||
inode = dentry->d_parent->d_inode;
|
||||
inode = d_inode(dentry->d_parent);
|
||||
ihold(inode);
|
||||
}
|
||||
spin_unlock(&dentry->d_lock);
|
||||
@ -122,7 +122,7 @@ static int __dcache_readdir(struct file *file, struct dir_context *ctx,
|
||||
{
|
||||
struct ceph_file_info *fi = file->private_data;
|
||||
struct dentry *parent = file->f_path.dentry;
|
||||
struct inode *dir = parent->d_inode;
|
||||
struct inode *dir = d_inode(parent);
|
||||
struct list_head *p;
|
||||
struct dentry *dentry, *last;
|
||||
struct ceph_dentry_info *di;
|
||||
@ -161,15 +161,15 @@ more:
|
||||
}
|
||||
spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
|
||||
if (di->lease_shared_gen == shared_gen &&
|
||||
!d_unhashed(dentry) && dentry->d_inode &&
|
||||
ceph_snap(dentry->d_inode) != CEPH_SNAPDIR &&
|
||||
ceph_ino(dentry->d_inode) != CEPH_INO_CEPH &&
|
||||
!d_unhashed(dentry) && d_really_is_positive(dentry) &&
|
||||
ceph_snap(d_inode(dentry)) != CEPH_SNAPDIR &&
|
||||
ceph_ino(d_inode(dentry)) != CEPH_INO_CEPH &&
|
||||
fpos_cmp(ctx->pos, di->offset) <= 0)
|
||||
break;
|
||||
dout(" skipping %p %pd at %llu (%llu)%s%s\n", dentry,
|
||||
dentry, di->offset,
|
||||
ctx->pos, d_unhashed(dentry) ? " unhashed" : "",
|
||||
!dentry->d_inode ? " null" : "");
|
||||
!d_inode(dentry) ? " null" : "");
|
||||
spin_unlock(&dentry->d_lock);
|
||||
p = p->prev;
|
||||
dentry = list_entry(p, struct dentry, d_child);
|
||||
@ -189,11 +189,11 @@ more:
|
||||
}
|
||||
|
||||
dout(" %llu (%llu) dentry %p %pd %p\n", di->offset, ctx->pos,
|
||||
dentry, dentry, dentry->d_inode);
|
||||
dentry, dentry, d_inode(dentry));
|
||||
if (!dir_emit(ctx, dentry->d_name.name,
|
||||
dentry->d_name.len,
|
||||
ceph_translate_ino(dentry->d_sb, dentry->d_inode->i_ino),
|
||||
dentry->d_inode->i_mode >> 12)) {
|
||||
ceph_translate_ino(dentry->d_sb, d_inode(dentry)->i_ino),
|
||||
d_inode(dentry)->i_mode >> 12)) {
|
||||
if (last) {
|
||||
/* remember our position */
|
||||
fi->dentry = last;
|
||||
@ -543,7 +543,7 @@ int ceph_handle_snapdir(struct ceph_mds_request *req,
|
||||
struct dentry *dentry, int err)
|
||||
{
|
||||
struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
|
||||
struct inode *parent = dentry->d_parent->d_inode; /* we hold i_mutex */
|
||||
struct inode *parent = d_inode(dentry->d_parent); /* we hold i_mutex */
|
||||
|
||||
/* .snap dir? */
|
||||
if (err == -ENOENT &&
|
||||
@ -579,8 +579,8 @@ struct dentry *ceph_finish_lookup(struct ceph_mds_request *req,
|
||||
err = 0;
|
||||
if (!req->r_reply_info.head->is_dentry) {
|
||||
dout("ENOENT and no trace, dentry %p inode %p\n",
|
||||
dentry, dentry->d_inode);
|
||||
if (dentry->d_inode) {
|
||||
dentry, d_inode(dentry));
|
||||
if (d_really_is_positive(dentry)) {
|
||||
d_drop(dentry);
|
||||
err = -ENOENT;
|
||||
} else {
|
||||
@ -627,7 +627,7 @@ static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry,
|
||||
return ERR_PTR(err);
|
||||
|
||||
/* can we conclude ENOENT locally? */
|
||||
if (dentry->d_inode == NULL) {
|
||||
if (d_really_is_negative(dentry)) {
|
||||
struct ceph_inode_info *ci = ceph_inode(dir);
|
||||
struct ceph_dentry_info *di = ceph_dentry(dentry);
|
||||
|
||||
@ -734,7 +734,7 @@ static int ceph_mknod(struct inode *dir, struct dentry *dentry,
|
||||
ceph_mdsc_put_request(req);
|
||||
out:
|
||||
if (!err)
|
||||
ceph_init_inode_acls(dentry->d_inode, &acls);
|
||||
ceph_init_inode_acls(d_inode(dentry), &acls);
|
||||
else
|
||||
d_drop(dentry);
|
||||
ceph_release_acls_info(&acls);
|
||||
@ -835,7 +835,7 @@ static int ceph_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
||||
ceph_mdsc_put_request(req);
|
||||
out:
|
||||
if (!err)
|
||||
ceph_init_inode_acls(dentry->d_inode, &acls);
|
||||
ceph_init_inode_acls(d_inode(dentry), &acls);
|
||||
else
|
||||
d_drop(dentry);
|
||||
ceph_release_acls_info(&acls);
|
||||
@ -872,8 +872,8 @@ static int ceph_link(struct dentry *old_dentry, struct inode *dir,
|
||||
if (err) {
|
||||
d_drop(dentry);
|
||||
} else if (!req->r_reply_info.head->is_dentry) {
|
||||
ihold(old_dentry->d_inode);
|
||||
d_instantiate(dentry, old_dentry->d_inode);
|
||||
ihold(d_inode(old_dentry));
|
||||
d_instantiate(dentry, d_inode(old_dentry));
|
||||
}
|
||||
ceph_mdsc_put_request(req);
|
||||
return err;
|
||||
@ -906,7 +906,7 @@ static int ceph_unlink(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb);
|
||||
struct ceph_mds_client *mdsc = fsc->mdsc;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ceph_mds_request *req;
|
||||
int err = -EROFS;
|
||||
int op;
|
||||
@ -975,8 +975,8 @@ static int ceph_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
req->r_dentry_unless = CEPH_CAP_FILE_EXCL;
|
||||
/* release LINK_RDCACHE on source inode (mds will lock it) */
|
||||
req->r_old_inode_drop = CEPH_CAP_LINK_SHARED;
|
||||
if (new_dentry->d_inode)
|
||||
req->r_inode_drop = drop_caps_for_unlink(new_dentry->d_inode);
|
||||
if (d_really_is_positive(new_dentry))
|
||||
req->r_inode_drop = drop_caps_for_unlink(d_inode(new_dentry));
|
||||
err = ceph_mdsc_do_request(mdsc, old_dir, req);
|
||||
if (!err && !req->r_reply_info.head->is_dentry) {
|
||||
/*
|
||||
@ -1042,7 +1042,7 @@ static int dentry_lease_is_valid(struct dentry *dentry)
|
||||
if (di->lease_renew_after &&
|
||||
time_after(jiffies, di->lease_renew_after)) {
|
||||
/* we should renew */
|
||||
dir = dentry->d_parent->d_inode;
|
||||
dir = d_inode(dentry->d_parent);
|
||||
session = ceph_get_mds_session(s);
|
||||
seq = di->lease_seq;
|
||||
di->lease_renew_after = 0;
|
||||
@ -1092,22 +1092,22 @@ static int ceph_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
return -ECHILD;
|
||||
|
||||
dout("d_revalidate %p '%pd' inode %p offset %lld\n", dentry,
|
||||
dentry, dentry->d_inode, ceph_dentry(dentry)->offset);
|
||||
dentry, d_inode(dentry), ceph_dentry(dentry)->offset);
|
||||
|
||||
dir = ceph_get_dentry_parent_inode(dentry);
|
||||
|
||||
/* always trust cached snapped dentries, snapdir dentry */
|
||||
if (ceph_snap(dir) != CEPH_NOSNAP) {
|
||||
dout("d_revalidate %p '%pd' inode %p is SNAPPED\n", dentry,
|
||||
dentry, dentry->d_inode);
|
||||
dentry, d_inode(dentry));
|
||||
valid = 1;
|
||||
} else if (dentry->d_inode &&
|
||||
ceph_snap(dentry->d_inode) == CEPH_SNAPDIR) {
|
||||
} else if (d_really_is_positive(dentry) &&
|
||||
ceph_snap(d_inode(dentry)) == CEPH_SNAPDIR) {
|
||||
valid = 1;
|
||||
} else if (dentry_lease_is_valid(dentry) ||
|
||||
dir_lease_is_valid(dir, dentry)) {
|
||||
if (dentry->d_inode)
|
||||
valid = ceph_is_any_caps(dentry->d_inode);
|
||||
if (d_really_is_positive(dentry))
|
||||
valid = ceph_is_any_caps(d_inode(dentry));
|
||||
else
|
||||
valid = 1;
|
||||
}
|
||||
@ -1169,7 +1169,7 @@ static void ceph_d_prune(struct dentry *dentry)
|
||||
* we hold d_lock, so d_parent is stable, and d_fsdata is never
|
||||
* cleared until d_release
|
||||
*/
|
||||
ceph_dir_clear_complete(dentry->d_parent->d_inode);
|
||||
ceph_dir_clear_complete(d_inode(dentry->d_parent));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -136,8 +136,8 @@ static struct dentry *__get_parent(struct super_block *sb,
|
||||
return ERR_CAST(req);
|
||||
|
||||
if (child) {
|
||||
req->r_inode = child->d_inode;
|
||||
ihold(child->d_inode);
|
||||
req->r_inode = d_inode(child);
|
||||
ihold(d_inode(child));
|
||||
} else {
|
||||
req->r_ino1 = (struct ceph_vino) {
|
||||
.ino = ino,
|
||||
@ -164,7 +164,7 @@ static struct dentry *__get_parent(struct super_block *sb,
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
dout("__get_parent ino %llx parent %p ino %llx.%llx\n",
|
||||
child ? ceph_ino(child->d_inode) : ino,
|
||||
child ? ceph_ino(d_inode(child)) : ino,
|
||||
dentry, ceph_vinop(inode));
|
||||
return dentry;
|
||||
}
|
||||
@ -172,11 +172,11 @@ static struct dentry *__get_parent(struct super_block *sb,
|
||||
static struct dentry *ceph_get_parent(struct dentry *child)
|
||||
{
|
||||
/* don't re-export snaps */
|
||||
if (ceph_snap(child->d_inode) != CEPH_NOSNAP)
|
||||
if (ceph_snap(d_inode(child)) != CEPH_NOSNAP)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
dout("get_parent %p ino %llx.%llx\n",
|
||||
child, ceph_vinop(child->d_inode));
|
||||
child, ceph_vinop(d_inode(child)));
|
||||
return __get_parent(child->d_sb, child, 0);
|
||||
}
|
||||
|
||||
@ -209,32 +209,32 @@ static int ceph_get_name(struct dentry *parent, char *name,
|
||||
struct ceph_mds_request *req;
|
||||
int err;
|
||||
|
||||
mdsc = ceph_inode_to_client(child->d_inode)->mdsc;
|
||||
mdsc = ceph_inode_to_client(d_inode(child))->mdsc;
|
||||
req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_LOOKUPNAME,
|
||||
USE_ANY_MDS);
|
||||
if (IS_ERR(req))
|
||||
return PTR_ERR(req);
|
||||
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
|
||||
req->r_inode = child->d_inode;
|
||||
ihold(child->d_inode);
|
||||
req->r_ino2 = ceph_vino(parent->d_inode);
|
||||
req->r_locked_dir = parent->d_inode;
|
||||
req->r_inode = d_inode(child);
|
||||
ihold(d_inode(child));
|
||||
req->r_ino2 = ceph_vino(d_inode(parent));
|
||||
req->r_locked_dir = d_inode(parent);
|
||||
req->r_num_caps = 2;
|
||||
err = ceph_mdsc_do_request(mdsc, NULL, req);
|
||||
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
|
||||
if (!err) {
|
||||
struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info;
|
||||
memcpy(name, rinfo->dname, rinfo->dname_len);
|
||||
name[rinfo->dname_len] = 0;
|
||||
dout("get_name %p ino %llx.%llx name %s\n",
|
||||
child, ceph_vinop(child->d_inode), name);
|
||||
child, ceph_vinop(d_inode(child)), name);
|
||||
} else {
|
||||
dout("get_name %p ino %llx.%llx err %d\n",
|
||||
child, ceph_vinop(child->d_inode), err);
|
||||
child, ceph_vinop(d_inode(child)), err);
|
||||
}
|
||||
|
||||
ceph_mdsc_put_request(req);
|
||||
|
@ -291,14 +291,14 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,
|
||||
}
|
||||
if (err)
|
||||
goto out_req;
|
||||
if (dn || dentry->d_inode == NULL || d_is_symlink(dentry)) {
|
||||
if (dn || d_really_is_negative(dentry) || d_is_symlink(dentry)) {
|
||||
/* make vfs retry on splice, ENOENT, or symlink */
|
||||
dout("atomic_open finish_no_open on dn %p\n", dn);
|
||||
err = finish_no_open(file, dn);
|
||||
} else {
|
||||
dout("atomic_open finish_open on dn %p\n", dn);
|
||||
if (req->r_op == CEPH_MDS_OP_CREATE && req->r_reply_info.has_create_ino) {
|
||||
ceph_init_inode_acls(dentry->d_inode, &acls);
|
||||
ceph_init_inode_acls(d_inode(dentry), &acls);
|
||||
*opened |= FILE_CREATED;
|
||||
}
|
||||
err = finish_open(file, dentry, ceph_open, opened);
|
||||
|
@ -940,7 +940,7 @@ static void update_dentry_lease(struct dentry *dentry,
|
||||
dentry, duration, ttl);
|
||||
|
||||
/* make lease_rdcache_gen match directory */
|
||||
dir = dentry->d_parent->d_inode;
|
||||
dir = d_inode(dentry->d_parent);
|
||||
di->lease_shared_gen = ceph_inode(dir)->i_shared_gen;
|
||||
|
||||
if (duration == 0)
|
||||
@ -980,7 +980,7 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,
|
||||
{
|
||||
struct dentry *realdn;
|
||||
|
||||
BUG_ON(dn->d_inode);
|
||||
BUG_ON(d_inode(dn));
|
||||
|
||||
/* dn must be unhashed */
|
||||
if (!d_unhashed(dn))
|
||||
@ -998,13 +998,13 @@ static struct dentry *splice_dentry(struct dentry *dn, struct inode *in,
|
||||
"inode %p ino %llx.%llx\n",
|
||||
dn, d_count(dn),
|
||||
realdn, d_count(realdn),
|
||||
realdn->d_inode, ceph_vinop(realdn->d_inode));
|
||||
d_inode(realdn), ceph_vinop(d_inode(realdn)));
|
||||
dput(dn);
|
||||
dn = realdn;
|
||||
} else {
|
||||
BUG_ON(!ceph_dentry(dn));
|
||||
dout("dn %p attached to %p ino %llx.%llx\n",
|
||||
dn, dn->d_inode, ceph_vinop(dn->d_inode));
|
||||
dn, d_inode(dn), ceph_vinop(d_inode(dn)));
|
||||
}
|
||||
if ((!prehash || *prehash) && d_unhashed(dn))
|
||||
d_rehash(dn);
|
||||
@ -1125,11 +1125,11 @@ retry_lookup:
|
||||
dput(parent);
|
||||
goto done;
|
||||
}
|
||||
} else if (dn->d_inode &&
|
||||
(ceph_ino(dn->d_inode) != vino.ino ||
|
||||
ceph_snap(dn->d_inode) != vino.snap)) {
|
||||
} else if (d_really_is_positive(dn) &&
|
||||
(ceph_ino(d_inode(dn)) != vino.ino ||
|
||||
ceph_snap(d_inode(dn)) != vino.snap)) {
|
||||
dout(" dn %p points to wrong inode %p\n",
|
||||
dn, dn->d_inode);
|
||||
dn, d_inode(dn));
|
||||
d_delete(dn);
|
||||
dput(dn);
|
||||
goto retry_lookup;
|
||||
@ -1183,7 +1183,7 @@ retry_lookup:
|
||||
|
||||
BUG_ON(!dn);
|
||||
BUG_ON(!dir);
|
||||
BUG_ON(dn->d_parent->d_inode != dir);
|
||||
BUG_ON(d_inode(dn->d_parent) != dir);
|
||||
BUG_ON(ceph_ino(dir) !=
|
||||
le64_to_cpu(rinfo->diri.in->ino));
|
||||
BUG_ON(ceph_snap(dir) !=
|
||||
@ -1235,7 +1235,7 @@ retry_lookup:
|
||||
/* null dentry? */
|
||||
if (!rinfo->head->is_target) {
|
||||
dout("fill_trace null dentry\n");
|
||||
if (dn->d_inode) {
|
||||
if (d_really_is_positive(dn)) {
|
||||
ceph_dir_clear_ordered(dir);
|
||||
dout("d_delete %p\n", dn);
|
||||
d_delete(dn);
|
||||
@ -1252,7 +1252,7 @@ retry_lookup:
|
||||
}
|
||||
|
||||
/* attach proper inode */
|
||||
if (!dn->d_inode) {
|
||||
if (d_really_is_negative(dn)) {
|
||||
ceph_dir_clear_ordered(dir);
|
||||
ihold(in);
|
||||
dn = splice_dentry(dn, in, &have_lease);
|
||||
@ -1261,9 +1261,9 @@ retry_lookup:
|
||||
goto done;
|
||||
}
|
||||
req->r_dentry = dn; /* may have spliced */
|
||||
} else if (dn->d_inode && dn->d_inode != in) {
|
||||
} else if (d_really_is_positive(dn) && d_inode(dn) != in) {
|
||||
dout(" %p links to %p %llx.%llx, not %llx.%llx\n",
|
||||
dn, dn->d_inode, ceph_vinop(dn->d_inode),
|
||||
dn, d_inode(dn), ceph_vinop(d_inode(dn)),
|
||||
ceph_vinop(in));
|
||||
have_lease = false;
|
||||
}
|
||||
@ -1363,7 +1363,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
|
||||
return readdir_prepopulate_inodes_only(req, session);
|
||||
|
||||
if (le32_to_cpu(rinfo->head->op) == CEPH_MDS_OP_LSSNAP) {
|
||||
snapdir = ceph_get_snapdir(parent->d_inode);
|
||||
snapdir = ceph_get_snapdir(d_inode(parent));
|
||||
parent = d_find_alias(snapdir);
|
||||
dout("readdir_prepopulate %d items under SNAPDIR dn %p\n",
|
||||
rinfo->dir_nr, parent);
|
||||
@ -1371,7 +1371,7 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
|
||||
dout("readdir_prepopulate %d items under dn %p\n",
|
||||
rinfo->dir_nr, parent);
|
||||
if (rinfo->dir_dir)
|
||||
ceph_fill_dirfrag(parent->d_inode, rinfo->dir_dir);
|
||||
ceph_fill_dirfrag(d_inode(parent), rinfo->dir_dir);
|
||||
}
|
||||
|
||||
/* FIXME: release caps/leases if error occurs */
|
||||
@ -1405,11 +1405,11 @@ retry_lookup:
|
||||
err = ret;
|
||||
goto out;
|
||||
}
|
||||
} else if (dn->d_inode &&
|
||||
(ceph_ino(dn->d_inode) != vino.ino ||
|
||||
ceph_snap(dn->d_inode) != vino.snap)) {
|
||||
} else if (d_really_is_positive(dn) &&
|
||||
(ceph_ino(d_inode(dn)) != vino.ino ||
|
||||
ceph_snap(d_inode(dn)) != vino.snap)) {
|
||||
dout(" dn %p points to wrong inode %p\n",
|
||||
dn, dn->d_inode);
|
||||
dn, d_inode(dn));
|
||||
d_delete(dn);
|
||||
dput(dn);
|
||||
goto retry_lookup;
|
||||
@ -1423,8 +1423,8 @@ retry_lookup:
|
||||
}
|
||||
|
||||
/* inode */
|
||||
if (dn->d_inode) {
|
||||
in = dn->d_inode;
|
||||
if (d_really_is_positive(dn)) {
|
||||
in = d_inode(dn);
|
||||
} else {
|
||||
in = ceph_get_inode(parent->d_sb, vino);
|
||||
if (IS_ERR(in)) {
|
||||
@ -1440,13 +1440,13 @@ retry_lookup:
|
||||
req->r_request_started, -1,
|
||||
&req->r_caps_reservation) < 0) {
|
||||
pr_err("fill_inode badness on %p\n", in);
|
||||
if (!dn->d_inode)
|
||||
if (d_really_is_negative(dn))
|
||||
iput(in);
|
||||
d_drop(dn);
|
||||
goto next_item;
|
||||
}
|
||||
|
||||
if (!dn->d_inode) {
|
||||
if (d_really_is_negative(dn)) {
|
||||
struct dentry *realdn = splice_dentry(dn, in, NULL);
|
||||
if (IS_ERR(realdn)) {
|
||||
err = PTR_ERR(realdn);
|
||||
@ -1693,7 +1693,7 @@ retry:
|
||||
*/
|
||||
static void *ceph_sym_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
{
|
||||
struct ceph_inode_info *ci = ceph_inode(dentry->d_inode);
|
||||
struct ceph_inode_info *ci = ceph_inode(d_inode(dentry));
|
||||
nd_set_link(nd, ci->i_symlink);
|
||||
return NULL;
|
||||
}
|
||||
@ -1714,7 +1714,7 @@ static const struct inode_operations ceph_symlink_iops = {
|
||||
*/
|
||||
int ceph_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ceph_inode_info *ci = ceph_inode(inode);
|
||||
const unsigned int ia_valid = attr->ia_valid;
|
||||
struct ceph_mds_request *req;
|
||||
@ -1990,7 +1990,7 @@ int ceph_permission(struct inode *inode, int mask)
|
||||
int ceph_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
struct kstat *stat)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ceph_inode_info *ci = ceph_inode(inode);
|
||||
int err;
|
||||
|
||||
|
@ -679,7 +679,7 @@ static struct dentry *get_nonsnap_parent(struct dentry *dentry)
|
||||
* except to resplice to another snapdir, and either the old or new
|
||||
* result is a valid result.
|
||||
*/
|
||||
while (!IS_ROOT(dentry) && ceph_snap(dentry->d_inode) != CEPH_NOSNAP)
|
||||
while (!IS_ROOT(dentry) && ceph_snap(d_inode(dentry)) != CEPH_NOSNAP)
|
||||
dentry = dentry->d_parent;
|
||||
return dentry;
|
||||
}
|
||||
@ -716,20 +716,20 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
|
||||
} else if (req->r_dentry) {
|
||||
/* ignore race with rename; old or new d_parent is okay */
|
||||
struct dentry *parent = req->r_dentry->d_parent;
|
||||
struct inode *dir = parent->d_inode;
|
||||
struct inode *dir = d_inode(parent);
|
||||
|
||||
if (dir->i_sb != mdsc->fsc->sb) {
|
||||
/* not this fs! */
|
||||
inode = req->r_dentry->d_inode;
|
||||
inode = d_inode(req->r_dentry);
|
||||
} else if (ceph_snap(dir) != CEPH_NOSNAP) {
|
||||
/* direct snapped/virtual snapdir requests
|
||||
* based on parent dir inode */
|
||||
struct dentry *dn = get_nonsnap_parent(parent);
|
||||
inode = dn->d_inode;
|
||||
inode = d_inode(dn);
|
||||
dout("__choose_mds using nonsnap parent %p\n", inode);
|
||||
} else {
|
||||
/* dentry target */
|
||||
inode = req->r_dentry->d_inode;
|
||||
inode = d_inode(req->r_dentry);
|
||||
if (!inode || mode == USE_AUTH_MDS) {
|
||||
/* dir + name */
|
||||
inode = dir;
|
||||
@ -1732,7 +1732,7 @@ retry:
|
||||
seq = read_seqbegin(&rename_lock);
|
||||
rcu_read_lock();
|
||||
for (temp = dentry; !IS_ROOT(temp);) {
|
||||
struct inode *inode = temp->d_inode;
|
||||
struct inode *inode = d_inode(temp);
|
||||
if (inode && ceph_snap(inode) == CEPH_SNAPDIR)
|
||||
len++; /* slash only */
|
||||
else if (stop_on_nosnap && inode &&
|
||||
@ -1756,7 +1756,7 @@ retry:
|
||||
struct inode *inode;
|
||||
|
||||
spin_lock(&temp->d_lock);
|
||||
inode = temp->d_inode;
|
||||
inode = d_inode(temp);
|
||||
if (inode && ceph_snap(inode) == CEPH_SNAPDIR) {
|
||||
dout("build_path path+%d: %p SNAPDIR\n",
|
||||
pos, temp);
|
||||
@ -1790,7 +1790,7 @@ retry:
|
||||
goto retry;
|
||||
}
|
||||
|
||||
*base = ceph_ino(temp->d_inode);
|
||||
*base = ceph_ino(d_inode(temp));
|
||||
*plen = len;
|
||||
dout("build_path on %p %d built %llx '%.*s'\n",
|
||||
dentry, d_count(dentry), *base, len, path);
|
||||
@ -1803,8 +1803,8 @@ static int build_dentry_path(struct dentry *dentry,
|
||||
{
|
||||
char *path;
|
||||
|
||||
if (ceph_snap(dentry->d_parent->d_inode) == CEPH_NOSNAP) {
|
||||
*pino = ceph_ino(dentry->d_parent->d_inode);
|
||||
if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_NOSNAP) {
|
||||
*pino = ceph_ino(d_inode(dentry->d_parent));
|
||||
*ppath = dentry->d_name.name;
|
||||
*ppathlen = dentry->d_name.len;
|
||||
return 0;
|
||||
@ -1945,7 +1945,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
|
||||
releases = 0;
|
||||
if (req->r_inode_drop)
|
||||
releases += ceph_encode_inode_release(&p,
|
||||
req->r_inode ? req->r_inode : req->r_dentry->d_inode,
|
||||
req->r_inode ? req->r_inode : d_inode(req->r_dentry),
|
||||
mds, req->r_inode_drop, req->r_inode_unless, 0);
|
||||
if (req->r_dentry_drop)
|
||||
releases += ceph_encode_dentry_release(&p, req->r_dentry,
|
||||
@ -1955,7 +1955,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
|
||||
mds, req->r_old_dentry_drop, req->r_old_dentry_unless);
|
||||
if (req->r_old_inode_drop)
|
||||
releases += ceph_encode_inode_release(&p,
|
||||
req->r_old_dentry->d_inode,
|
||||
d_inode(req->r_old_dentry),
|
||||
mds, req->r_old_inode_drop, req->r_old_inode_unless, 0);
|
||||
|
||||
if (drop_cap_releases) {
|
||||
|
@ -44,7 +44,7 @@ static void ceph_put_super(struct super_block *s)
|
||||
|
||||
static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
|
||||
{
|
||||
struct ceph_fs_client *fsc = ceph_inode_to_client(dentry->d_inode);
|
||||
struct ceph_fs_client *fsc = ceph_inode_to_client(d_inode(dentry));
|
||||
struct ceph_monmap *monmap = fsc->client->monc.monmap;
|
||||
struct ceph_statfs st;
|
||||
u64 fsid;
|
||||
@ -972,7 +972,7 @@ static struct dentry *ceph_mount(struct file_system_type *fs_type,
|
||||
if (IS_ERR(res))
|
||||
goto out_splat;
|
||||
dout("root %p inode %p ino %llx.%llx\n", res,
|
||||
res->d_inode, ceph_vinop(res->d_inode));
|
||||
d_inode(res), ceph_vinop(d_inode(res)));
|
||||
return res;
|
||||
|
||||
out_splat:
|
||||
|
@ -776,12 +776,12 @@ ssize_t ceph_getxattr(struct dentry *dentry, const char *name, void *value,
|
||||
if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
|
||||
return generic_getxattr(dentry, name, value, size);
|
||||
|
||||
return __ceph_getxattr(dentry->d_inode, name, value, size);
|
||||
return __ceph_getxattr(d_inode(dentry), name, value, size);
|
||||
}
|
||||
|
||||
ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ceph_inode_info *ci = ceph_inode(inode);
|
||||
struct ceph_vxattr *vxattrs = ceph_inode_vxattrs(inode);
|
||||
u32 vir_namelen = 0;
|
||||
@ -847,7 +847,7 @@ static int ceph_sync_setxattr(struct dentry *dentry, const char *name,
|
||||
const char *value, size_t size, int flags)
|
||||
{
|
||||
struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ceph_inode_info *ci = ceph_inode(inode);
|
||||
struct ceph_mds_request *req;
|
||||
struct ceph_mds_client *mdsc = fsc->mdsc;
|
||||
@ -908,7 +908,7 @@ out:
|
||||
int __ceph_setxattr(struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size, int flags)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ceph_vxattr *vxattr;
|
||||
struct ceph_inode_info *ci = ceph_inode(inode);
|
||||
int issued;
|
||||
@ -1002,7 +1002,7 @@ out:
|
||||
int ceph_setxattr(struct dentry *dentry, const char *name,
|
||||
const void *value, size_t size, int flags)
|
||||
{
|
||||
if (ceph_snap(dentry->d_inode) != CEPH_NOSNAP)
|
||||
if (ceph_snap(d_inode(dentry)) != CEPH_NOSNAP)
|
||||
return -EROFS;
|
||||
|
||||
if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
|
||||
@ -1018,7 +1018,7 @@ static int ceph_send_removexattr(struct dentry *dentry, const char *name)
|
||||
{
|
||||
struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb);
|
||||
struct ceph_mds_client *mdsc = fsc->mdsc;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ceph_mds_request *req;
|
||||
int err;
|
||||
|
||||
@ -1041,7 +1041,7 @@ static int ceph_send_removexattr(struct dentry *dentry, const char *name)
|
||||
|
||||
int __ceph_removexattr(struct dentry *dentry, const char *name)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ceph_vxattr *vxattr;
|
||||
struct ceph_inode_info *ci = ceph_inode(inode);
|
||||
int issued;
|
||||
@ -1107,7 +1107,7 @@ out:
|
||||
|
||||
int ceph_removexattr(struct dentry *dentry, const char *name)
|
||||
{
|
||||
if (ceph_snap(dentry->d_inode) != CEPH_NOSNAP)
|
||||
if (ceph_snap(d_inode(dentry)) != CEPH_NOSNAP)
|
||||
return -EROFS;
|
||||
|
||||
if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN))
|
||||
|
@ -301,7 +301,7 @@ static struct vfsmount *cifs_dfs_do_automount(struct dentry *mntpt)
|
||||
if (full_path == NULL)
|
||||
goto cdda_exit;
|
||||
|
||||
cifs_sb = CIFS_SB(mntpt->d_inode->i_sb);
|
||||
cifs_sb = CIFS_SB(d_inode(mntpt)->i_sb);
|
||||
tlink = cifs_sb_tlink(cifs_sb);
|
||||
if (IS_ERR(tlink)) {
|
||||
mnt = ERR_CAST(tlink);
|
||||
|
@ -607,7 +607,7 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
|
||||
p = s = full_path;
|
||||
|
||||
do {
|
||||
struct inode *dir = dentry->d_inode;
|
||||
struct inode *dir = d_inode(dentry);
|
||||
struct dentry *child;
|
||||
|
||||
if (!dir) {
|
||||
|
@ -1898,7 +1898,7 @@ static void
|
||||
cifs_writev_requeue(struct cifs_writedata *wdata)
|
||||
{
|
||||
int i, rc = 0;
|
||||
struct inode *inode = wdata->cfile->dentry->d_inode;
|
||||
struct inode *inode = d_inode(wdata->cfile->dentry);
|
||||
struct TCP_Server_Info *server;
|
||||
unsigned int rest_len;
|
||||
|
||||
@ -1981,7 +1981,7 @@ cifs_writev_complete(struct work_struct *work)
|
||||
{
|
||||
struct cifs_writedata *wdata = container_of(work,
|
||||
struct cifs_writedata, work);
|
||||
struct inode *inode = wdata->cfile->dentry->d_inode;
|
||||
struct inode *inode = d_inode(wdata->cfile->dentry);
|
||||
int i = 0;
|
||||
|
||||
if (wdata->result == 0) {
|
||||
|
@ -745,13 +745,13 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
|
||||
goto lookup_out;
|
||||
}
|
||||
|
||||
if (direntry->d_inode != NULL) {
|
||||
if (d_really_is_positive(direntry)) {
|
||||
cifs_dbg(FYI, "non-NULL inode in lookup\n");
|
||||
} else {
|
||||
cifs_dbg(FYI, "NULL inode in lookup\n");
|
||||
}
|
||||
cifs_dbg(FYI, "Full path: %s inode = 0x%p\n",
|
||||
full_path, direntry->d_inode);
|
||||
full_path, d_inode(direntry));
|
||||
|
||||
if (pTcon->unix_ext) {
|
||||
rc = cifs_get_inode_info_unix(&newInode, full_path,
|
||||
@ -792,7 +792,7 @@ cifs_d_revalidate(struct dentry *direntry, unsigned int flags)
|
||||
if (flags & LOOKUP_RCU)
|
||||
return -ECHILD;
|
||||
|
||||
if (direntry->d_inode) {
|
||||
if (d_really_is_positive(direntry)) {
|
||||
if (cifs_revalidate_dentry(direntry))
|
||||
return 0;
|
||||
else {
|
||||
@ -803,7 +803,7 @@ cifs_d_revalidate(struct dentry *direntry, unsigned int flags)
|
||||
* attributes will have been updated by
|
||||
* cifs_revalidate_dentry().
|
||||
*/
|
||||
if (IS_AUTOMOUNT(direntry->d_inode) &&
|
||||
if (IS_AUTOMOUNT(d_inode(direntry)) &&
|
||||
!(direntry->d_flags & DCACHE_NEED_AUTOMOUNT)) {
|
||||
spin_lock(&direntry->d_lock);
|
||||
direntry->d_flags |= DCACHE_NEED_AUTOMOUNT;
|
||||
|
@ -273,7 +273,7 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
|
||||
struct tcon_link *tlink, __u32 oplock)
|
||||
{
|
||||
struct dentry *dentry = file->f_path.dentry;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(inode);
|
||||
struct cifsFileInfo *cfile;
|
||||
struct cifs_fid_locks *fdlocks;
|
||||
@ -357,7 +357,7 @@ cifsFileInfo_get(struct cifsFileInfo *cifs_file)
|
||||
*/
|
||||
void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
|
||||
{
|
||||
struct inode *inode = cifs_file->dentry->d_inode;
|
||||
struct inode *inode = d_inode(cifs_file->dentry);
|
||||
struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink);
|
||||
struct TCP_Server_Info *server = tcon->ses->server;
|
||||
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
||||
@ -386,7 +386,7 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file)
|
||||
|
||||
if (list_empty(&cifsi->openFileList)) {
|
||||
cifs_dbg(FYI, "closing last open instance for inode %p\n",
|
||||
cifs_file->dentry->d_inode);
|
||||
d_inode(cifs_file->dentry));
|
||||
/*
|
||||
* In strict cache mode we need invalidate mapping on the last
|
||||
* close because it may cause a error when we open this file
|
||||
@ -572,7 +572,7 @@ static int
|
||||
cifs_relock_file(struct cifsFileInfo *cfile)
|
||||
{
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
||||
int rc = 0;
|
||||
|
||||
@ -620,7 +620,7 @@ cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)
|
||||
return rc;
|
||||
}
|
||||
|
||||
inode = cfile->dentry->d_inode;
|
||||
inode = d_inode(cfile->dentry);
|
||||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
tcon = tlink_tcon(cfile->tlink);
|
||||
server = tcon->ses->server;
|
||||
@ -874,7 +874,7 @@ cifs_find_lock_conflict(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
|
||||
{
|
||||
bool rc = false;
|
||||
struct cifs_fid_locks *cur;
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
|
||||
list_for_each_entry(cur, &cinode->llist, llist) {
|
||||
rc = cifs_find_fid_lock_conflict(cur, offset, length, type,
|
||||
@ -899,7 +899,7 @@ cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
|
||||
{
|
||||
int rc = 0;
|
||||
struct cifsLockInfo *conf_lock;
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
|
||||
bool exist;
|
||||
|
||||
@ -927,7 +927,7 @@ cifs_lock_test(struct cifsFileInfo *cfile, __u64 offset, __u64 length,
|
||||
static void
|
||||
cifs_lock_add(struct cifsFileInfo *cfile, struct cifsLockInfo *lock)
|
||||
{
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
down_write(&cinode->lock_sem);
|
||||
list_add_tail(&lock->llist, &cfile->llist->locks);
|
||||
up_write(&cinode->lock_sem);
|
||||
@ -944,7 +944,7 @@ cifs_lock_add_if(struct cifsFileInfo *cfile, struct cifsLockInfo *lock,
|
||||
bool wait)
|
||||
{
|
||||
struct cifsLockInfo *conf_lock;
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
bool exist;
|
||||
int rc = 0;
|
||||
|
||||
@ -1125,7 +1125,7 @@ struct lock_to_push {
|
||||
static int
|
||||
cifs_push_posix_locks(struct cifsFileInfo *cfile)
|
||||
{
|
||||
struct inode *inode = cfile->dentry->d_inode;
|
||||
struct inode *inode = d_inode(cfile->dentry);
|
||||
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
||||
struct file_lock *flock;
|
||||
struct file_lock_context *flctx = inode->i_flctx;
|
||||
@ -1214,7 +1214,7 @@ static int
|
||||
cifs_push_locks(struct cifsFileInfo *cfile)
|
||||
{
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(cfile->dentry->d_sb);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
||||
int rc = 0;
|
||||
|
||||
@ -1382,7 +1382,7 @@ cifs_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
|
||||
unsigned int max_num, num, max_buf;
|
||||
LOCKING_ANDX_RANGE *buf, *cur;
|
||||
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
struct cifsLockInfo *li, *tmp;
|
||||
__u64 length = 1 + flock->fl_end - flock->fl_start;
|
||||
struct list_head tmp_llist;
|
||||
@ -1488,7 +1488,7 @@ cifs_setlk(struct file *file, struct file_lock *flock, __u32 type,
|
||||
struct cifsFileInfo *cfile = (struct cifsFileInfo *)file->private_data;
|
||||
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
||||
struct TCP_Server_Info *server = tcon->ses->server;
|
||||
struct inode *inode = cfile->dentry->d_inode;
|
||||
struct inode *inode = d_inode(cfile->dentry);
|
||||
|
||||
if (posix_lck) {
|
||||
int posix_lock_type;
|
||||
@ -1643,7 +1643,7 @@ cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
|
||||
struct TCP_Server_Info *server;
|
||||
unsigned int xid;
|
||||
struct dentry *dentry = open_file->dentry;
|
||||
struct cifsInodeInfo *cifsi = CIFS_I(dentry->d_inode);
|
||||
struct cifsInodeInfo *cifsi = CIFS_I(d_inode(dentry));
|
||||
struct cifs_io_parms io_parms;
|
||||
|
||||
cifs_sb = CIFS_SB(dentry->d_sb);
|
||||
@ -1676,7 +1676,7 @@ cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
|
||||
break;
|
||||
}
|
||||
|
||||
len = min(server->ops->wp_retry_size(dentry->d_inode),
|
||||
len = min(server->ops->wp_retry_size(d_inode(dentry)),
|
||||
(unsigned int)write_size - total_written);
|
||||
/* iov[0] is reserved for smb header */
|
||||
iov[1].iov_base = (char *)write_data + total_written;
|
||||
@ -1696,9 +1696,9 @@ cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
|
||||
return rc;
|
||||
}
|
||||
} else {
|
||||
spin_lock(&dentry->d_inode->i_lock);
|
||||
spin_lock(&d_inode(dentry)->i_lock);
|
||||
cifs_update_eof(cifsi, *offset, bytes_written);
|
||||
spin_unlock(&dentry->d_inode->i_lock);
|
||||
spin_unlock(&d_inode(dentry)->i_lock);
|
||||
*offset += bytes_written;
|
||||
}
|
||||
}
|
||||
@ -1706,12 +1706,12 @@ cifs_write(struct cifsFileInfo *open_file, __u32 pid, const char *write_data,
|
||||
cifs_stats_bytes_written(tcon, total_written);
|
||||
|
||||
if (total_written > 0) {
|
||||
spin_lock(&dentry->d_inode->i_lock);
|
||||
if (*offset > dentry->d_inode->i_size)
|
||||
i_size_write(dentry->d_inode, *offset);
|
||||
spin_unlock(&dentry->d_inode->i_lock);
|
||||
spin_lock(&d_inode(dentry)->i_lock);
|
||||
if (*offset > d_inode(dentry)->i_size)
|
||||
i_size_write(d_inode(dentry), *offset);
|
||||
spin_unlock(&d_inode(dentry)->i_lock);
|
||||
}
|
||||
mark_inode_dirty_sync(dentry->d_inode);
|
||||
mark_inode_dirty_sync(d_inode(dentry));
|
||||
free_xid(xid);
|
||||
return total_written;
|
||||
}
|
||||
@ -2406,7 +2406,7 @@ cifs_uncached_writev_complete(struct work_struct *work)
|
||||
{
|
||||
struct cifs_writedata *wdata = container_of(work,
|
||||
struct cifs_writedata, work);
|
||||
struct inode *inode = wdata->cfile->dentry->d_inode;
|
||||
struct inode *inode = d_inode(wdata->cfile->dentry);
|
||||
struct cifsInodeInfo *cifsi = CIFS_I(inode);
|
||||
|
||||
spin_lock(&inode->i_lock);
|
||||
@ -3794,7 +3794,7 @@ void cifs_oplock_break(struct work_struct *work)
|
||||
{
|
||||
struct cifsFileInfo *cfile = container_of(work, struct cifsFileInfo,
|
||||
oplock_break);
|
||||
struct inode *inode = cfile->dentry->d_inode;
|
||||
struct inode *inode = d_inode(cfile->dentry);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(inode);
|
||||
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
||||
struct TCP_Server_Info *server = tcon->ses->server;
|
||||
|
@ -1067,7 +1067,7 @@ cifs_rename_pending_delete(const char *full_path, struct dentry *dentry,
|
||||
int rc;
|
||||
struct cifs_fid fid;
|
||||
struct cifs_open_parms oparms;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct cifsInodeInfo *cifsInode = CIFS_I(inode);
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
|
||||
struct tcon_link *tlink;
|
||||
@ -1196,7 +1196,7 @@ cifs_drop_nlink(struct inode *inode)
|
||||
}
|
||||
|
||||
/*
|
||||
* If dentry->d_inode is null (usually meaning the cached dentry
|
||||
* If d_inode(dentry) is null (usually meaning the cached dentry
|
||||
* is a negative dentry) then we would attempt a standard SMB delete, but
|
||||
* if that fails we can not attempt the fall back mechanisms on EACCESS
|
||||
* but will return the EACCESS to the caller. Note that the VFS does not call
|
||||
@ -1207,7 +1207,7 @@ int cifs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
int rc = 0;
|
||||
unsigned int xid;
|
||||
char *full_path = NULL;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct cifsInodeInfo *cifs_inode;
|
||||
struct super_block *sb = dir->i_sb;
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
|
||||
@ -1551,13 +1551,13 @@ int cifs_rmdir(struct inode *inode, struct dentry *direntry)
|
||||
cifs_put_tlink(tlink);
|
||||
|
||||
if (!rc) {
|
||||
spin_lock(&direntry->d_inode->i_lock);
|
||||
i_size_write(direntry->d_inode, 0);
|
||||
clear_nlink(direntry->d_inode);
|
||||
spin_unlock(&direntry->d_inode->i_lock);
|
||||
spin_lock(&d_inode(direntry)->i_lock);
|
||||
i_size_write(d_inode(direntry), 0);
|
||||
clear_nlink(d_inode(direntry));
|
||||
spin_unlock(&d_inode(direntry)->i_lock);
|
||||
}
|
||||
|
||||
cifsInode = CIFS_I(direntry->d_inode);
|
||||
cifsInode = CIFS_I(d_inode(direntry));
|
||||
/* force revalidate to go get info when needed */
|
||||
cifsInode->time = 0;
|
||||
|
||||
@ -1568,7 +1568,7 @@ int cifs_rmdir(struct inode *inode, struct dentry *direntry)
|
||||
*/
|
||||
cifsInode->time = 0;
|
||||
|
||||
direntry->d_inode->i_ctime = inode->i_ctime = inode->i_mtime =
|
||||
d_inode(direntry)->i_ctime = inode->i_ctime = inode->i_mtime =
|
||||
current_fs_time(inode->i_sb);
|
||||
|
||||
rmdir_exit:
|
||||
@ -1727,7 +1727,7 @@ cifs_rename2(struct inode *source_dir, struct dentry *source_dentry,
|
||||
|
||||
unlink_target:
|
||||
/* Try unlinking the target dentry if it's not negative */
|
||||
if (target_dentry->d_inode && (rc == -EACCES || rc == -EEXIST)) {
|
||||
if (d_really_is_positive(target_dentry) && (rc == -EACCES || rc == -EEXIST)) {
|
||||
if (d_is_dir(target_dentry))
|
||||
tmprc = cifs_rmdir(target_dir, target_dentry);
|
||||
else
|
||||
@ -1867,7 +1867,7 @@ int cifs_revalidate_dentry_attr(struct dentry *dentry)
|
||||
{
|
||||
unsigned int xid;
|
||||
int rc = 0;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct super_block *sb = dentry->d_sb;
|
||||
char *full_path = NULL;
|
||||
|
||||
@ -1919,7 +1919,7 @@ int cifs_revalidate_file(struct file *filp)
|
||||
int cifs_revalidate_dentry(struct dentry *dentry)
|
||||
{
|
||||
int rc;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
|
||||
rc = cifs_revalidate_dentry_attr(dentry);
|
||||
if (rc)
|
||||
@ -1933,7 +1933,7 @@ int cifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
{
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(dentry->d_sb);
|
||||
struct cifs_tcon *tcon = cifs_sb_master_tcon(cifs_sb);
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
int rc;
|
||||
|
||||
/*
|
||||
@ -2110,7 +2110,7 @@ cifs_setattr_unix(struct dentry *direntry, struct iattr *attrs)
|
||||
int rc;
|
||||
unsigned int xid;
|
||||
char *full_path = NULL;
|
||||
struct inode *inode = direntry->d_inode;
|
||||
struct inode *inode = d_inode(direntry);
|
||||
struct cifsInodeInfo *cifsInode = CIFS_I(inode);
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
|
||||
struct tcon_link *tlink;
|
||||
@ -2251,7 +2251,7 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)
|
||||
unsigned int xid;
|
||||
kuid_t uid = INVALID_UID;
|
||||
kgid_t gid = INVALID_GID;
|
||||
struct inode *inode = direntry->d_inode;
|
||||
struct inode *inode = d_inode(direntry);
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
|
||||
struct cifsInodeInfo *cifsInode = CIFS_I(inode);
|
||||
char *full_path = NULL;
|
||||
@ -2409,7 +2409,7 @@ cifs_setattr_exit:
|
||||
int
|
||||
cifs_setattr(struct dentry *direntry, struct iattr *attrs)
|
||||
{
|
||||
struct inode *inode = direntry->d_inode;
|
||||
struct inode *inode = d_inode(direntry);
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
|
||||
struct cifs_tcon *pTcon = cifs_sb_master_tcon(cifs_sb);
|
||||
|
||||
|
@ -586,12 +586,12 @@ cifs_hardlink(struct dentry *old_file, struct inode *inode,
|
||||
* if source file is cached (oplocked) revalidate will not go to server
|
||||
* until the file is closed or oplock broken so update nlinks locally
|
||||
*/
|
||||
if (old_file->d_inode) {
|
||||
cifsInode = CIFS_I(old_file->d_inode);
|
||||
if (d_really_is_positive(old_file)) {
|
||||
cifsInode = CIFS_I(d_inode(old_file));
|
||||
if (rc == 0) {
|
||||
spin_lock(&old_file->d_inode->i_lock);
|
||||
inc_nlink(old_file->d_inode);
|
||||
spin_unlock(&old_file->d_inode->i_lock);
|
||||
spin_lock(&d_inode(old_file)->i_lock);
|
||||
inc_nlink(d_inode(old_file));
|
||||
spin_unlock(&d_inode(old_file)->i_lock);
|
||||
|
||||
/*
|
||||
* parent dir timestamps will update from srv within a
|
||||
@ -629,7 +629,7 @@ cifs_hl_exit:
|
||||
void *
|
||||
cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
|
||||
{
|
||||
struct inode *inode = direntry->d_inode;
|
||||
struct inode *inode = d_inode(direntry);
|
||||
int rc = -ENOMEM;
|
||||
unsigned int xid;
|
||||
char *full_path = NULL;
|
||||
|
@ -473,7 +473,7 @@ is_valid_oplock_break(char *buffer, struct TCP_Server_Info *srv)
|
||||
continue;
|
||||
|
||||
cifs_dbg(FYI, "file id match, oplock break\n");
|
||||
pCifsInode = CIFS_I(netfile->dentry->d_inode);
|
||||
pCifsInode = CIFS_I(d_inode(netfile->dentry));
|
||||
|
||||
set_bit(CIFS_INODE_PENDING_OPLOCK_BREAK,
|
||||
&pCifsInode->flags);
|
||||
|
@ -78,7 +78,7 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
|
||||
{
|
||||
struct dentry *dentry, *alias;
|
||||
struct inode *inode;
|
||||
struct super_block *sb = parent->d_inode->i_sb;
|
||||
struct super_block *sb = d_inode(parent)->i_sb;
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
|
||||
|
||||
cifs_dbg(FYI, "%s: for %s\n", __func__, name->name);
|
||||
@ -88,7 +88,7 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
|
||||
return;
|
||||
|
||||
if (dentry) {
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
if (inode) {
|
||||
/*
|
||||
* If we're generating inode numbers, then we don't
|
||||
|
@ -722,7 +722,7 @@ cifs_open_file(const unsigned int xid, struct cifs_open_parms *oparms,
|
||||
static void
|
||||
cifs_set_fid(struct cifsFileInfo *cfile, struct cifs_fid *fid, __u32 oplock)
|
||||
{
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
cfile->fid.netfid = fid->netfid;
|
||||
cifs_set_oplock_level(cinode, oplock);
|
||||
cinode->can_cache_brlcks = CIFS_CACHE_WRITE(cinode);
|
||||
|
@ -95,7 +95,7 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
|
||||
unsigned int max_num, num = 0, max_buf;
|
||||
struct smb2_lock_element *buf, *cur;
|
||||
struct cifs_tcon *tcon = tlink_tcon(cfile->tlink);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
struct cifsLockInfo *li, *tmp;
|
||||
__u64 length = 1 + flock->fl_end - flock->fl_start;
|
||||
struct list_head tmp_llist;
|
||||
@ -231,7 +231,7 @@ smb2_push_mandatory_locks(struct cifsFileInfo *cfile)
|
||||
unsigned int xid;
|
||||
unsigned int max_num, max_buf;
|
||||
struct smb2_lock_element *buf;
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
struct cifs_fid_locks *fdlocks;
|
||||
|
||||
xid = get_xid();
|
||||
|
@ -453,7 +453,7 @@ smb2_tcon_has_lease(struct cifs_tcon *tcon, struct smb2_lease_break *rsp,
|
||||
|
||||
list_for_each(tmp, &tcon->openFileList) {
|
||||
cfile = list_entry(tmp, struct cifsFileInfo, tlist);
|
||||
cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
|
||||
if (memcmp(cinode->lease_key, rsp->LeaseKey,
|
||||
SMB2_LEASE_KEY_SIZE))
|
||||
@ -590,7 +590,7 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
|
||||
continue;
|
||||
|
||||
cifs_dbg(FYI, "file id match, oplock break\n");
|
||||
cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
|
||||
if (!CIFS_CACHE_WRITE(cinode) &&
|
||||
rsp->OplockLevel == SMB2_OPLOCK_LEVEL_NONE)
|
||||
|
@ -524,7 +524,7 @@ smb2_print_stats(struct seq_file *m, struct cifs_tcon *tcon)
|
||||
static void
|
||||
smb2_set_fid(struct cifsFileInfo *cfile, struct cifs_fid *fid, __u32 oplock)
|
||||
{
|
||||
struct cifsInodeInfo *cinode = CIFS_I(cfile->dentry->d_inode);
|
||||
struct cifsInodeInfo *cinode = CIFS_I(d_inode(cfile->dentry));
|
||||
struct TCP_Server_Info *server = tlink_tcon(cfile->tlink)->ses->server;
|
||||
|
||||
cfile->fid.persistent_fid = fid->persistent_fid;
|
||||
@ -793,7 +793,7 @@ smb2_set_file_size(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
* If extending file more than one page make sparse. Many Linux fs
|
||||
* make files sparse by default when extending via ftruncate
|
||||
*/
|
||||
inode = cfile->dentry->d_inode;
|
||||
inode = d_inode(cfile->dentry);
|
||||
|
||||
if (!set_alloc && (size > inode->i_size + 8192)) {
|
||||
__u8 set_sparse = 1;
|
||||
@ -1032,7 +1032,7 @@ static long smb3_zero_range(struct file *file, struct cifs_tcon *tcon,
|
||||
|
||||
xid = get_xid();
|
||||
|
||||
inode = cfile->dentry->d_inode;
|
||||
inode = d_inode(cfile->dentry);
|
||||
cifsi = CIFS_I(inode);
|
||||
|
||||
/* if file not oplocked can't be sure whether asking to extend size */
|
||||
@ -1083,7 +1083,7 @@ static long smb3_punch_hole(struct file *file, struct cifs_tcon *tcon,
|
||||
|
||||
xid = get_xid();
|
||||
|
||||
inode = cfile->dentry->d_inode;
|
||||
inode = d_inode(cfile->dentry);
|
||||
cifsi = CIFS_I(inode);
|
||||
|
||||
/* Need to make file sparse, if not already, before freeing range. */
|
||||
@ -1115,7 +1115,7 @@ static long smb3_simple_falloc(struct file *file, struct cifs_tcon *tcon,
|
||||
|
||||
xid = get_xid();
|
||||
|
||||
inode = cfile->dentry->d_inode;
|
||||
inode = d_inode(cfile->dentry);
|
||||
cifsi = CIFS_I(inode);
|
||||
|
||||
/* if file not oplocked can't be sure whether asking to extend size */
|
||||
|
@ -50,9 +50,9 @@ int cifs_removexattr(struct dentry *direntry, const char *ea_name)
|
||||
|
||||
if (direntry == NULL)
|
||||
return -EIO;
|
||||
if (direntry->d_inode == NULL)
|
||||
if (d_really_is_negative(direntry))
|
||||
return -EIO;
|
||||
sb = direntry->d_inode->i_sb;
|
||||
sb = d_inode(direntry)->i_sb;
|
||||
if (sb == NULL)
|
||||
return -EIO;
|
||||
|
||||
@ -111,9 +111,9 @@ int cifs_setxattr(struct dentry *direntry, const char *ea_name,
|
||||
|
||||
if (direntry == NULL)
|
||||
return -EIO;
|
||||
if (direntry->d_inode == NULL)
|
||||
if (d_really_is_negative(direntry))
|
||||
return -EIO;
|
||||
sb = direntry->d_inode->i_sb;
|
||||
sb = d_inode(direntry)->i_sb;
|
||||
if (sb == NULL)
|
||||
return -EIO;
|
||||
|
||||
@ -177,12 +177,12 @@ int cifs_setxattr(struct dentry *direntry, const char *ea_name,
|
||||
memcpy(pacl, ea_value, value_size);
|
||||
if (pTcon->ses->server->ops->set_acl)
|
||||
rc = pTcon->ses->server->ops->set_acl(pacl,
|
||||
value_size, direntry->d_inode,
|
||||
value_size, d_inode(direntry),
|
||||
full_path, CIFS_ACL_DACL);
|
||||
else
|
||||
rc = -EOPNOTSUPP;
|
||||
if (rc == 0) /* force revalidate of the inode */
|
||||
CIFS_I(direntry->d_inode)->time = 0;
|
||||
CIFS_I(d_inode(direntry))->time = 0;
|
||||
kfree(pacl);
|
||||
}
|
||||
#else
|
||||
@ -246,9 +246,9 @@ ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name,
|
||||
|
||||
if (direntry == NULL)
|
||||
return -EIO;
|
||||
if (direntry->d_inode == NULL)
|
||||
if (d_really_is_negative(direntry))
|
||||
return -EIO;
|
||||
sb = direntry->d_inode->i_sb;
|
||||
sb = d_inode(direntry)->i_sb;
|
||||
if (sb == NULL)
|
||||
return -EIO;
|
||||
|
||||
@ -324,7 +324,7 @@ ssize_t cifs_getxattr(struct dentry *direntry, const char *ea_name,
|
||||
goto get_ea_exit; /* rc already EOPNOTSUPP */
|
||||
|
||||
pacl = pTcon->ses->server->ops->get_acl(cifs_sb,
|
||||
direntry->d_inode, full_path, &acllen);
|
||||
d_inode(direntry), full_path, &acllen);
|
||||
if (IS_ERR(pacl)) {
|
||||
rc = PTR_ERR(pacl);
|
||||
cifs_dbg(VFS, "%s: error %zd getting sec desc\n",
|
||||
@ -382,9 +382,9 @@ ssize_t cifs_listxattr(struct dentry *direntry, char *data, size_t buf_size)
|
||||
|
||||
if (direntry == NULL)
|
||||
return -EIO;
|
||||
if (direntry->d_inode == NULL)
|
||||
if (d_really_is_negative(direntry))
|
||||
return -EIO;
|
||||
sb = direntry->d_inode->i_sb;
|
||||
sb = d_inode(direntry)->i_sb;
|
||||
if (sb == NULL)
|
||||
return -EIO;
|
||||
|
||||
|
@ -94,8 +94,8 @@ static void coda_flag_children(struct dentry *parent, int flag)
|
||||
spin_lock(&parent->d_lock);
|
||||
list_for_each_entry(de, &parent->d_subdirs, d_child) {
|
||||
/* don't know what to do with negative dentries */
|
||||
if (de->d_inode )
|
||||
coda_flag_inode(de->d_inode, flag);
|
||||
if (d_inode(de) )
|
||||
coda_flag_inode(d_inode(de), flag);
|
||||
}
|
||||
spin_unlock(&parent->d_lock);
|
||||
return;
|
||||
|
@ -201,7 +201,7 @@ err_out:
|
||||
static int coda_link(struct dentry *source_de, struct inode *dir_inode,
|
||||
struct dentry *de)
|
||||
{
|
||||
struct inode *inode = source_de->d_inode;
|
||||
struct inode *inode = d_inode(source_de);
|
||||
const char * name = de->d_name.name;
|
||||
int len = de->d_name.len;
|
||||
int error;
|
||||
@ -266,7 +266,7 @@ static int coda_unlink(struct inode *dir, struct dentry *de)
|
||||
return error;
|
||||
|
||||
coda_dir_update_mtime(dir);
|
||||
drop_nlink(de->d_inode);
|
||||
drop_nlink(d_inode(de));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -279,8 +279,8 @@ static int coda_rmdir(struct inode *dir, struct dentry *de)
|
||||
error = venus_rmdir(dir->i_sb, coda_i2f(dir), name, len);
|
||||
if (!error) {
|
||||
/* VFS may delete the child */
|
||||
if (de->d_inode)
|
||||
clear_nlink(de->d_inode);
|
||||
if (d_really_is_positive(de))
|
||||
clear_nlink(d_inode(de));
|
||||
|
||||
/* fix the link count of the parent */
|
||||
coda_dir_drop_nlink(dir);
|
||||
@ -303,14 +303,14 @@ static int coda_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
coda_i2f(new_dir), old_length, new_length,
|
||||
(const char *) old_name, (const char *)new_name);
|
||||
if (!error) {
|
||||
if (new_dentry->d_inode) {
|
||||
if (d_really_is_positive(new_dentry)) {
|
||||
if (d_is_dir(new_dentry)) {
|
||||
coda_dir_drop_nlink(old_dir);
|
||||
coda_dir_inc_nlink(new_dir);
|
||||
}
|
||||
coda_dir_update_mtime(old_dir);
|
||||
coda_dir_update_mtime(new_dir);
|
||||
coda_flag_inode(new_dentry->d_inode, C_VATTR);
|
||||
coda_flag_inode(d_inode(new_dentry), C_VATTR);
|
||||
} else {
|
||||
coda_flag_inode(old_dir, C_VATTR);
|
||||
coda_flag_inode(new_dir, C_VATTR);
|
||||
@ -449,13 +449,13 @@ static int coda_dentry_revalidate(struct dentry *de, unsigned int flags)
|
||||
if (flags & LOOKUP_RCU)
|
||||
return -ECHILD;
|
||||
|
||||
inode = de->d_inode;
|
||||
inode = d_inode(de);
|
||||
if (!inode || is_root_inode(inode))
|
||||
goto out;
|
||||
if (is_bad_inode(inode))
|
||||
goto bad;
|
||||
|
||||
cii = ITOC(de->d_inode);
|
||||
cii = ITOC(d_inode(de));
|
||||
if (!(cii->c_flags & (C_PURGE | C_FLUSH)))
|
||||
goto out;
|
||||
|
||||
@ -487,11 +487,11 @@ static int coda_dentry_delete(const struct dentry * dentry)
|
||||
{
|
||||
int flags;
|
||||
|
||||
if (!dentry->d_inode)
|
||||
if (d_really_is_negative(dentry))
|
||||
return 0;
|
||||
|
||||
flags = (ITOC(dentry->d_inode)->c_flags) & C_PURGE;
|
||||
if (is_bad_inode(dentry->d_inode) || flags) {
|
||||
flags = (ITOC(d_inode(dentry))->c_flags) & C_PURGE;
|
||||
if (is_bad_inode(d_inode(dentry)) || flags) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -257,15 +257,15 @@ static void coda_evict_inode(struct inode *inode)
|
||||
|
||||
int coda_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
|
||||
{
|
||||
int err = coda_revalidate_inode(dentry->d_inode);
|
||||
int err = coda_revalidate_inode(d_inode(dentry));
|
||||
if (!err)
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
generic_fillattr(d_inode(dentry), stat);
|
||||
return err;
|
||||
}
|
||||
|
||||
int coda_setattr(struct dentry *de, struct iattr *iattr)
|
||||
{
|
||||
struct inode *inode = de->d_inode;
|
||||
struct inode *inode = d_inode(de);
|
||||
struct coda_vattr vattr;
|
||||
int error;
|
||||
|
||||
|
@ -72,7 +72,7 @@ static long coda_pioctl(struct file *filp, unsigned int cmd,
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
target_inode = path.dentry->d_inode;
|
||||
target_inode = d_inode(path.dentry);
|
||||
|
||||
/* return if it is not a Coda inode */
|
||||
if (target_inode->i_sb != inode->i_sb) {
|
||||
|
@ -820,8 +820,8 @@ int coda_downcall(struct venus_comm *vcp, int opcode, union outputArgs *out)
|
||||
case CODA_FLUSH:
|
||||
coda_cache_clear_all(sb);
|
||||
shrink_dcache_sb(sb);
|
||||
if (sb->s_root->d_inode)
|
||||
coda_flag_inode(sb->s_root->d_inode, C_FLUSH);
|
||||
if (d_really_is_positive(sb->s_root))
|
||||
coda_flag_inode(d_inode(sb->s_root), C_FLUSH);
|
||||
break;
|
||||
|
||||
case CODA_PURGEUSER:
|
||||
|
@ -289,7 +289,7 @@ static int configfs_create_dir(struct config_item *item, struct dentry *dentry)
|
||||
configfs_set_dir_dirent_depth(p->d_fsdata, dentry->d_fsdata);
|
||||
error = configfs_create(dentry, mode, init_dir);
|
||||
if (!error) {
|
||||
inc_nlink(p->d_inode);
|
||||
inc_nlink(d_inode(p));
|
||||
item->ci_dentry = dentry;
|
||||
} else {
|
||||
struct configfs_dirent *sd = dentry->d_fsdata;
|
||||
@ -375,8 +375,8 @@ static void remove_dir(struct dentry * d)
|
||||
list_del_init(&sd->s_sibling);
|
||||
spin_unlock(&configfs_dirent_lock);
|
||||
configfs_put(sd);
|
||||
if (d->d_inode)
|
||||
simple_rmdir(parent->d_inode,d);
|
||||
if (d_really_is_positive(d))
|
||||
simple_rmdir(d_inode(parent),d);
|
||||
|
||||
pr_debug(" o %pd removing done (%d)\n", d, d_count(d));
|
||||
|
||||
@ -513,7 +513,7 @@ static int configfs_detach_prep(struct dentry *dentry, struct mutex **wait_mutex
|
||||
/* Abort if racing with mkdir() */
|
||||
if (sd->s_type & CONFIGFS_USET_IN_MKDIR) {
|
||||
if (wait_mutex)
|
||||
*wait_mutex = &sd->s_dentry->d_inode->i_mutex;
|
||||
*wait_mutex = &d_inode(sd->s_dentry)->i_mutex;
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@ -624,13 +624,13 @@ static void detach_groups(struct config_group *group)
|
||||
|
||||
child = sd->s_dentry;
|
||||
|
||||
mutex_lock(&child->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(child)->i_mutex);
|
||||
|
||||
configfs_detach_group(sd->s_element);
|
||||
child->d_inode->i_flags |= S_DEAD;
|
||||
d_inode(child)->i_flags |= S_DEAD;
|
||||
dont_mount(child);
|
||||
|
||||
mutex_unlock(&child->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(child)->i_mutex);
|
||||
|
||||
d_delete(child);
|
||||
dput(child);
|
||||
@ -672,7 +672,7 @@ static int create_default_group(struct config_group *parent_group,
|
||||
sd = child->d_fsdata;
|
||||
sd->s_type |= CONFIGFS_USET_DEFAULT;
|
||||
} else {
|
||||
BUG_ON(child->d_inode);
|
||||
BUG_ON(d_inode(child));
|
||||
d_drop(child);
|
||||
dput(child);
|
||||
}
|
||||
@ -818,11 +818,11 @@ static int configfs_attach_item(struct config_item *parent_item,
|
||||
* the VFS may already have hit and used them. Thus,
|
||||
* we must lock them as rmdir() would.
|
||||
*/
|
||||
mutex_lock(&dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dentry)->i_mutex);
|
||||
configfs_remove_dir(item);
|
||||
dentry->d_inode->i_flags |= S_DEAD;
|
||||
d_inode(dentry)->i_flags |= S_DEAD;
|
||||
dont_mount(dentry);
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry)->i_mutex);
|
||||
d_delete(dentry);
|
||||
}
|
||||
}
|
||||
@ -858,16 +858,16 @@ static int configfs_attach_group(struct config_item *parent_item,
|
||||
* We must also lock the inode to remove it safely in case of
|
||||
* error, as rmdir() would.
|
||||
*/
|
||||
mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD);
|
||||
mutex_lock_nested(&d_inode(dentry)->i_mutex, I_MUTEX_CHILD);
|
||||
configfs_adjust_dir_dirent_depth_before_populate(sd);
|
||||
ret = populate_groups(to_config_group(item));
|
||||
if (ret) {
|
||||
configfs_detach_item(item);
|
||||
dentry->d_inode->i_flags |= S_DEAD;
|
||||
d_inode(dentry)->i_flags |= S_DEAD;
|
||||
dont_mount(dentry);
|
||||
}
|
||||
configfs_adjust_dir_dirent_depth_after_populate(sd);
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry)->i_mutex);
|
||||
if (ret)
|
||||
d_delete(dentry);
|
||||
}
|
||||
@ -1075,7 +1075,7 @@ int configfs_depend_item(struct configfs_subsystem *subsys,
|
||||
* subsystem is really registered, and so we need to lock out
|
||||
* configfs_[un]register_subsystem().
|
||||
*/
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
|
||||
root_sd = root->d_fsdata;
|
||||
|
||||
@ -1111,7 +1111,7 @@ int configfs_depend_item(struct configfs_subsystem *subsys,
|
||||
out_unlock_dirent_lock:
|
||||
spin_unlock(&configfs_dirent_lock);
|
||||
out_unlock_fs:
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
|
||||
/*
|
||||
* If we succeeded, the fs is pinned via other methods. If not,
|
||||
@ -1453,11 +1453,11 @@ int configfs_rename_dir(struct config_item * item, const char *new_name)
|
||||
down_write(&configfs_rename_sem);
|
||||
parent = item->parent->dentry;
|
||||
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
|
||||
new_dentry = lookup_one_len(new_name, parent, strlen(new_name));
|
||||
if (!IS_ERR(new_dentry)) {
|
||||
if (!new_dentry->d_inode) {
|
||||
if (d_really_is_negative(new_dentry)) {
|
||||
error = config_item_set_name(item, "%s", new_name);
|
||||
if (!error) {
|
||||
d_add(new_dentry, NULL);
|
||||
@ -1469,7 +1469,7 @@ int configfs_rename_dir(struct config_item * item, const char *new_name)
|
||||
error = -EEXIST;
|
||||
dput(new_dentry);
|
||||
}
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
up_write(&configfs_rename_sem);
|
||||
|
||||
return error;
|
||||
@ -1482,7 +1482,7 @@ static int configfs_dir_open(struct inode *inode, struct file *file)
|
||||
struct configfs_dirent * parent_sd = dentry->d_fsdata;
|
||||
int err;
|
||||
|
||||
mutex_lock(&dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dentry)->i_mutex);
|
||||
/*
|
||||
* Fake invisibility if dir belongs to a group/default groups hierarchy
|
||||
* being attached
|
||||
@ -1495,7 +1495,7 @@ static int configfs_dir_open(struct inode *inode, struct file *file)
|
||||
else
|
||||
err = 0;
|
||||
}
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry)->i_mutex);
|
||||
|
||||
return err;
|
||||
}
|
||||
@ -1505,11 +1505,11 @@ static int configfs_dir_close(struct inode *inode, struct file *file)
|
||||
struct dentry * dentry = file->f_path.dentry;
|
||||
struct configfs_dirent * cursor = file->private_data;
|
||||
|
||||
mutex_lock(&dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dentry)->i_mutex);
|
||||
spin_lock(&configfs_dirent_lock);
|
||||
list_del_init(&cursor->s_sibling);
|
||||
spin_unlock(&configfs_dirent_lock);
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry)->i_mutex);
|
||||
|
||||
release_configfs_dirent(cursor);
|
||||
|
||||
@ -1567,7 +1567,7 @@ static int configfs_readdir(struct file *file, struct dir_context *ctx)
|
||||
spin_lock(&configfs_dirent_lock);
|
||||
dentry = next->s_dentry;
|
||||
if (dentry)
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
if (inode)
|
||||
ino = inode->i_ino;
|
||||
spin_unlock(&configfs_dirent_lock);
|
||||
@ -1590,7 +1590,7 @@ static loff_t configfs_dir_lseek(struct file *file, loff_t offset, int whence)
|
||||
{
|
||||
struct dentry * dentry = file->f_path.dentry;
|
||||
|
||||
mutex_lock(&dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dentry)->i_mutex);
|
||||
switch (whence) {
|
||||
case 1:
|
||||
offset += file->f_pos;
|
||||
@ -1598,7 +1598,7 @@ static loff_t configfs_dir_lseek(struct file *file, loff_t offset, int whence)
|
||||
if (offset >= 0)
|
||||
break;
|
||||
default:
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry)->i_mutex);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (offset != file->f_pos) {
|
||||
@ -1624,7 +1624,7 @@ static loff_t configfs_dir_lseek(struct file *file, loff_t offset, int whence)
|
||||
spin_unlock(&configfs_dirent_lock);
|
||||
}
|
||||
}
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry)->i_mutex);
|
||||
return offset;
|
||||
}
|
||||
|
||||
@ -1654,7 +1654,7 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
|
||||
sd = root->d_fsdata;
|
||||
link_group(to_config_group(sd->s_element), group);
|
||||
|
||||
mutex_lock_nested(&root->d_inode->i_mutex, I_MUTEX_PARENT);
|
||||
mutex_lock_nested(&d_inode(root)->i_mutex, I_MUTEX_PARENT);
|
||||
|
||||
err = -ENOMEM;
|
||||
dentry = d_alloc_name(root, group->cg_item.ci_name);
|
||||
@ -1664,7 +1664,7 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
|
||||
err = configfs_attach_group(sd->s_element, &group->cg_item,
|
||||
dentry);
|
||||
if (err) {
|
||||
BUG_ON(dentry->d_inode);
|
||||
BUG_ON(d_inode(dentry));
|
||||
d_drop(dentry);
|
||||
dput(dentry);
|
||||
} else {
|
||||
@ -1674,7 +1674,7 @@ int configfs_register_subsystem(struct configfs_subsystem *subsys)
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
|
||||
if (err) {
|
||||
unlink_group(group);
|
||||
@ -1695,9 +1695,9 @@ void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
|
||||
return;
|
||||
}
|
||||
|
||||
mutex_lock_nested(&root->d_inode->i_mutex,
|
||||
mutex_lock_nested(&d_inode(root)->i_mutex,
|
||||
I_MUTEX_PARENT);
|
||||
mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_CHILD);
|
||||
mutex_lock_nested(&d_inode(dentry)->i_mutex, I_MUTEX_CHILD);
|
||||
mutex_lock(&configfs_symlink_mutex);
|
||||
spin_lock(&configfs_dirent_lock);
|
||||
if (configfs_detach_prep(dentry, NULL)) {
|
||||
@ -1706,13 +1706,13 @@ void configfs_unregister_subsystem(struct configfs_subsystem *subsys)
|
||||
spin_unlock(&configfs_dirent_lock);
|
||||
mutex_unlock(&configfs_symlink_mutex);
|
||||
configfs_detach_group(&group->cg_item);
|
||||
dentry->d_inode->i_flags |= S_DEAD;
|
||||
d_inode(dentry)->i_flags |= S_DEAD;
|
||||
dont_mount(dentry);
|
||||
mutex_unlock(&dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry)->i_mutex);
|
||||
|
||||
d_delete(dentry);
|
||||
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
|
||||
dput(dentry);
|
||||
|
||||
|
@ -326,10 +326,10 @@ int configfs_create_file(struct config_item * item, const struct configfs_attrib
|
||||
umode_t mode = (attr->ca_mode & S_IALLUGO) | S_IFREG;
|
||||
int error = 0;
|
||||
|
||||
mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_NORMAL);
|
||||
mutex_lock_nested(&d_inode(dir)->i_mutex, I_MUTEX_NORMAL);
|
||||
error = configfs_make_dirent(parent_sd, NULL, (void *) attr, mode,
|
||||
CONFIGFS_ITEM_ATTR);
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
@ -56,7 +56,7 @@ static const struct inode_operations configfs_inode_operations ={
|
||||
|
||||
int configfs_setattr(struct dentry * dentry, struct iattr * iattr)
|
||||
{
|
||||
struct inode * inode = dentry->d_inode;
|
||||
struct inode * inode = d_inode(dentry);
|
||||
struct configfs_dirent * sd = dentry->d_fsdata;
|
||||
struct iattr * sd_iattr;
|
||||
unsigned int ia_valid = iattr->ia_valid;
|
||||
@ -186,7 +186,7 @@ int configfs_create(struct dentry * dentry, umode_t mode, void (*init)(struct in
|
||||
if (!dentry)
|
||||
return -ENOENT;
|
||||
|
||||
if (dentry->d_inode)
|
||||
if (d_really_is_positive(dentry))
|
||||
return -EEXIST;
|
||||
|
||||
sd = dentry->d_fsdata;
|
||||
@ -194,7 +194,7 @@ int configfs_create(struct dentry * dentry, umode_t mode, void (*init)(struct in
|
||||
if (!inode)
|
||||
return -ENOMEM;
|
||||
|
||||
p_inode = dentry->d_parent->d_inode;
|
||||
p_inode = d_inode(dentry->d_parent);
|
||||
p_inode->i_mtime = p_inode->i_ctime = CURRENT_TIME;
|
||||
configfs_set_inode_lock_class(sd, inode);
|
||||
|
||||
@ -236,11 +236,11 @@ void configfs_drop_dentry(struct configfs_dirent * sd, struct dentry * parent)
|
||||
|
||||
if (dentry) {
|
||||
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(parent->d_inode, dentry);
|
||||
simple_unlink(d_inode(parent), dentry);
|
||||
} else
|
||||
spin_unlock(&dentry->d_lock);
|
||||
}
|
||||
@ -251,11 +251,11 @@ void configfs_hash_and_remove(struct dentry * dir, const char * name)
|
||||
struct configfs_dirent * sd;
|
||||
struct configfs_dirent * parent_sd = dir->d_fsdata;
|
||||
|
||||
if (dir->d_inode == NULL)
|
||||
if (d_really_is_negative(dir))
|
||||
/* no inode means this hasn't been made visible yet */
|
||||
return;
|
||||
|
||||
mutex_lock(&dir->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(dir)->i_mutex);
|
||||
list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
|
||||
if (!sd->s_element)
|
||||
continue;
|
||||
@ -268,5 +268,5 @@ void configfs_hash_and_remove(struct dentry * dir, const char * name)
|
||||
break;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
}
|
||||
|
4
fs/dax.c
4
fs/dax.c
@ -209,7 +209,7 @@ ssize_t dax_do_io(struct kiocb *iocb, struct inode *inode,
|
||||
}
|
||||
|
||||
/* Protects against truncate */
|
||||
atomic_inc(&inode->i_dio_count);
|
||||
inode_dio_begin(inode);
|
||||
|
||||
retval = dax_io(inode, iter, pos, end, get_block, &bh);
|
||||
|
||||
@ -219,7 +219,7 @@ ssize_t dax_do_io(struct kiocb *iocb, struct inode *inode,
|
||||
if ((retval > 0) && end_io)
|
||||
end_io(iocb, pos, retval, bh.b_private);
|
||||
|
||||
inode_dio_done(inode);
|
||||
inode_dio_end(inode);
|
||||
out:
|
||||
return retval;
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ const struct file_operations debugfs_file_operations = {
|
||||
|
||||
static void *debugfs_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
{
|
||||
nd_set_link(nd, dentry->d_inode->i_private);
|
||||
nd_set_link(nd, d_inode(dentry)->i_private);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ static struct inode *debugfs_get_inode(struct super_block *sb)
|
||||
|
||||
static inline int debugfs_positive(struct dentry *dentry)
|
||||
{
|
||||
return dentry->d_inode && !d_unhashed(dentry);
|
||||
return d_really_is_positive(dentry) && !d_unhashed(dentry);
|
||||
}
|
||||
|
||||
struct debugfs_mount_opts {
|
||||
@ -124,7 +124,7 @@ static int debugfs_parse_options(char *data, struct debugfs_mount_opts *opts)
|
||||
static int debugfs_apply_options(struct super_block *sb)
|
||||
{
|
||||
struct debugfs_fs_info *fsi = sb->s_fs_info;
|
||||
struct inode *inode = sb->s_root->d_inode;
|
||||
struct inode *inode = d_inode(sb->s_root);
|
||||
struct debugfs_mount_opts *opts = &fsi->mount_opts;
|
||||
|
||||
inode->i_mode &= ~S_IALLUGO;
|
||||
@ -188,7 +188,7 @@ static struct vfsmount *debugfs_automount(struct path *path)
|
||||
{
|
||||
struct vfsmount *(*f)(void *);
|
||||
f = (struct vfsmount *(*)(void *))path->dentry->d_fsdata;
|
||||
return f(path->dentry->d_inode->i_private);
|
||||
return f(d_inode(path->dentry)->i_private);
|
||||
}
|
||||
|
||||
static const struct dentry_operations debugfs_dops = {
|
||||
@ -270,20 +270,20 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
|
||||
if (!parent)
|
||||
parent = debugfs_mount->mnt_root;
|
||||
|
||||
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->d_inode) {
|
||||
if (!IS_ERR(dentry) && d_really_is_positive(dentry)) {
|
||||
dput(dentry);
|
||||
dentry = ERR_PTR(-EEXIST);
|
||||
}
|
||||
if (IS_ERR(dentry))
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
return dentry;
|
||||
}
|
||||
|
||||
static struct dentry *failed_creating(struct dentry *dentry)
|
||||
{
|
||||
mutex_unlock(&dentry->d_parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry->d_parent)->i_mutex);
|
||||
dput(dentry);
|
||||
simple_release_fs(&debugfs_mount, &debugfs_mount_count);
|
||||
return NULL;
|
||||
@ -291,7 +291,7 @@ static struct dentry *failed_creating(struct dentry *dentry)
|
||||
|
||||
static struct dentry *end_creating(struct dentry *dentry)
|
||||
{
|
||||
mutex_unlock(&dentry->d_parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dentry->d_parent)->i_mutex);
|
||||
return dentry;
|
||||
}
|
||||
|
||||
@ -344,7 +344,7 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode,
|
||||
inode->i_fop = fops ? fops : &debugfs_file_operations;
|
||||
inode->i_private = data;
|
||||
d_instantiate(dentry, inode);
|
||||
fsnotify_create(dentry->d_parent->d_inode, dentry);
|
||||
fsnotify_create(d_inode(dentry->d_parent), dentry);
|
||||
return end_creating(dentry);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(debugfs_create_file);
|
||||
@ -384,7 +384,7 @@ struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
|
||||
struct dentry *de = debugfs_create_file(name, mode, parent, data, fops);
|
||||
|
||||
if (de)
|
||||
de->d_inode->i_size = file_size;
|
||||
d_inode(de)->i_size = file_size;
|
||||
return de;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(debugfs_create_file_size);
|
||||
@ -426,8 +426,8 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
|
||||
/* directory inodes start off with i_nlink == 2 (for "." entry) */
|
||||
inc_nlink(inode);
|
||||
d_instantiate(dentry, inode);
|
||||
inc_nlink(dentry->d_parent->d_inode);
|
||||
fsnotify_mkdir(dentry->d_parent->d_inode, dentry);
|
||||
inc_nlink(d_inode(dentry->d_parent));
|
||||
fsnotify_mkdir(d_inode(dentry->d_parent), dentry);
|
||||
return end_creating(dentry);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(debugfs_create_dir);
|
||||
@ -525,9 +525,9 @@ static int __debugfs_remove(struct dentry *dentry, struct dentry *parent)
|
||||
if (debugfs_positive(dentry)) {
|
||||
dget(dentry);
|
||||
if (d_is_dir(dentry))
|
||||
ret = simple_rmdir(parent->d_inode, dentry);
|
||||
ret = simple_rmdir(d_inode(parent), dentry);
|
||||
else
|
||||
simple_unlink(parent->d_inode, dentry);
|
||||
simple_unlink(d_inode(parent), dentry);
|
||||
if (!ret)
|
||||
d_delete(dentry);
|
||||
dput(dentry);
|
||||
@ -557,12 +557,12 @@ void debugfs_remove(struct dentry *dentry)
|
||||
return;
|
||||
|
||||
parent = dentry->d_parent;
|
||||
if (!parent || !parent->d_inode)
|
||||
if (!parent || d_really_is_negative(parent))
|
||||
return;
|
||||
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
ret = __debugfs_remove(dentry, parent);
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
if (!ret)
|
||||
simple_release_fs(&debugfs_mount, &debugfs_mount_count);
|
||||
}
|
||||
@ -588,12 +588,12 @@ void debugfs_remove_recursive(struct dentry *dentry)
|
||||
return;
|
||||
|
||||
parent = dentry->d_parent;
|
||||
if (!parent || !parent->d_inode)
|
||||
if (!parent || d_really_is_negative(parent))
|
||||
return;
|
||||
|
||||
parent = dentry;
|
||||
down:
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
loop:
|
||||
/*
|
||||
* The parent->d_subdirs is protected by the d_lock. Outside that
|
||||
@ -608,7 +608,7 @@ void debugfs_remove_recursive(struct dentry *dentry)
|
||||
/* perhaps simple_empty(child) makes more sense */
|
||||
if (!list_empty(&child->d_subdirs)) {
|
||||
spin_unlock(&parent->d_lock);
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
parent = child;
|
||||
goto down;
|
||||
}
|
||||
@ -629,10 +629,10 @@ void debugfs_remove_recursive(struct dentry *dentry)
|
||||
}
|
||||
spin_unlock(&parent->d_lock);
|
||||
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
child = parent;
|
||||
parent = parent->d_parent;
|
||||
mutex_lock(&parent->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(parent)->i_mutex);
|
||||
|
||||
if (child != dentry)
|
||||
/* go up */
|
||||
@ -640,7 +640,7 @@ void debugfs_remove_recursive(struct dentry *dentry)
|
||||
|
||||
if (!__debugfs_remove(child, parent))
|
||||
simple_release_fs(&debugfs_mount, &debugfs_mount_count);
|
||||
mutex_unlock(&parent->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(parent)->i_mutex);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(debugfs_remove_recursive);
|
||||
|
||||
@ -672,27 +672,27 @@ struct dentry *debugfs_rename(struct dentry *old_dir, struct dentry *old_dentry,
|
||||
|
||||
trap = lock_rename(new_dir, old_dir);
|
||||
/* Source or destination directories don't exist? */
|
||||
if (!old_dir->d_inode || !new_dir->d_inode)
|
||||
if (d_really_is_negative(old_dir) || d_really_is_negative(new_dir))
|
||||
goto exit;
|
||||
/* Source does not exist, cyclic rename, or mountpoint? */
|
||||
if (!old_dentry->d_inode || old_dentry == trap ||
|
||||
if (d_really_is_negative(old_dentry) || old_dentry == trap ||
|
||||
d_mountpoint(old_dentry))
|
||||
goto exit;
|
||||
dentry = lookup_one_len(new_name, new_dir, strlen(new_name));
|
||||
/* Lookup failed, cyclic rename or target exists? */
|
||||
if (IS_ERR(dentry) || dentry == trap || dentry->d_inode)
|
||||
if (IS_ERR(dentry) || dentry == trap || d_really_is_positive(dentry))
|
||||
goto exit;
|
||||
|
||||
old_name = fsnotify_oldname_init(old_dentry->d_name.name);
|
||||
|
||||
error = simple_rename(old_dir->d_inode, old_dentry, new_dir->d_inode,
|
||||
error = simple_rename(d_inode(old_dir), old_dentry, d_inode(new_dir),
|
||||
dentry);
|
||||
if (error) {
|
||||
fsnotify_oldname_free(old_name);
|
||||
goto exit;
|
||||
}
|
||||
d_move(old_dentry, dentry);
|
||||
fsnotify_move(old_dir->d_inode, new_dir->d_inode, old_name,
|
||||
fsnotify_move(d_inode(old_dir), d_inode(new_dir), old_name,
|
||||
d_is_dir(old_dentry),
|
||||
NULL, old_dentry);
|
||||
fsnotify_oldname_free(old_name);
|
||||
|
@ -253,7 +253,7 @@ static int mknod_ptmx(struct super_block *sb)
|
||||
if (!uid_valid(root_uid) || !gid_valid(root_gid))
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
|
||||
/* If we have already created ptmx node, return */
|
||||
if (fsi->ptmx_dentry) {
|
||||
@ -290,7 +290,7 @@ static int mknod_ptmx(struct super_block *sb)
|
||||
fsi->ptmx_dentry = dentry;
|
||||
rc = 0;
|
||||
out:
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -298,7 +298,7 @@ static void update_ptmx_mode(struct pts_fs_info *fsi)
|
||||
{
|
||||
struct inode *inode;
|
||||
if (fsi->ptmx_dentry) {
|
||||
inode = fsi->ptmx_dentry->d_inode;
|
||||
inode = d_inode(fsi->ptmx_dentry);
|
||||
inode->i_mode = S_IFCHR|fsi->mount_opts.ptmxmode;
|
||||
}
|
||||
}
|
||||
@ -602,18 +602,18 @@ struct inode *devpts_pty_new(struct inode *ptmx_inode, dev_t device, int index,
|
||||
|
||||
sprintf(s, "%d", index);
|
||||
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
|
||||
dentry = d_alloc_name(root, s);
|
||||
if (dentry) {
|
||||
d_add(dentry, inode);
|
||||
fsnotify_create(root->d_inode, dentry);
|
||||
fsnotify_create(d_inode(root), dentry);
|
||||
} else {
|
||||
iput(inode);
|
||||
inode = ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
|
||||
return inode;
|
||||
}
|
||||
@ -658,7 +658,7 @@ void devpts_pty_kill(struct inode *inode)
|
||||
|
||||
BUG_ON(inode->i_rdev == MKDEV(TTYAUX_MAJOR, PTMX_MINOR));
|
||||
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(root)->i_mutex);
|
||||
|
||||
dentry = d_find_alias(inode);
|
||||
|
||||
@ -667,7 +667,7 @@ void devpts_pty_kill(struct inode *inode)
|
||||
dput(dentry); /* d_alloc_name() in devpts_pty_new() */
|
||||
dput(dentry); /* d_find_alias above */
|
||||
|
||||
mutex_unlock(&root->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(root)->i_mutex);
|
||||
}
|
||||
|
||||
static int __init init_devpts_fs(void)
|
||||
|
@ -253,7 +253,9 @@ static ssize_t dio_complete(struct dio *dio, loff_t offset, ssize_t ret,
|
||||
if (dio->end_io && dio->result)
|
||||
dio->end_io(dio->iocb, offset, transferred, dio->private);
|
||||
|
||||
inode_dio_done(dio->inode);
|
||||
if (!(dio->flags & DIO_SKIP_DIO_COUNT))
|
||||
inode_dio_end(dio->inode);
|
||||
|
||||
if (is_async) {
|
||||
if (dio->rw & WRITE) {
|
||||
int err;
|
||||
@ -1195,7 +1197,8 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
|
||||
/*
|
||||
* Will be decremented at I/O completion time.
|
||||
*/
|
||||
atomic_inc(&inode->i_dio_count);
|
||||
if (!(dio->flags & DIO_SKIP_DIO_COUNT))
|
||||
inode_dio_begin(inode);
|
||||
|
||||
retval = 0;
|
||||
sdio.blkbits = blkbits;
|
||||
|
@ -1326,7 +1326,7 @@ static int ecryptfs_read_headers_virt(char *page_virt,
|
||||
if (rc)
|
||||
goto out;
|
||||
if (!(crypt_stat->flags & ECRYPTFS_I_SIZE_INITIALIZED))
|
||||
ecryptfs_i_size_init(page_virt, ecryptfs_dentry->d_inode);
|
||||
ecryptfs_i_size_init(page_virt, d_inode(ecryptfs_dentry));
|
||||
offset += MAGIC_ECRYPTFS_MARKER_SIZE_BYTES;
|
||||
rc = ecryptfs_process_flags(crypt_stat, (page_virt + offset),
|
||||
&bytes_read);
|
||||
@ -1425,7 +1425,7 @@ int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
|
||||
{
|
||||
int rc;
|
||||
char *page_virt;
|
||||
struct inode *ecryptfs_inode = ecryptfs_dentry->d_inode;
|
||||
struct inode *ecryptfs_inode = d_inode(ecryptfs_dentry);
|
||||
struct ecryptfs_crypt_stat *crypt_stat =
|
||||
&ecryptfs_inode_to_private(ecryptfs_inode)->crypt_stat;
|
||||
struct ecryptfs_mount_crypt_stat *mount_crypt_stat =
|
||||
|
@ -54,11 +54,11 @@ static int ecryptfs_d_revalidate(struct dentry *dentry, unsigned int flags)
|
||||
return -ECHILD;
|
||||
|
||||
rc = lower_dentry->d_op->d_revalidate(lower_dentry, flags);
|
||||
if (dentry->d_inode) {
|
||||
if (d_really_is_positive(dentry)) {
|
||||
struct inode *lower_inode =
|
||||
ecryptfs_inode_to_lower(dentry->d_inode);
|
||||
ecryptfs_inode_to_lower(d_inode(dentry));
|
||||
|
||||
fsstack_copy_attr_all(dentry->d_inode, lower_inode);
|
||||
fsstack_copy_attr_all(d_inode(dentry), lower_inode);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ struct kmem_cache *ecryptfs_file_info_cache;
|
||||
|
||||
static int read_or_initialize_metadata(struct dentry *dentry)
|
||||
{
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ecryptfs_mount_crypt_stat *mount_crypt_stat;
|
||||
struct ecryptfs_crypt_stat *crypt_stat;
|
||||
int rc;
|
||||
|
@ -41,13 +41,13 @@ static struct dentry *lock_parent(struct dentry *dentry)
|
||||
struct dentry *dir;
|
||||
|
||||
dir = dget_parent(dentry);
|
||||
mutex_lock_nested(&(dir->d_inode->i_mutex), I_MUTEX_PARENT);
|
||||
mutex_lock_nested(&(d_inode(dir)->i_mutex), I_MUTEX_PARENT);
|
||||
return dir;
|
||||
}
|
||||
|
||||
static void unlock_dir(struct dentry *dir)
|
||||
{
|
||||
mutex_unlock(&dir->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(dir)->i_mutex);
|
||||
dput(dir);
|
||||
}
|
||||
|
||||
@ -131,7 +131,7 @@ struct inode *ecryptfs_get_inode(struct inode *lower_inode,
|
||||
static int ecryptfs_interpose(struct dentry *lower_dentry,
|
||||
struct dentry *dentry, struct super_block *sb)
|
||||
{
|
||||
struct inode *inode = ecryptfs_get_inode(lower_dentry->d_inode, sb);
|
||||
struct inode *inode = ecryptfs_get_inode(d_inode(lower_dentry), sb);
|
||||
|
||||
if (IS_ERR(inode))
|
||||
return PTR_ERR(inode);
|
||||
@ -189,21 +189,21 @@ ecryptfs_do_create(struct inode *directory_inode,
|
||||
|
||||
lower_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry);
|
||||
lower_dir_dentry = lock_parent(lower_dentry);
|
||||
rc = vfs_create(lower_dir_dentry->d_inode, lower_dentry, mode, true);
|
||||
rc = vfs_create(d_inode(lower_dir_dentry), lower_dentry, mode, true);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Failure to create dentry in lower fs; "
|
||||
"rc = [%d]\n", __func__, rc);
|
||||
inode = ERR_PTR(rc);
|
||||
goto out_lock;
|
||||
}
|
||||
inode = __ecryptfs_get_inode(lower_dentry->d_inode,
|
||||
inode = __ecryptfs_get_inode(d_inode(lower_dentry),
|
||||
directory_inode->i_sb);
|
||||
if (IS_ERR(inode)) {
|
||||
vfs_unlink(lower_dir_dentry->d_inode, lower_dentry, NULL);
|
||||
vfs_unlink(d_inode(lower_dir_dentry), lower_dentry, NULL);
|
||||
goto out_lock;
|
||||
}
|
||||
fsstack_copy_attr_times(directory_inode, lower_dir_dentry->d_inode);
|
||||
fsstack_copy_inode_size(directory_inode, lower_dir_dentry->d_inode);
|
||||
fsstack_copy_attr_times(directory_inode, d_inode(lower_dir_dentry));
|
||||
fsstack_copy_inode_size(directory_inode, d_inode(lower_dir_dentry));
|
||||
out_lock:
|
||||
unlock_dir(lower_dir_dentry);
|
||||
return inode;
|
||||
@ -332,7 +332,7 @@ static int ecryptfs_lookup_interpose(struct dentry *dentry,
|
||||
struct dentry *lower_dentry,
|
||||
struct inode *dir_inode)
|
||||
{
|
||||
struct inode *inode, *lower_inode = lower_dentry->d_inode;
|
||||
struct inode *inode, *lower_inode = d_inode(lower_dentry);
|
||||
struct ecryptfs_dentry_info *dentry_info;
|
||||
struct vfsmount *lower_mnt;
|
||||
int rc = 0;
|
||||
@ -347,14 +347,14 @@ static int ecryptfs_lookup_interpose(struct dentry *dentry,
|
||||
}
|
||||
|
||||
lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(dentry->d_parent));
|
||||
fsstack_copy_attr_atime(dir_inode, lower_dentry->d_parent->d_inode);
|
||||
fsstack_copy_attr_atime(dir_inode, d_inode(lower_dentry->d_parent));
|
||||
BUG_ON(!d_count(lower_dentry));
|
||||
|
||||
ecryptfs_set_dentry_private(dentry, dentry_info);
|
||||
dentry_info->lower_path.mnt = lower_mnt;
|
||||
dentry_info->lower_path.dentry = lower_dentry;
|
||||
|
||||
if (!lower_dentry->d_inode) {
|
||||
if (d_really_is_negative(lower_dentry)) {
|
||||
/* We want to add because we couldn't find in lower */
|
||||
d_add(dentry, NULL);
|
||||
return 0;
|
||||
@ -400,11 +400,11 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
|
||||
int rc = 0;
|
||||
|
||||
lower_dir_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry->d_parent);
|
||||
mutex_lock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(lower_dir_dentry)->i_mutex);
|
||||
lower_dentry = lookup_one_len(ecryptfs_dentry->d_name.name,
|
||||
lower_dir_dentry,
|
||||
ecryptfs_dentry->d_name.len);
|
||||
mutex_unlock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(lower_dir_dentry)->i_mutex);
|
||||
if (IS_ERR(lower_dentry)) {
|
||||
rc = PTR_ERR(lower_dentry);
|
||||
ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_len() returned "
|
||||
@ -412,7 +412,7 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
|
||||
ecryptfs_dentry);
|
||||
goto out;
|
||||
}
|
||||
if (lower_dentry->d_inode)
|
||||
if (d_really_is_positive(lower_dentry))
|
||||
goto interpose;
|
||||
mount_crypt_stat = &ecryptfs_superblock_to_private(
|
||||
ecryptfs_dentry->d_sb)->mount_crypt_stat;
|
||||
@ -429,11 +429,11 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
|
||||
"filename; rc = [%d]\n", __func__, rc);
|
||||
goto out;
|
||||
}
|
||||
mutex_lock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(lower_dir_dentry)->i_mutex);
|
||||
lower_dentry = lookup_one_len(encrypted_and_encoded_name,
|
||||
lower_dir_dentry,
|
||||
encrypted_and_encoded_name_size);
|
||||
mutex_unlock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(lower_dir_dentry)->i_mutex);
|
||||
if (IS_ERR(lower_dentry)) {
|
||||
rc = PTR_ERR(lower_dentry);
|
||||
ecryptfs_printk(KERN_DEBUG, "%s: lookup_one_len() returned "
|
||||
@ -458,24 +458,24 @@ static int ecryptfs_link(struct dentry *old_dentry, struct inode *dir,
|
||||
u64 file_size_save;
|
||||
int rc;
|
||||
|
||||
file_size_save = i_size_read(old_dentry->d_inode);
|
||||
file_size_save = i_size_read(d_inode(old_dentry));
|
||||
lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry);
|
||||
lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry);
|
||||
dget(lower_old_dentry);
|
||||
dget(lower_new_dentry);
|
||||
lower_dir_dentry = lock_parent(lower_new_dentry);
|
||||
rc = vfs_link(lower_old_dentry, lower_dir_dentry->d_inode,
|
||||
rc = vfs_link(lower_old_dentry, d_inode(lower_dir_dentry),
|
||||
lower_new_dentry, NULL);
|
||||
if (rc || !lower_new_dentry->d_inode)
|
||||
if (rc || d_really_is_negative(lower_new_dentry))
|
||||
goto out_lock;
|
||||
rc = ecryptfs_interpose(lower_new_dentry, new_dentry, dir->i_sb);
|
||||
if (rc)
|
||||
goto out_lock;
|
||||
fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
|
||||
fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode);
|
||||
set_nlink(old_dentry->d_inode,
|
||||
ecryptfs_inode_to_lower(old_dentry->d_inode)->i_nlink);
|
||||
i_size_write(new_dentry->d_inode, file_size_save);
|
||||
fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
|
||||
fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry));
|
||||
set_nlink(d_inode(old_dentry),
|
||||
ecryptfs_inode_to_lower(d_inode(old_dentry))->i_nlink);
|
||||
i_size_write(d_inode(new_dentry), file_size_save);
|
||||
out_lock:
|
||||
unlock_dir(lower_dir_dentry);
|
||||
dput(lower_new_dentry);
|
||||
@ -485,7 +485,7 @@ out_lock:
|
||||
|
||||
static int ecryptfs_unlink(struct inode *dir, struct dentry *dentry)
|
||||
{
|
||||
return ecryptfs_do_unlink(dir, dentry, dentry->d_inode);
|
||||
return ecryptfs_do_unlink(dir, dentry, d_inode(dentry));
|
||||
}
|
||||
|
||||
static int ecryptfs_symlink(struct inode *dir, struct dentry *dentry,
|
||||
@ -510,20 +510,20 @@ static int ecryptfs_symlink(struct inode *dir, struct dentry *dentry,
|
||||
strlen(symname));
|
||||
if (rc)
|
||||
goto out_lock;
|
||||
rc = vfs_symlink(lower_dir_dentry->d_inode, lower_dentry,
|
||||
rc = vfs_symlink(d_inode(lower_dir_dentry), lower_dentry,
|
||||
encoded_symname);
|
||||
kfree(encoded_symname);
|
||||
if (rc || !lower_dentry->d_inode)
|
||||
if (rc || d_really_is_negative(lower_dentry))
|
||||
goto out_lock;
|
||||
rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb);
|
||||
if (rc)
|
||||
goto out_lock;
|
||||
fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
|
||||
fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode);
|
||||
fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
|
||||
fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry));
|
||||
out_lock:
|
||||
unlock_dir(lower_dir_dentry);
|
||||
dput(lower_dentry);
|
||||
if (!dentry->d_inode)
|
||||
if (d_really_is_negative(dentry))
|
||||
d_drop(dentry);
|
||||
return rc;
|
||||
}
|
||||
@ -536,18 +536,18 @@ static int ecryptfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
|
||||
|
||||
lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||
lower_dir_dentry = lock_parent(lower_dentry);
|
||||
rc = vfs_mkdir(lower_dir_dentry->d_inode, lower_dentry, mode);
|
||||
if (rc || !lower_dentry->d_inode)
|
||||
rc = vfs_mkdir(d_inode(lower_dir_dentry), lower_dentry, mode);
|
||||
if (rc || d_really_is_negative(lower_dentry))
|
||||
goto out;
|
||||
rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb);
|
||||
if (rc)
|
||||
goto out;
|
||||
fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
|
||||
fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode);
|
||||
set_nlink(dir, lower_dir_dentry->d_inode->i_nlink);
|
||||
fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
|
||||
fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry));
|
||||
set_nlink(dir, d_inode(lower_dir_dentry)->i_nlink);
|
||||
out:
|
||||
unlock_dir(lower_dir_dentry);
|
||||
if (!dentry->d_inode)
|
||||
if (d_really_is_negative(dentry))
|
||||
d_drop(dentry);
|
||||
return rc;
|
||||
}
|
||||
@ -562,12 +562,12 @@ static int ecryptfs_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
dget(dentry);
|
||||
lower_dir_dentry = lock_parent(lower_dentry);
|
||||
dget(lower_dentry);
|
||||
rc = vfs_rmdir(lower_dir_dentry->d_inode, lower_dentry);
|
||||
rc = vfs_rmdir(d_inode(lower_dir_dentry), lower_dentry);
|
||||
dput(lower_dentry);
|
||||
if (!rc && dentry->d_inode)
|
||||
clear_nlink(dentry->d_inode);
|
||||
fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
|
||||
set_nlink(dir, lower_dir_dentry->d_inode->i_nlink);
|
||||
if (!rc && d_really_is_positive(dentry))
|
||||
clear_nlink(d_inode(dentry));
|
||||
fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
|
||||
set_nlink(dir, d_inode(lower_dir_dentry)->i_nlink);
|
||||
unlock_dir(lower_dir_dentry);
|
||||
if (!rc)
|
||||
d_drop(dentry);
|
||||
@ -584,17 +584,17 @@ ecryptfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev
|
||||
|
||||
lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||
lower_dir_dentry = lock_parent(lower_dentry);
|
||||
rc = vfs_mknod(lower_dir_dentry->d_inode, lower_dentry, mode, dev);
|
||||
if (rc || !lower_dentry->d_inode)
|
||||
rc = vfs_mknod(d_inode(lower_dir_dentry), lower_dentry, mode, dev);
|
||||
if (rc || d_really_is_negative(lower_dentry))
|
||||
goto out;
|
||||
rc = ecryptfs_interpose(lower_dentry, dentry, dir->i_sb);
|
||||
if (rc)
|
||||
goto out;
|
||||
fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
|
||||
fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode);
|
||||
fsstack_copy_attr_times(dir, d_inode(lower_dir_dentry));
|
||||
fsstack_copy_inode_size(dir, d_inode(lower_dir_dentry));
|
||||
out:
|
||||
unlock_dir(lower_dir_dentry);
|
||||
if (!dentry->d_inode)
|
||||
if (d_really_is_negative(dentry))
|
||||
d_drop(dentry);
|
||||
return rc;
|
||||
}
|
||||
@ -617,7 +617,7 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
dget(lower_new_dentry);
|
||||
lower_old_dir_dentry = dget_parent(lower_old_dentry);
|
||||
lower_new_dir_dentry = dget_parent(lower_new_dentry);
|
||||
target_inode = new_dentry->d_inode;
|
||||
target_inode = d_inode(new_dentry);
|
||||
trap = lock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
|
||||
/* source should not be ancestor of target */
|
||||
if (trap == lower_old_dentry) {
|
||||
@ -629,17 +629,17 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||
rc = -ENOTEMPTY;
|
||||
goto out_lock;
|
||||
}
|
||||
rc = vfs_rename(lower_old_dir_dentry->d_inode, lower_old_dentry,
|
||||
lower_new_dir_dentry->d_inode, lower_new_dentry,
|
||||
rc = vfs_rename(d_inode(lower_old_dir_dentry), lower_old_dentry,
|
||||
d_inode(lower_new_dir_dentry), lower_new_dentry,
|
||||
NULL, 0);
|
||||
if (rc)
|
||||
goto out_lock;
|
||||
if (target_inode)
|
||||
fsstack_copy_attr_all(target_inode,
|
||||
ecryptfs_inode_to_lower(target_inode));
|
||||
fsstack_copy_attr_all(new_dir, lower_new_dir_dentry->d_inode);
|
||||
fsstack_copy_attr_all(new_dir, d_inode(lower_new_dir_dentry));
|
||||
if (new_dir != old_dir)
|
||||
fsstack_copy_attr_all(old_dir, lower_old_dir_dentry->d_inode);
|
||||
fsstack_copy_attr_all(old_dir, d_inode(lower_old_dir_dentry));
|
||||
out_lock:
|
||||
unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
|
||||
dput(lower_new_dir_dentry);
|
||||
@ -662,7 +662,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
old_fs = get_fs();
|
||||
set_fs(get_ds());
|
||||
rc = lower_dentry->d_inode->i_op->readlink(lower_dentry,
|
||||
rc = d_inode(lower_dentry)->i_op->readlink(lower_dentry,
|
||||
(char __user *)lower_buf,
|
||||
PATH_MAX);
|
||||
set_fs(old_fs);
|
||||
@ -681,8 +681,8 @@ static void *ecryptfs_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
char *buf = ecryptfs_readlink_lower(dentry, &len);
|
||||
if (IS_ERR(buf))
|
||||
goto out;
|
||||
fsstack_copy_attr_atime(dentry->d_inode,
|
||||
ecryptfs_dentry_to_lower(dentry)->d_inode);
|
||||
fsstack_copy_attr_atime(d_inode(dentry),
|
||||
d_inode(ecryptfs_dentry_to_lower(dentry)));
|
||||
buf[len] = '\0';
|
||||
out:
|
||||
nd_set_link(nd, buf);
|
||||
@ -738,7 +738,7 @@ static int truncate_upper(struct dentry *dentry, struct iattr *ia,
|
||||
struct iattr *lower_ia)
|
||||
{
|
||||
int rc = 0;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = d_inode(dentry);
|
||||
struct ecryptfs_crypt_stat *crypt_stat;
|
||||
loff_t i_size = i_size_read(inode);
|
||||
loff_t lower_size_before_truncate;
|
||||
@ -751,7 +751,7 @@ static int truncate_upper(struct dentry *dentry, struct iattr *ia,
|
||||
rc = ecryptfs_get_lower_file(dentry, inode);
|
||||
if (rc)
|
||||
return rc;
|
||||
crypt_stat = &ecryptfs_inode_to_private(dentry->d_inode)->crypt_stat;
|
||||
crypt_stat = &ecryptfs_inode_to_private(d_inode(dentry))->crypt_stat;
|
||||
/* Switch on growing or shrinking file */
|
||||
if (ia->ia_size > i_size) {
|
||||
char zero[] = { 0x00 };
|
||||
@ -858,7 +858,7 @@ int ecryptfs_truncate(struct dentry *dentry, loff_t new_length)
|
||||
struct iattr lower_ia = { .ia_valid = 0 };
|
||||
int rc;
|
||||
|
||||
rc = ecryptfs_inode_newsize_ok(dentry->d_inode, new_length);
|
||||
rc = ecryptfs_inode_newsize_ok(d_inode(dentry), new_length);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@ -866,9 +866,9 @@ int ecryptfs_truncate(struct dentry *dentry, loff_t new_length)
|
||||
if (!rc && lower_ia.ia_valid & ATTR_SIZE) {
|
||||
struct dentry *lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||
|
||||
mutex_lock(&lower_dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(lower_dentry)->i_mutex);
|
||||
rc = notify_change(lower_dentry, &lower_ia, NULL);
|
||||
mutex_unlock(&lower_dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(lower_dentry)->i_mutex);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
@ -900,10 +900,10 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
|
||||
struct inode *lower_inode;
|
||||
struct ecryptfs_crypt_stat *crypt_stat;
|
||||
|
||||
crypt_stat = &ecryptfs_inode_to_private(dentry->d_inode)->crypt_stat;
|
||||
crypt_stat = &ecryptfs_inode_to_private(d_inode(dentry))->crypt_stat;
|
||||
if (!(crypt_stat->flags & ECRYPTFS_STRUCT_INITIALIZED))
|
||||
ecryptfs_init_crypt_stat(crypt_stat);
|
||||
inode = dentry->d_inode;
|
||||
inode = d_inode(dentry);
|
||||
lower_inode = ecryptfs_inode_to_lower(inode);
|
||||
lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||
mutex_lock(&crypt_stat->cs_mutex);
|
||||
@ -967,9 +967,9 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
|
||||
if (lower_ia.ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
|
||||
lower_ia.ia_valid &= ~ATTR_MODE;
|
||||
|
||||
mutex_lock(&lower_dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(lower_dentry)->i_mutex);
|
||||
rc = notify_change(lower_dentry, &lower_ia, NULL);
|
||||
mutex_unlock(&lower_dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(lower_dentry)->i_mutex);
|
||||
out:
|
||||
fsstack_copy_attr_all(inode, lower_inode);
|
||||
return rc;
|
||||
@ -983,7 +983,7 @@ static int ecryptfs_getattr_link(struct vfsmount *mnt, struct dentry *dentry,
|
||||
|
||||
mount_crypt_stat = &ecryptfs_superblock_to_private(
|
||||
dentry->d_sb)->mount_crypt_stat;
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
generic_fillattr(d_inode(dentry), stat);
|
||||
if (mount_crypt_stat->flags & ECRYPTFS_GLOBAL_ENCRYPT_FILENAMES) {
|
||||
char *target;
|
||||
size_t targetsiz;
|
||||
@ -1007,9 +1007,9 @@ static int ecryptfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
|
||||
rc = vfs_getattr(ecryptfs_dentry_to_lower_path(dentry), &lower_stat);
|
||||
if (!rc) {
|
||||
fsstack_copy_attr_all(dentry->d_inode,
|
||||
ecryptfs_inode_to_lower(dentry->d_inode));
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
fsstack_copy_attr_all(d_inode(dentry),
|
||||
ecryptfs_inode_to_lower(d_inode(dentry)));
|
||||
generic_fillattr(d_inode(dentry), stat);
|
||||
stat->blocks = lower_stat.blocks;
|
||||
}
|
||||
return rc;
|
||||
@ -1023,14 +1023,14 @@ ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
||||
struct dentry *lower_dentry;
|
||||
|
||||
lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||
if (!lower_dentry->d_inode->i_op->setxattr) {
|
||||
if (!d_inode(lower_dentry)->i_op->setxattr) {
|
||||
rc = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = vfs_setxattr(lower_dentry, name, value, size, flags);
|
||||
if (!rc && dentry->d_inode)
|
||||
fsstack_copy_attr_all(dentry->d_inode, lower_dentry->d_inode);
|
||||
if (!rc && d_really_is_positive(dentry))
|
||||
fsstack_copy_attr_all(d_inode(dentry), d_inode(lower_dentry));
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
@ -1041,14 +1041,14 @@ ecryptfs_getxattr_lower(struct dentry *lower_dentry, const char *name,
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if (!lower_dentry->d_inode->i_op->getxattr) {
|
||||
if (!d_inode(lower_dentry)->i_op->getxattr) {
|
||||
rc = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
mutex_lock(&lower_dentry->d_inode->i_mutex);
|
||||
rc = lower_dentry->d_inode->i_op->getxattr(lower_dentry, name, value,
|
||||
mutex_lock(&d_inode(lower_dentry)->i_mutex);
|
||||
rc = d_inode(lower_dentry)->i_op->getxattr(lower_dentry, name, value,
|
||||
size);
|
||||
mutex_unlock(&lower_dentry->d_inode->i_mutex);
|
||||
mutex_unlock(&d_inode(lower_dentry)->i_mutex);
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
@ -1068,13 +1068,13 @@ ecryptfs_listxattr(struct dentry *dentry, char *list, size_t size)
|
||||
struct dentry *lower_dentry;
|
||||
|
||||
lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||
if (!lower_dentry->d_inode->i_op->listxattr) {
|
||||
if (!d_inode(lower_dentry)->i_op->listxattr) {
|
||||
rc = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
mutex_lock(&lower_dentry->d_inode->i_mutex);
|
||||
rc = lower_dentry->d_inode->i_op->listxattr(lower_dentry, list, size);
|
||||
mutex_unlock(&lower_dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(lower_dentry)->i_mutex);
|
||||
rc = d_inode(lower_dentry)->i_op->listxattr(lower_dentry, list, size);
|
||||
mutex_unlock(&d_inode(lower_dentry)->i_mutex);
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
@ -1085,13 +1085,13 @@ static int ecryptfs_removexattr(struct dentry *dentry, const char *name)
|
||||
struct dentry *lower_dentry;
|
||||
|
||||
lower_dentry = ecryptfs_dentry_to_lower(dentry);
|
||||
if (!lower_dentry->d_inode->i_op->removexattr) {
|
||||
if (!d_inode(lower_dentry)->i_op->removexattr) {
|
||||
rc = -EOPNOTSUPP;
|
||||
goto out;
|
||||
}
|
||||
mutex_lock(&lower_dentry->d_inode->i_mutex);
|
||||
rc = lower_dentry->d_inode->i_op->removexattr(lower_dentry, name);
|
||||
mutex_unlock(&lower_dentry->d_inode->i_mutex);
|
||||
mutex_lock(&d_inode(lower_dentry)->i_mutex);
|
||||
rc = d_inode(lower_dentry)->i_op->removexattr(lower_dentry, name);
|
||||
mutex_unlock(&d_inode(lower_dentry)->i_mutex);
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user