aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ecryptfs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ecryptfs')
-rw-r--r--fs/ecryptfs/ecryptfs_kernel.h6
-rw-r--r--fs/ecryptfs/file.c4
-rw-r--r--fs/ecryptfs/inode.c3
-rw-r--r--fs/ecryptfs/read_write.c6
4 files changed, 10 insertions, 9 deletions
diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h
index cfb4b9fed520..7e2c6f5d7985 100644
--- a/fs/ecryptfs/ecryptfs_kernel.h
+++ b/fs/ecryptfs/ecryptfs_kernel.h
@@ -509,6 +509,12 @@ ecryptfs_dentry_to_lower_mnt(struct dentry *dentry)
509 return ((struct ecryptfs_dentry_info *)dentry->d_fsdata)->lower_path.mnt; 509 return ((struct ecryptfs_dentry_info *)dentry->d_fsdata)->lower_path.mnt;
510} 510}
511 511
512static inline struct path *
513ecryptfs_dentry_to_lower_path(struct dentry *dentry)
514{
515 return &((struct ecryptfs_dentry_info *)dentry->d_fsdata)->lower_path;
516}
517
512static inline void 518static inline void
513ecryptfs_set_dentry_lower_mnt(struct dentry *dentry, struct vfsmount *lower_mnt) 519ecryptfs_set_dentry_lower_mnt(struct dentry *dentry, struct vfsmount *lower_mnt)
514{ 520{
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c
index d45ba4568128..53acc9d0c138 100644
--- a/fs/ecryptfs/file.c
+++ b/fs/ecryptfs/file.c
@@ -118,7 +118,7 @@ static int ecryptfs_readdir(struct file *file, void *dirent, filldir_t filldir)
118 118
119 lower_file = ecryptfs_file_to_lower(file); 119 lower_file = ecryptfs_file_to_lower(file);
120 lower_file->f_pos = file->f_pos; 120 lower_file->f_pos = file->f_pos;
121 inode = file->f_path.dentry->d_inode; 121 inode = file_inode(file);
122 memset(&buf, 0, sizeof(buf)); 122 memset(&buf, 0, sizeof(buf));
123 buf.dirent = dirent; 123 buf.dirent = dirent;
124 buf.dentry = file->f_path.dentry; 124 buf.dentry = file->f_path.dentry;
@@ -133,7 +133,7 @@ static int ecryptfs_readdir(struct file *file, void *dirent, filldir_t filldir)
133 goto out; 133 goto out;
134 if (rc >= 0) 134 if (rc >= 0)
135 fsstack_copy_attr_atime(inode, 135 fsstack_copy_attr_atime(inode,
136 lower_file->f_path.dentry->d_inode); 136 file_inode(lower_file));
137out: 137out:
138 return rc; 138 return rc;
139} 139}
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index cc7709e7c508..e0f07fb6d56b 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -1027,8 +1027,7 @@ int ecryptfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
1027 struct kstat lower_stat; 1027 struct kstat lower_stat;
1028 int rc; 1028 int rc;
1029 1029
1030 rc = vfs_getattr(ecryptfs_dentry_to_lower_mnt(dentry), 1030 rc = vfs_getattr(ecryptfs_dentry_to_lower_path(dentry), &lower_stat);
1031 ecryptfs_dentry_to_lower(dentry), &lower_stat);
1032 if (!rc) { 1031 if (!rc) {
1033 fsstack_copy_attr_all(dentry->d_inode, 1032 fsstack_copy_attr_all(dentry->d_inode,
1034 ecryptfs_inode_to_lower(dentry->d_inode)); 1033 ecryptfs_inode_to_lower(dentry->d_inode));
diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c
index b2a34a192f4f..6a160539cd23 100644
--- a/fs/ecryptfs/read_write.c
+++ b/fs/ecryptfs/read_write.c
@@ -40,16 +40,12 @@ int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data,
40 loff_t offset, size_t size) 40 loff_t offset, size_t size)
41{ 41{
42 struct file *lower_file; 42 struct file *lower_file;
43 mm_segment_t fs_save;
44 ssize_t rc; 43 ssize_t rc;
45 44
46 lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file; 45 lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
47 if (!lower_file) 46 if (!lower_file)
48 return -EIO; 47 return -EIO;
49 fs_save = get_fs(); 48 rc = kernel_write(lower_file, data, size, offset);
50 set_fs(get_ds());
51 rc = vfs_write(lower_file, data, size, &offset);
52 set_fs(fs_save);
53 mark_inode_dirty_sync(ecryptfs_inode); 49 mark_inode_dirty_sync(ecryptfs_inode);
54 return rc; 50 return rc;
55} 51}