diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-26 23:16:07 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-26 23:16:07 -0500 |
| commit | d895cb1af15c04c522a25c79cc429076987c089b (patch) | |
| tree | 895dc9157e28f603d937a58be664e4e440d5530c /kernel | |
| parent | 9626357371b519f2b955fef399647181034a77fe (diff) | |
| parent | d3d009cb965eae7e002ea5badf603ea8f4c34915 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs pile (part one) from Al Viro:
"Assorted stuff - cleaning namei.c up a bit, fixing ->d_name/->d_parent
locking violations, etc.
The most visible changes here are death of FS_REVAL_DOT (replaced with
"has ->d_weak_revalidate()") and a new helper getting from struct file
to inode. Some bits of preparation to xattr method interface changes.
Misc patches by various people sent this cycle *and* ocfs2 fixes from
several cycles ago that should've been upstream right then.
PS: the next vfs pile will be xattr stuff."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (46 commits)
saner proc_get_inode() calling conventions
proc: avoid extra pde_put() in proc_fill_super()
fs: change return values from -EACCES to -EPERM
fs/exec.c: make bprm_mm_init() static
ocfs2/dlm: use GFP_ATOMIC inside a spin_lock
ocfs2: fix possible use-after-free with AIO
ocfs2: Fix oops in ocfs2_fast_symlink_readpage() code path
get_empty_filp()/alloc_file() leave both ->f_pos and ->f_version zero
target: writev() on single-element vector is pointless
export kernel_write(), convert open-coded instances
fs: encode_fh: return FILEID_INVALID if invalid fid_type
kill f_vfsmnt
vfs: kill FS_REVAL_DOT by adding a d_weak_revalidate dentry op
nfsd: handle vfs_getattr errors in acl protocol
switch vfs_getattr() to struct path
default SET_PERSONALITY() in linux/elf.h
ceph: prepopulate inodes only when request is aborted
d_hash_and_lookup(): export, switch open-coded instances
9p: switch v9fs_set_create_acl() to inode+fid, do it before d_instantiate()
9p: split dropping the acls from v9fs_set_create_acl()
...
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/acct.c | 2 | ||||
| -rw-r--r-- | kernel/cgroup.c | 6 | ||||
| -rw-r--r-- | kernel/events/core.c | 2 | ||||
| -rw-r--r-- | kernel/fork.c | 2 | ||||
| -rw-r--r-- | kernel/irq/proc.c | 2 | ||||
| -rw-r--r-- | kernel/module.c | 2 | ||||
| -rw-r--r-- | kernel/nsproxy.c | 2 | ||||
| -rw-r--r-- | kernel/relay.c | 4 | ||||
| -rw-r--r-- | kernel/sys.c | 8 | ||||
| -rw-r--r-- | kernel/sysctl_binary.c | 39 |
10 files changed, 22 insertions, 47 deletions
diff --git a/kernel/acct.c b/kernel/acct.c index e8b1627ab9c7..b9bd7f098ee5 100644 --- a/kernel/acct.c +++ b/kernel/acct.c | |||
| @@ -205,7 +205,7 @@ static int acct_on(struct filename *pathname) | |||
| 205 | if (IS_ERR(file)) | 205 | if (IS_ERR(file)) |
| 206 | return PTR_ERR(file); | 206 | return PTR_ERR(file); |
| 207 | 207 | ||
| 208 | if (!S_ISREG(file->f_path.dentry->d_inode->i_mode)) { | 208 | if (!S_ISREG(file_inode(file)->i_mode)) { |
| 209 | filp_close(file, NULL); | 209 | filp_close(file, NULL); |
| 210 | return -EACCES; | 210 | return -EACCES; |
| 211 | } | 211 | } |
diff --git a/kernel/cgroup.c b/kernel/cgroup.c index b5c64327e712..fb2fb11fbb25 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c | |||
| @@ -2645,7 +2645,7 @@ static struct dentry *cgroup_lookup(struct inode *dir, struct dentry *dentry, un | |||
| 2645 | */ | 2645 | */ |
| 2646 | static inline struct cftype *__file_cft(struct file *file) | 2646 | static inline struct cftype *__file_cft(struct file *file) |
| 2647 | { | 2647 | { |
| 2648 | if (file->f_dentry->d_inode->i_fop != &cgroup_file_operations) | 2648 | if (file_inode(file)->i_fop != &cgroup_file_operations) |
| 2649 | return ERR_PTR(-EINVAL); | 2649 | return ERR_PTR(-EINVAL); |
| 2650 | return __d_cft(file->f_dentry); | 2650 | return __d_cft(file->f_dentry); |
| 2651 | } | 2651 | } |
| @@ -3902,7 +3902,7 @@ static int cgroup_write_event_control(struct cgroup *cgrp, struct cftype *cft, | |||
| 3902 | 3902 | ||
| 3903 | /* the process need read permission on control file */ | 3903 | /* the process need read permission on control file */ |
| 3904 | /* AV: shouldn't we check that it's been opened for read instead? */ | 3904 | /* AV: shouldn't we check that it's been opened for read instead? */ |
| 3905 | ret = inode_permission(cfile->f_path.dentry->d_inode, MAY_READ); | 3905 | ret = inode_permission(file_inode(cfile), MAY_READ); |
| 3906 | if (ret < 0) | 3906 | if (ret < 0) |
| 3907 | goto fail; | 3907 | goto fail; |
| 3908 | 3908 | ||
| @@ -5489,7 +5489,7 @@ struct cgroup_subsys_state *cgroup_css_from_dir(struct file *f, int id) | |||
| 5489 | struct inode *inode; | 5489 | struct inode *inode; |
| 5490 | struct cgroup_subsys_state *css; | 5490 | struct cgroup_subsys_state *css; |
| 5491 | 5491 | ||
| 5492 | inode = f->f_dentry->d_inode; | 5492 | inode = file_inode(f); |
| 5493 | /* check in cgroup filesystem dir */ | 5493 | /* check in cgroup filesystem dir */ |
| 5494 | if (inode->i_op != &cgroup_dir_inode_operations) | 5494 | if (inode->i_op != &cgroup_dir_inode_operations) |
| 5495 | return ERR_PTR(-EBADF); | 5495 | return ERR_PTR(-EBADF); |
diff --git a/kernel/events/core.c b/kernel/events/core.c index 5c75791d7269..ccc457e36354 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
| @@ -3691,7 +3691,7 @@ unlock: | |||
| 3691 | 3691 | ||
| 3692 | static int perf_fasync(int fd, struct file *filp, int on) | 3692 | static int perf_fasync(int fd, struct file *filp, int on) |
| 3693 | { | 3693 | { |
| 3694 | struct inode *inode = filp->f_path.dentry->d_inode; | 3694 | struct inode *inode = file_inode(filp); |
| 3695 | struct perf_event *event = filp->private_data; | 3695 | struct perf_event *event = filp->private_data; |
| 3696 | int retval; | 3696 | int retval; |
| 3697 | 3697 | ||
diff --git a/kernel/fork.c b/kernel/fork.c index 4133876d8cd2..8f62b2a0f120 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -413,7 +413,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) | |||
| 413 | tmp->vm_next = tmp->vm_prev = NULL; | 413 | tmp->vm_next = tmp->vm_prev = NULL; |
| 414 | file = tmp->vm_file; | 414 | file = tmp->vm_file; |
| 415 | if (file) { | 415 | if (file) { |
| 416 | struct inode *inode = file->f_path.dentry->d_inode; | 416 | struct inode *inode = file_inode(file); |
| 417 | struct address_space *mapping = file->f_mapping; | 417 | struct address_space *mapping = file->f_mapping; |
| 418 | 418 | ||
| 419 | get_file(file); | 419 | get_file(file); |
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index 4bd4faa6323a..397db02209ed 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c | |||
| @@ -76,7 +76,7 @@ static int irq_affinity_list_proc_show(struct seq_file *m, void *v) | |||
| 76 | static ssize_t write_irq_affinity(int type, struct file *file, | 76 | static ssize_t write_irq_affinity(int type, struct file *file, |
| 77 | const char __user *buffer, size_t count, loff_t *pos) | 77 | const char __user *buffer, size_t count, loff_t *pos) |
| 78 | { | 78 | { |
| 79 | unsigned int irq = (int)(long)PDE(file->f_path.dentry->d_inode)->data; | 79 | unsigned int irq = (int)(long)PDE(file_inode(file))->data; |
| 80 | cpumask_var_t new_value; | 80 | cpumask_var_t new_value; |
| 81 | int err; | 81 | int err; |
| 82 | 82 | ||
diff --git a/kernel/module.c b/kernel/module.c index 921bed4794e9..0925c9a71975 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
| @@ -2541,7 +2541,7 @@ static int copy_module_from_fd(int fd, struct load_info *info) | |||
| 2541 | if (err) | 2541 | if (err) |
| 2542 | goto out; | 2542 | goto out; |
| 2543 | 2543 | ||
| 2544 | err = vfs_getattr(file->f_vfsmnt, file->f_dentry, &stat); | 2544 | err = vfs_getattr(&file->f_path, &stat); |
| 2545 | if (err) | 2545 | if (err) |
| 2546 | goto out; | 2546 | goto out; |
| 2547 | 2547 | ||
diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c index b781e66a8f2c..afc0456f227a 100644 --- a/kernel/nsproxy.c +++ b/kernel/nsproxy.c | |||
| @@ -250,7 +250,7 @@ SYSCALL_DEFINE2(setns, int, fd, int, nstype) | |||
| 250 | return PTR_ERR(file); | 250 | return PTR_ERR(file); |
| 251 | 251 | ||
| 252 | err = -EINVAL; | 252 | err = -EINVAL; |
| 253 | ei = PROC_I(file->f_dentry->d_inode); | 253 | ei = PROC_I(file_inode(file)); |
| 254 | ops = ei->ns_ops; | 254 | ops = ei->ns_ops; |
| 255 | if (nstype && (ops->type != nstype)) | 255 | if (nstype && (ops->type != nstype)) |
| 256 | goto out; | 256 | goto out; |
diff --git a/kernel/relay.c b/kernel/relay.c index e8cd2027abbd..01ab081ac53a 100644 --- a/kernel/relay.c +++ b/kernel/relay.c | |||
| @@ -1139,7 +1139,7 @@ static ssize_t relay_file_read_subbufs(struct file *filp, loff_t *ppos, | |||
| 1139 | if (!desc->count) | 1139 | if (!desc->count) |
| 1140 | return 0; | 1140 | return 0; |
| 1141 | 1141 | ||
| 1142 | mutex_lock(&filp->f_path.dentry->d_inode->i_mutex); | 1142 | mutex_lock(&file_inode(filp)->i_mutex); |
| 1143 | do { | 1143 | do { |
| 1144 | if (!relay_file_read_avail(buf, *ppos)) | 1144 | if (!relay_file_read_avail(buf, *ppos)) |
| 1145 | break; | 1145 | break; |
| @@ -1159,7 +1159,7 @@ static ssize_t relay_file_read_subbufs(struct file *filp, loff_t *ppos, | |||
| 1159 | *ppos = relay_file_read_end_pos(buf, read_start, ret); | 1159 | *ppos = relay_file_read_end_pos(buf, read_start, ret); |
| 1160 | } | 1160 | } |
| 1161 | } while (desc->count && ret); | 1161 | } while (desc->count && ret); |
| 1162 | mutex_unlock(&filp->f_path.dentry->d_inode->i_mutex); | 1162 | mutex_unlock(&file_inode(filp)->i_mutex); |
| 1163 | 1163 | ||
| 1164 | return desc->written; | 1164 | return desc->written; |
| 1165 | } | 1165 | } |
diff --git a/kernel/sys.c b/kernel/sys.c index 2e18d33ca775..e10566bee399 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
| @@ -1794,14 +1794,14 @@ SYSCALL_DEFINE1(umask, int, mask) | |||
| 1794 | static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd) | 1794 | static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd) |
| 1795 | { | 1795 | { |
| 1796 | struct fd exe; | 1796 | struct fd exe; |
| 1797 | struct dentry *dentry; | 1797 | struct inode *inode; |
| 1798 | int err; | 1798 | int err; |
| 1799 | 1799 | ||
| 1800 | exe = fdget(fd); | 1800 | exe = fdget(fd); |
| 1801 | if (!exe.file) | 1801 | if (!exe.file) |
| 1802 | return -EBADF; | 1802 | return -EBADF; |
| 1803 | 1803 | ||
| 1804 | dentry = exe.file->f_path.dentry; | 1804 | inode = file_inode(exe.file); |
| 1805 | 1805 | ||
| 1806 | /* | 1806 | /* |
| 1807 | * Because the original mm->exe_file points to executable file, make | 1807 | * Because the original mm->exe_file points to executable file, make |
| @@ -1809,11 +1809,11 @@ static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd) | |||
| 1809 | * overall picture. | 1809 | * overall picture. |
| 1810 | */ | 1810 | */ |
| 1811 | err = -EACCES; | 1811 | err = -EACCES; |
| 1812 | if (!S_ISREG(dentry->d_inode->i_mode) || | 1812 | if (!S_ISREG(inode->i_mode) || |
| 1813 | exe.file->f_path.mnt->mnt_flags & MNT_NOEXEC) | 1813 | exe.file->f_path.mnt->mnt_flags & MNT_NOEXEC) |
| 1814 | goto exit; | 1814 | goto exit; |
| 1815 | 1815 | ||
| 1816 | err = inode_permission(dentry->d_inode, MAY_EXEC); | 1816 | err = inode_permission(inode, MAY_EXEC); |
| 1817 | if (err) | 1817 | if (err) |
| 1818 | goto exit; | 1818 | goto exit; |
| 1819 | 1819 | ||
diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c index b669ca1fa103..b25115e8c7f3 100644 --- a/kernel/sysctl_binary.c +++ b/kernel/sysctl_binary.c | |||
| @@ -970,7 +970,6 @@ out: | |||
| 970 | static ssize_t bin_intvec(struct file *file, | 970 | static ssize_t bin_intvec(struct file *file, |
| 971 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) | 971 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) |
| 972 | { | 972 | { |
| 973 | mm_segment_t old_fs = get_fs(); | ||
| 974 | ssize_t copied = 0; | 973 | ssize_t copied = 0; |
| 975 | char *buffer; | 974 | char *buffer; |
| 976 | ssize_t result; | 975 | ssize_t result; |
| @@ -983,13 +982,10 @@ static ssize_t bin_intvec(struct file *file, | |||
| 983 | if (oldval && oldlen) { | 982 | if (oldval && oldlen) { |
| 984 | unsigned __user *vec = oldval; | 983 | unsigned __user *vec = oldval; |
| 985 | size_t length = oldlen / sizeof(*vec); | 984 | size_t length = oldlen / sizeof(*vec); |
| 986 | loff_t pos = 0; | ||
| 987 | char *str, *end; | 985 | char *str, *end; |
| 988 | int i; | 986 | int i; |
| 989 | 987 | ||
| 990 | set_fs(KERNEL_DS); | 988 | result = kernel_read(file, 0, buffer, BUFSZ - 1); |
| 991 | result = vfs_read(file, buffer, BUFSZ - 1, &pos); | ||
| 992 | set_fs(old_fs); | ||
| 993 | if (result < 0) | 989 | if (result < 0) |
| 994 | goto out_kfree; | 990 | goto out_kfree; |
| 995 | 991 | ||
| @@ -1016,7 +1012,6 @@ static ssize_t bin_intvec(struct file *file, | |||
| 1016 | if (newval && newlen) { | 1012 | if (newval && newlen) { |
| 1017 | unsigned __user *vec = newval; | 1013 | unsigned __user *vec = newval; |
| 1018 | size_t length = newlen / sizeof(*vec); | 1014 | size_t length = newlen / sizeof(*vec); |
| 1019 | loff_t pos = 0; | ||
| 1020 | char *str, *end; | 1015 | char *str, *end; |
| 1021 | int i; | 1016 | int i; |
| 1022 | 1017 | ||
| @@ -1032,9 +1027,7 @@ static ssize_t bin_intvec(struct file *file, | |||
| 1032 | str += snprintf(str, end - str, "%lu\t", value); | 1027 | str += snprintf(str, end - str, "%lu\t", value); |
| 1033 | } | 1028 | } |
| 1034 | 1029 | ||
| 1035 | set_fs(KERNEL_DS); | 1030 | result = kernel_write(file, buffer, str - buffer, 0); |
| 1036 | result = vfs_write(file, buffer, str - buffer, &pos); | ||
| 1037 | set_fs(old_fs); | ||
| 1038 | if (result < 0) | 1031 | if (result < 0) |
| 1039 | goto out_kfree; | 1032 | goto out_kfree; |
| 1040 | } | 1033 | } |
| @@ -1048,7 +1041,6 @@ out: | |||
| 1048 | static ssize_t bin_ulongvec(struct file *file, | 1041 | static ssize_t bin_ulongvec(struct file *file, |
| 1049 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) | 1042 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) |
| 1050 | { | 1043 | { |
| 1051 | mm_segment_t old_fs = get_fs(); | ||
| 1052 | ssize_t copied = 0; | 1044 | ssize_t copied = 0; |
| 1053 | char *buffer; | 1045 | char *buffer; |
| 1054 | ssize_t result; | 1046 | ssize_t result; |
| @@ -1061,13 +1053,10 @@ static ssize_t bin_ulongvec(struct file *file, | |||
| 1061 | if (oldval && oldlen) { | 1053 | if (oldval && oldlen) { |
| 1062 | unsigned long __user *vec = oldval; | 1054 | unsigned long __user *vec = oldval; |
| 1063 | size_t length = oldlen / sizeof(*vec); | 1055 | size_t length = oldlen / sizeof(*vec); |
| 1064 | loff_t pos = 0; | ||
| 1065 | char *str, *end; | 1056 | char *str, *end; |
| 1066 | int i; | 1057 | int i; |
| 1067 | 1058 | ||
| 1068 | set_fs(KERNEL_DS); | 1059 | result = kernel_read(file, 0, buffer, BUFSZ - 1); |
| 1069 | result = vfs_read(file, buffer, BUFSZ - 1, &pos); | ||
| 1070 | set_fs(old_fs); | ||
| 1071 | if (result < 0) | 1060 | if (result < 0) |
| 1072 | goto out_kfree; | 1061 | goto out_kfree; |
| 1073 | 1062 | ||
| @@ -1094,7 +1083,6 @@ static ssize_t bin_ulongvec(struct file *file, | |||
| 1094 | if (newval && newlen) { | 1083 | if (newval && newlen) { |
| 1095 | unsigned long __user *vec = newval; | 1084 | unsigned long __user *vec = newval; |
| 1096 | size_t length = newlen / sizeof(*vec); | 1085 | size_t length = newlen / sizeof(*vec); |
| 1097 | loff_t pos = 0; | ||
| 1098 | char *str, *end; | 1086 | char *str, *end; |
| 1099 | int i; | 1087 | int i; |
| 1100 | 1088 | ||
| @@ -1110,9 +1098,7 @@ static ssize_t bin_ulongvec(struct file *file, | |||
| 1110 | str += snprintf(str, end - str, "%lu\t", value); | 1098 | str += snprintf(str, end - str, "%lu\t", value); |
| 1111 | } | 1099 | } |
| 1112 | 1100 | ||
| 1113 | set_fs(KERNEL_DS); | 1101 | result = kernel_write(file, buffer, str - buffer, 0); |
| 1114 | result = vfs_write(file, buffer, str - buffer, &pos); | ||
| 1115 | set_fs(old_fs); | ||
| 1116 | if (result < 0) | 1102 | if (result < 0) |
| 1117 | goto out_kfree; | 1103 | goto out_kfree; |
| 1118 | } | 1104 | } |
| @@ -1126,19 +1112,15 @@ out: | |||
| 1126 | static ssize_t bin_uuid(struct file *file, | 1112 | static ssize_t bin_uuid(struct file *file, |
| 1127 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) | 1113 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) |
| 1128 | { | 1114 | { |
| 1129 | mm_segment_t old_fs = get_fs(); | ||
| 1130 | ssize_t result, copied = 0; | 1115 | ssize_t result, copied = 0; |
| 1131 | 1116 | ||
| 1132 | /* Only supports reads */ | 1117 | /* Only supports reads */ |
| 1133 | if (oldval && oldlen) { | 1118 | if (oldval && oldlen) { |
| 1134 | loff_t pos = 0; | ||
| 1135 | char buf[40], *str = buf; | 1119 | char buf[40], *str = buf; |
| 1136 | unsigned char uuid[16]; | 1120 | unsigned char uuid[16]; |
| 1137 | int i; | 1121 | int i; |
| 1138 | 1122 | ||
| 1139 | set_fs(KERNEL_DS); | 1123 | result = kernel_read(file, 0, buf, sizeof(buf) - 1); |
| 1140 | result = vfs_read(file, buf, sizeof(buf) - 1, &pos); | ||
| 1141 | set_fs(old_fs); | ||
| 1142 | if (result < 0) | 1124 | if (result < 0) |
| 1143 | goto out; | 1125 | goto out; |
| 1144 | 1126 | ||
| @@ -1174,18 +1156,14 @@ out: | |||
| 1174 | static ssize_t bin_dn_node_address(struct file *file, | 1156 | static ssize_t bin_dn_node_address(struct file *file, |
| 1175 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) | 1157 | void __user *oldval, size_t oldlen, void __user *newval, size_t newlen) |
| 1176 | { | 1158 | { |
| 1177 | mm_segment_t old_fs = get_fs(); | ||
| 1178 | ssize_t result, copied = 0; | 1159 | ssize_t result, copied = 0; |
| 1179 | 1160 | ||
| 1180 | if (oldval && oldlen) { | 1161 | if (oldval && oldlen) { |
| 1181 | loff_t pos = 0; | ||
| 1182 | char buf[15], *nodep; | 1162 | char buf[15], *nodep; |
| 1183 | unsigned long area, node; | 1163 | unsigned long area, node; |
| 1184 | __le16 dnaddr; | 1164 | __le16 dnaddr; |
| 1185 | 1165 | ||
| 1186 | set_fs(KERNEL_DS); | 1166 | result = kernel_read(file, 0, buf, sizeof(buf) - 1); |
| 1187 | result = vfs_read(file, buf, sizeof(buf) - 1, &pos); | ||
| 1188 | set_fs(old_fs); | ||
| 1189 | if (result < 0) | 1167 | if (result < 0) |
| 1190 | goto out; | 1168 | goto out; |
| 1191 | 1169 | ||
| @@ -1214,7 +1192,6 @@ static ssize_t bin_dn_node_address(struct file *file, | |||
| 1214 | } | 1192 | } |
| 1215 | 1193 | ||
| 1216 | if (newval && newlen) { | 1194 | if (newval && newlen) { |
| 1217 | loff_t pos = 0; | ||
| 1218 | __le16 dnaddr; | 1195 | __le16 dnaddr; |
| 1219 | char buf[15]; | 1196 | char buf[15]; |
| 1220 | int len; | 1197 | int len; |
| @@ -1231,9 +1208,7 @@ static ssize_t bin_dn_node_address(struct file *file, | |||
| 1231 | le16_to_cpu(dnaddr) >> 10, | 1208 | le16_to_cpu(dnaddr) >> 10, |
| 1232 | le16_to_cpu(dnaddr) & 0x3ff); | 1209 | le16_to_cpu(dnaddr) & 0x3ff); |
| 1233 | 1210 | ||
| 1234 | set_fs(KERNEL_DS); | 1211 | result = kernel_write(file, buf, len, 0); |
| 1235 | result = vfs_write(file, buf, len, &pos); | ||
| 1236 | set_fs(old_fs); | ||
| 1237 | if (result < 0) | 1212 | if (result < 0) |
| 1238 | goto out; | 1213 | goto out; |
| 1239 | } | 1214 | } |
