vfs: change d_canonical_path to take two paths

bug: 23904372
Change-Id: I4a686d64b6de37decf60019be1718e1d820193e6
Signed-off-by: Daniel Rosenberg <drosen@google.com>
This commit is contained in:
Daniel Rosenberg 2016-04-22 00:00:14 -07:00 committed by Amit Pundir
parent aaed164e81
commit 6fa18ffc71
3 changed files with 7 additions and 3 deletions

View file

@ -746,7 +746,7 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname,
/* support stacked filesystems */ /* support stacked filesystems */
if(path.dentry && path.dentry->d_op) { if(path.dentry && path.dentry->d_op) {
if (path.dentry->d_op->d_canonical_path) { if (path.dentry->d_op->d_canonical_path) {
path.dentry->d_op->d_canonical_path(path.dentry, &alteredpath); path.dentry->d_op->d_canonical_path(&path, &alteredpath);
canonical_path = &alteredpath; canonical_path = &alteredpath;
path_put(&path); path_put(&path);
} }

View file

@ -172,11 +172,15 @@ static int sdcardfs_cmp_ci(const struct dentry *parent,
return 1; return 1;
} }
static void sdcardfs_canonical_path(const struct path *path, struct path *actual_path) {
sdcardfs_get_real_lower(path->dentry, actual_path);
}
const struct dentry_operations sdcardfs_ci_dops = { const struct dentry_operations sdcardfs_ci_dops = {
.d_revalidate = sdcardfs_d_revalidate, .d_revalidate = sdcardfs_d_revalidate,
.d_release = sdcardfs_d_release, .d_release = sdcardfs_d_release,
.d_hash = sdcardfs_hash_ci, .d_hash = sdcardfs_hash_ci,
.d_compare = sdcardfs_cmp_ci, .d_compare = sdcardfs_cmp_ci,
.d_canonical_path = sdcardfs_get_real_lower, .d_canonical_path = sdcardfs_canonical_path,
}; };

View file

@ -161,7 +161,7 @@ struct dentry_operations {
struct vfsmount *(*d_automount)(struct path *); struct vfsmount *(*d_automount)(struct path *);
int (*d_manage)(struct dentry *, bool); int (*d_manage)(struct dentry *, bool);
struct inode *(*d_select_inode)(struct dentry *, unsigned); struct inode *(*d_select_inode)(struct dentry *, unsigned);
void (*d_canonical_path)(const struct dentry *, struct path *); void (*d_canonical_path)(const struct path *, struct path *);
struct dentry *(*d_real)(struct dentry *, struct inode *); struct dentry *(*d_real)(struct dentry *, struct inode *);
} ____cacheline_aligned; } ____cacheline_aligned;