Commit 7bb307e894d51308aa0582a8c4cc5875bbc645b9

Authored by Al Viro
1 parent 94e07a7590

export kernel_write(), convert open-coded instances

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Showing 5 changed files with 24 additions and 61 deletions Side-by-side Diff

drivers/mtd/nand/nandsim.c
... ... @@ -1408,40 +1408,32 @@
1408 1408 current->flags &= ~PF_MEMALLOC;
1409 1409 }
1410 1410  
1411   -static ssize_t read_file(struct nandsim *ns, struct file *file, void *buf, size_t count, loff_t *pos)
  1411 +static ssize_t read_file(struct nandsim *ns, struct file *file, void *buf, size_t count, loff_t pos)
1412 1412 {
1413   - mm_segment_t old_fs;
1414 1413 ssize_t tx;
1415 1414 int err, memalloc;
1416 1415  
1417   - err = get_pages(ns, file, count, *pos);
  1416 + err = get_pages(ns, file, count, pos);
1418 1417 if (err)
1419 1418 return err;
1420   - old_fs = get_fs();
1421   - set_fs(get_ds());
1422 1419 memalloc = set_memalloc();
1423   - tx = vfs_read(file, (char __user *)buf, count, pos);
  1420 + tx = kernel_read(file, pos, buf, count);
1424 1421 clear_memalloc(memalloc);
1425   - set_fs(old_fs);
1426 1422 put_pages(ns);
1427 1423 return tx;
1428 1424 }
1429 1425  
1430   -static ssize_t write_file(struct nandsim *ns, struct file *file, void *buf, size_t count, loff_t *pos)
  1426 +static ssize_t write_file(struct nandsim *ns, struct file *file, void *buf, size_t count, loff_t pos)
1431 1427 {
1432   - mm_segment_t old_fs;
1433 1428 ssize_t tx;
1434 1429 int err, memalloc;
1435 1430  
1436   - err = get_pages(ns, file, count, *pos);
  1431 + err = get_pages(ns, file, count, pos);
1437 1432 if (err)
1438 1433 return err;
1439   - old_fs = get_fs();
1440   - set_fs(get_ds());
1441 1434 memalloc = set_memalloc();
1442   - tx = vfs_write(file, (char __user *)buf, count, pos);
  1435 + tx = kernel_write(file, buf, count, pos);
1443 1436 clear_memalloc(memalloc);
1444   - set_fs(old_fs);
1445 1437 put_pages(ns);
1446 1438 return tx;
1447 1439 }
... ... @@ -1511,7 +1503,7 @@
1511 1503 if (do_read_error(ns, num))
1512 1504 return;
1513 1505 pos = (loff_t)ns->regs.row * ns->geom.pgszoob + ns->regs.column + ns->regs.off;
1514   - tx = read_file(ns, ns->cfile, ns->buf.byte, num, &pos);
  1506 + tx = read_file(ns, ns->cfile, ns->buf.byte, num, pos);
1515 1507 if (tx != num) {
1516 1508 NS_ERR("read_page: read error for page %d ret %ld\n", ns->regs.row, (long)tx);
1517 1509 return;
... ... @@ -1573,7 +1565,7 @@
1573 1565 u_char *pg_off;
1574 1566  
1575 1567 if (ns->cfile) {
1576   - loff_t off, pos;
  1568 + loff_t off;
1577 1569 ssize_t tx;
1578 1570 int all;
1579 1571  
... ... @@ -1585,8 +1577,7 @@
1585 1577 memset(ns->file_buf, 0xff, ns->geom.pgszoob);
1586 1578 } else {
1587 1579 all = 0;
1588   - pos = off;
1589   - tx = read_file(ns, ns->cfile, pg_off, num, &pos);
  1580 + tx = read_file(ns, ns->cfile, pg_off, num, off);
1590 1581 if (tx != num) {
1591 1582 NS_ERR("prog_page: read error for page %d ret %ld\n", ns->regs.row, (long)tx);
1592 1583 return -1;
1593 1584  
... ... @@ -1595,16 +1586,15 @@
1595 1586 for (i = 0; i < num; i++)
1596 1587 pg_off[i] &= ns->buf.byte[i];
1597 1588 if (all) {
1598   - pos = (loff_t)ns->regs.row * ns->geom.pgszoob;
1599   - tx = write_file(ns, ns->cfile, ns->file_buf, ns->geom.pgszoob, &pos);
  1589 + loff_t pos = (loff_t)ns->regs.row * ns->geom.pgszoob;
  1590 + tx = write_file(ns, ns->cfile, ns->file_buf, ns->geom.pgszoob, pos);
1600 1591 if (tx != ns->geom.pgszoob) {
1601 1592 NS_ERR("prog_page: write error for page %d ret %ld\n", ns->regs.row, (long)tx);
1602 1593 return -1;
1603 1594 }
1604 1595 ns->pages_written[ns->regs.row] = 1;
1605 1596 } else {
1606   - pos = off;
1607   - tx = write_file(ns, ns->cfile, pg_off, num, &pos);
  1597 + tx = write_file(ns, ns->cfile, pg_off, num, off);
1608 1598 if (tx != num) {
1609 1599 NS_ERR("prog_page: write error for page %d ret %ld\n", ns->regs.row, (long)tx);
1610 1600 return -1;
fs/ecryptfs/read_write.c
... ... @@ -40,16 +40,12 @@
40 40 loff_t offset, size_t size)
41 41 {
42 42 struct file *lower_file;
43   - mm_segment_t fs_save;
44 43 ssize_t rc;
45 44  
46 45 lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
47 46 if (!lower_file)
48 47 return -EIO;
49   - fs_save = get_fs();
50   - set_fs(get_ds());
51   - rc = vfs_write(lower_file, data, size, &offset);
52   - set_fs(fs_save);
  48 + rc = kernel_write(lower_file, data, size, offset);
53 49 mark_inode_dirty_sync(ecryptfs_inode);
54 50 return rc;
55 51 }
... ... @@ -569,7 +569,7 @@
569 569 return res;
570 570 }
571 571  
572   -static ssize_t kernel_write(struct file *file, const char *buf, size_t count,
  572 +ssize_t kernel_write(struct file *file, const char *buf, size_t count,
573 573 loff_t pos)
574 574 {
575 575 mm_segment_t old_fs;
576 576  
... ... @@ -578,11 +578,12 @@
578 578 old_fs = get_fs();
579 579 set_fs(get_ds());
580 580 /* The cast to a user pointer is valid due to the set_fs() */
581   - res = vfs_write(file, (const char __user *)buf, count, &pos);
  581 + res = vfs_write(file, (__force const char __user *)buf, count, &pos);
582 582 set_fs(old_fs);
583 583  
584 584 return res;
585 585 }
  586 +EXPORT_SYMBOL(kernel_write);
586 587  
587 588 ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
588 589 struct pipe_inode_info *pipe, size_t len,
... ... @@ -2277,6 +2277,7 @@
2277 2277 extern int do_pipe_flags(int *, int);
2278 2278  
2279 2279 extern int kernel_read(struct file *, loff_t, char *, unsigned long);
  2280 +extern ssize_t kernel_write(struct file *, const char *, size_t, loff_t);
2280 2281 extern struct file * open_exec(const char *);
2281 2282  
2282 2283 /* fs/dcache.c -- generic fs support functions */
kernel/sysctl_binary.c
... ... @@ -971,7 +971,6 @@
971 971 static ssize_t bin_intvec(struct file *file,
972 972 void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
973 973 {
974   - mm_segment_t old_fs = get_fs();
975 974 ssize_t copied = 0;
976 975 char *buffer;
977 976 ssize_t result;
978 977  
... ... @@ -984,13 +983,10 @@
984 983 if (oldval && oldlen) {
985 984 unsigned __user *vec = oldval;
986 985 size_t length = oldlen / sizeof(*vec);
987   - loff_t pos = 0;
988 986 char *str, *end;
989 987 int i;
990 988  
991   - set_fs(KERNEL_DS);
992   - result = vfs_read(file, buffer, BUFSZ - 1, &pos);
993   - set_fs(old_fs);
  989 + result = kernel_read(file, 0, buffer, BUFSZ - 1);
994 990 if (result < 0)
995 991 goto out_kfree;
996 992  
... ... @@ -1017,7 +1013,6 @@
1017 1013 if (newval && newlen) {
1018 1014 unsigned __user *vec = newval;
1019 1015 size_t length = newlen / sizeof(*vec);
1020   - loff_t pos = 0;
1021 1016 char *str, *end;
1022 1017 int i;
1023 1018  
... ... @@ -1033,9 +1028,7 @@
1033 1028 str += snprintf(str, end - str, "%lu\t", value);
1034 1029 }
1035 1030  
1036   - set_fs(KERNEL_DS);
1037   - result = vfs_write(file, buffer, str - buffer, &pos);
1038   - set_fs(old_fs);
  1031 + result = kernel_write(file, buffer, str - buffer, 0);
1039 1032 if (result < 0)
1040 1033 goto out_kfree;
1041 1034 }
... ... @@ -1049,7 +1042,6 @@
1049 1042 static ssize_t bin_ulongvec(struct file *file,
1050 1043 void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
1051 1044 {
1052   - mm_segment_t old_fs = get_fs();
1053 1045 ssize_t copied = 0;
1054 1046 char *buffer;
1055 1047 ssize_t result;
1056 1048  
... ... @@ -1062,13 +1054,10 @@
1062 1054 if (oldval && oldlen) {
1063 1055 unsigned long __user *vec = oldval;
1064 1056 size_t length = oldlen / sizeof(*vec);
1065   - loff_t pos = 0;
1066 1057 char *str, *end;
1067 1058 int i;
1068 1059  
1069   - set_fs(KERNEL_DS);
1070   - result = vfs_read(file, buffer, BUFSZ - 1, &pos);
1071   - set_fs(old_fs);
  1060 + result = kernel_read(file, 0, buffer, BUFSZ - 1);
1072 1061 if (result < 0)
1073 1062 goto out_kfree;
1074 1063  
... ... @@ -1095,7 +1084,6 @@
1095 1084 if (newval && newlen) {
1096 1085 unsigned long __user *vec = newval;
1097 1086 size_t length = newlen / sizeof(*vec);
1098   - loff_t pos = 0;
1099 1087 char *str, *end;
1100 1088 int i;
1101 1089  
... ... @@ -1111,9 +1099,7 @@
1111 1099 str += snprintf(str, end - str, "%lu\t", value);
1112 1100 }
1113 1101  
1114   - set_fs(KERNEL_DS);
1115   - result = vfs_write(file, buffer, str - buffer, &pos);
1116   - set_fs(old_fs);
  1102 + result = kernel_write(file, buffer, str - buffer, 0);
1117 1103 if (result < 0)
1118 1104 goto out_kfree;
1119 1105 }
1120 1106  
1121 1107  
... ... @@ -1127,19 +1113,15 @@
1127 1113 static ssize_t bin_uuid(struct file *file,
1128 1114 void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
1129 1115 {
1130   - mm_segment_t old_fs = get_fs();
1131 1116 ssize_t result, copied = 0;
1132 1117  
1133 1118 /* Only supports reads */
1134 1119 if (oldval && oldlen) {
1135   - loff_t pos = 0;
1136 1120 char buf[40], *str = buf;
1137 1121 unsigned char uuid[16];
1138 1122 int i;
1139 1123  
1140   - set_fs(KERNEL_DS);
1141   - result = vfs_read(file, buf, sizeof(buf) - 1, &pos);
1142   - set_fs(old_fs);
  1124 + result = kernel_read(file, 0, buf, sizeof(buf) - 1);
1143 1125 if (result < 0)
1144 1126 goto out;
1145 1127  
1146 1128  
1147 1129  
... ... @@ -1175,18 +1157,14 @@
1175 1157 static ssize_t bin_dn_node_address(struct file *file,
1176 1158 void __user *oldval, size_t oldlen, void __user *newval, size_t newlen)
1177 1159 {
1178   - mm_segment_t old_fs = get_fs();
1179 1160 ssize_t result, copied = 0;
1180 1161  
1181 1162 if (oldval && oldlen) {
1182   - loff_t pos = 0;
1183 1163 char buf[15], *nodep;
1184 1164 unsigned long area, node;
1185 1165 __le16 dnaddr;
1186 1166  
1187   - set_fs(KERNEL_DS);
1188   - result = vfs_read(file, buf, sizeof(buf) - 1, &pos);
1189   - set_fs(old_fs);
  1167 + result = kernel_read(file, 0, buf, sizeof(buf) - 1);
1190 1168 if (result < 0)
1191 1169 goto out;
1192 1170  
... ... @@ -1215,7 +1193,6 @@
1215 1193 }
1216 1194  
1217 1195 if (newval && newlen) {
1218   - loff_t pos = 0;
1219 1196 __le16 dnaddr;
1220 1197 char buf[15];
1221 1198 int len;
... ... @@ -1232,9 +1209,7 @@
1232 1209 le16_to_cpu(dnaddr) >> 10,
1233 1210 le16_to_cpu(dnaddr) & 0x3ff);
1234 1211  
1235   - set_fs(KERNEL_DS);
1236   - result = vfs_write(file, buf, len, &pos);
1237   - set_fs(old_fs);
  1212 + result = kernel_write(file, buf, len, 0);
1238 1213 if (result < 0)
1239 1214 goto out;
1240 1215 }