diff options
Diffstat (limited to 'fs/ecryptfs')
-rw-r--r-- | fs/ecryptfs/ecryptfs_kernel.h | 6 | ||||
-rw-r--r-- | fs/ecryptfs/file.c | 4 | ||||
-rw-r--r-- | fs/ecryptfs/inode.c | 3 | ||||
-rw-r--r-- | fs/ecryptfs/read_write.c | 6 |
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 | ||
512 | static inline struct path * | ||
513 | ecryptfs_dentry_to_lower_path(struct dentry *dentry) | ||
514 | { | ||
515 | return &((struct ecryptfs_dentry_info *)dentry->d_fsdata)->lower_path; | ||
516 | } | ||
517 | |||
512 | static inline void | 518 | static inline void |
513 | ecryptfs_set_dentry_lower_mnt(struct dentry *dentry, struct vfsmount *lower_mnt) | 519 | ecryptfs_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)); |
137 | out: | 137 | out: |
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 | } |