vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
ece2ccb668
Коммит
d8c9584ea2
|
@ -194,7 +194,7 @@ static int find_autofs_mount(const char *pathname,
|
|||
return err;
|
||||
err = -ENOENT;
|
||||
while (path.dentry == path.mnt->mnt_root) {
|
||||
if (path.mnt->mnt_sb->s_magic == AUTOFS_SUPER_MAGIC) {
|
||||
if (path.dentry->d_sb->s_magic == AUTOFS_SUPER_MAGIC) {
|
||||
if (test(&path, data)) {
|
||||
path_get(&path);
|
||||
if (!err) /* already found some */
|
||||
|
@ -212,7 +212,7 @@ static int find_autofs_mount(const char *pathname,
|
|||
|
||||
static int test_by_dev(struct path *path, void *p)
|
||||
{
|
||||
return path->mnt->mnt_sb->s_dev == *(dev_t *)p;
|
||||
return path->dentry->d_sb->s_dev == *(dev_t *)p;
|
||||
}
|
||||
|
||||
static int test_by_type(struct path *path, void *p)
|
||||
|
@ -538,11 +538,11 @@ static int autofs_dev_ioctl_ismountpoint(struct file *fp,
|
|||
err = find_autofs_mount(name, &path, test_by_type, &type);
|
||||
if (err)
|
||||
goto out;
|
||||
devid = new_encode_dev(path.mnt->mnt_sb->s_dev);
|
||||
devid = new_encode_dev(path.dentry->d_sb->s_dev);
|
||||
err = 0;
|
||||
if (path.mnt->mnt_root == path.dentry) {
|
||||
err = 1;
|
||||
magic = path.mnt->mnt_sb->s_magic;
|
||||
magic = path.dentry->d_sb->s_magic;
|
||||
}
|
||||
} else {
|
||||
dev_t dev = sbi->sb->s_dev;
|
||||
|
@ -556,7 +556,7 @@ static int autofs_dev_ioctl_ismountpoint(struct file *fp,
|
|||
err = have_submounts(path.dentry);
|
||||
|
||||
if (follow_down_one(&path))
|
||||
magic = path.mnt->mnt_sb->s_magic;
|
||||
magic = path.dentry->d_sb->s_magic;
|
||||
}
|
||||
|
||||
param->ismountpoint.out.devid = devid;
|
||||
|
|
|
@ -560,7 +560,7 @@ static ssize_t bm_entry_write(struct file *file, const char __user *buffer,
|
|||
break;
|
||||
case 2: set_bit(Enabled, &e->flags);
|
||||
break;
|
||||
case 3: root = dget(file->f_path.mnt->mnt_sb->s_root);
|
||||
case 3: root = dget(file->f_path.dentry->d_sb->s_root);
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
|
||||
kill_node(e);
|
||||
|
@ -587,7 +587,7 @@ static ssize_t bm_register_write(struct file *file, const char __user *buffer,
|
|||
Node *e;
|
||||
struct inode *inode;
|
||||
struct dentry *root, *dentry;
|
||||
struct super_block *sb = file->f_path.mnt->mnt_sb;
|
||||
struct super_block *sb = file->f_path.dentry->d_sb;
|
||||
int err = 0;
|
||||
|
||||
e = create_entry(buffer, count);
|
||||
|
@ -666,7 +666,7 @@ static ssize_t bm_status_write(struct file * file, const char __user * buffer,
|
|||
switch (res) {
|
||||
case 1: enabled = 0; break;
|
||||
case 2: enabled = 1; break;
|
||||
case 3: root = dget(file->f_path.mnt->mnt_sb->s_root);
|
||||
case 3: root = dget(file->f_path.dentry->d_sb->s_root);
|
||||
mutex_lock(&root->d_inode->i_mutex);
|
||||
|
||||
while (!list_empty(&entries))
|
||||
|
|
|
@ -2909,7 +2909,7 @@ static int ext3_quota_on(struct super_block *sb, int type, int format_id,
|
|||
return -EINVAL;
|
||||
|
||||
/* Quotafile not on the same filesystem? */
|
||||
if (path->mnt->mnt_sb != sb)
|
||||
if (path->dentry->d_sb != sb)
|
||||
return -EXDEV;
|
||||
/* Journaling quota? */
|
||||
if (EXT3_SB(sb)->s_qf_names[type]) {
|
||||
|
|
|
@ -4781,7 +4781,7 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,
|
|||
return -EINVAL;
|
||||
|
||||
/* Quotafile not on the same filesystem? */
|
||||
if (path->mnt->mnt_sb != sb)
|
||||
if (path->dentry->d_sb != sb)
|
||||
return -EXDEV;
|
||||
/* Journaling quota? */
|
||||
if (EXT4_SB(sb)->s_qf_names[type]) {
|
||||
|
|
|
@ -25,8 +25,8 @@ static long do_sys_name_to_handle(struct path *path,
|
|||
* We need t make sure wether the file system
|
||||
* support decoding of the file handle
|
||||
*/
|
||||
if (!path->mnt->mnt_sb->s_export_op ||
|
||||
!path->mnt->mnt_sb->s_export_op->fh_to_dentry)
|
||||
if (!path->dentry->d_sb->s_export_op ||
|
||||
!path->dentry->d_sb->s_export_op->fh_to_dentry)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (copy_from_user(&f_handle, ufh, sizeof(struct file_handle)))
|
||||
|
|
|
@ -403,7 +403,7 @@ nlmsvc_match_sb(void *datap, struct nlm_file *file)
|
|||
{
|
||||
struct super_block *sb = datap;
|
||||
|
||||
return sb == file->f_file->f_path.mnt->mnt_sb;
|
||||
return sb == file->f_file->f_path.dentry->d_sb;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -272,7 +272,7 @@ static ssize_t write_unlock_fs(struct file *file, char *buf, size_t size)
|
|||
* 2. Is that directory a mount point, or
|
||||
* 3. Is that directory the root of an exported file system?
|
||||
*/
|
||||
error = nlmsvc_unlock_all_by_sb(path.mnt->mnt_sb);
|
||||
error = nlmsvc_unlock_all_by_sb(path.dentry->d_sb);
|
||||
|
||||
path_put(&path);
|
||||
return error;
|
||||
|
|
|
@ -2198,7 +2198,7 @@ int dquot_quota_on(struct super_block *sb, int type, int format_id,
|
|||
if (error)
|
||||
return error;
|
||||
/* Quota file not on the same filesystem? */
|
||||
if (path->mnt->mnt_sb != sb)
|
||||
if (path->dentry->d_sb != sb)
|
||||
error = -EXDEV;
|
||||
else
|
||||
error = vfs_load_quota_inode(path->dentry->d_inode, type,
|
||||
|
|
|
@ -2058,7 +2058,7 @@ static int reiserfs_quota_on(struct super_block *sb, int type, int format_id,
|
|||
return -EINVAL;
|
||||
|
||||
/* Quotafile not on the same filesystem? */
|
||||
if (path->mnt->mnt_sb != sb) {
|
||||
if (path->dentry->d_sb != sb) {
|
||||
err = -EXDEV;
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -442,7 +442,7 @@ static unsigned sysv_nblocks(struct super_block *s, loff_t size)
|
|||
|
||||
int sysv_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
|
||||
{
|
||||
struct super_block *s = mnt->mnt_sb;
|
||||
struct super_block *s = dentry->d_sb;
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
stat->blocks = (s->s_blocksize / 512) * sysv_nblocks(s, stat->size);
|
||||
stat->blksize = s->s_blocksize;
|
||||
|
|
|
@ -325,17 +325,19 @@ static void __init get_fs_names(char *page)
|
|||
|
||||
static int __init do_mount_root(char *name, char *fs, int flags, void *data)
|
||||
{
|
||||
struct super_block *s;
|
||||
int err = sys_mount(name, "/root", fs, flags, data);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
sys_chdir((const char __user __force *)"/root");
|
||||
ROOT_DEV = current->fs->pwd.mnt->mnt_sb->s_dev;
|
||||
s = current->fs->pwd.dentry->d_sb;
|
||||
ROOT_DEV = s->s_dev;
|
||||
printk(KERN_INFO
|
||||
"VFS: Mounted root (%s filesystem)%s on device %u:%u.\n",
|
||||
current->fs->pwd.mnt->mnt_sb->s_type->name,
|
||||
current->fs->pwd.mnt->mnt_sb->s_flags & MS_RDONLY ?
|
||||
" readonly" : "", MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
|
||||
s->s_type->name,
|
||||
s->s_flags & MS_RDONLY ? " readonly" : "",
|
||||
MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -315,7 +315,7 @@ void acct_auto_close(struct super_block *sb)
|
|||
spin_lock(&acct_lock);
|
||||
restart:
|
||||
list_for_each_entry(acct, &acct_list, list)
|
||||
if (acct->file && acct->file->f_path.mnt->mnt_sb == sb) {
|
||||
if (acct->file && acct->file->f_path.dentry->d_sb == sb) {
|
||||
acct_file_reopen(acct, NULL, NULL);
|
||||
goto restart;
|
||||
}
|
||||
|
|
|
@ -2507,7 +2507,7 @@ static int selinux_mount(char *dev_name,
|
|||
const struct cred *cred = current_cred();
|
||||
|
||||
if (flags & MS_REMOUNT)
|
||||
return superblock_has_perm(cred, path->mnt->mnt_sb,
|
||||
return superblock_has_perm(cred, path->dentry->d_sb,
|
||||
FILESYSTEM__REMOUNT, NULL);
|
||||
else
|
||||
return path_has_perm(cred, path, FILE__MOUNTON);
|
||||
|
|
|
@ -406,7 +406,7 @@ static int smack_sb_statfs(struct dentry *dentry)
|
|||
static int smack_sb_mount(char *dev_name, struct path *path,
|
||||
char *type, unsigned long flags, void *data)
|
||||
{
|
||||
struct superblock_smack *sbp = path->mnt->mnt_sb->s_security;
|
||||
struct superblock_smack *sbp = path->dentry->d_sb->s_security;
|
||||
struct smk_audit_info ad;
|
||||
|
||||
smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH);
|
||||
|
@ -435,7 +435,7 @@ static int smack_sb_umount(struct vfsmount *mnt, int flags)
|
|||
smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH);
|
||||
smk_ad_setfield_u_fs_path(&ad, path);
|
||||
|
||||
sbp = mnt->mnt_sb->s_security;
|
||||
sbp = path.dentry->d_sb->s_security;
|
||||
return smk_curacc(sbp->smk_floor, MAY_WRITE, &ad);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче