Commit 515e0d6634086d61ae846f0e8785b6f0220f3422

Authored by Al Viro
1 parent bdbf69437a

switch mqueue syscalls to fget_light()

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

Showing 1 changed file with 14 additions and 12 deletions Side-by-side Diff

... ... @@ -953,7 +953,7 @@
953 953 ktime_t expires, *timeout = NULL;
954 954 struct timespec ts;
955 955 struct posix_msg_tree_node *new_leaf = NULL;
956   - int ret = 0;
  956 + int ret = 0, fput_needed;
957 957  
958 958 if (u_abs_timeout) {
959 959 int res = prepare_timeout(u_abs_timeout, &expires, &ts);
... ... @@ -967,7 +967,7 @@
967 967  
968 968 audit_mq_sendrecv(mqdes, msg_len, msg_prio, timeout ? &ts : NULL);
969 969  
970   - filp = fget(mqdes);
  970 + filp = fget_light(mqdes, &fput_needed);
971 971 if (unlikely(!filp)) {
972 972 ret = -EBADF;
973 973 goto out;
... ... @@ -1056,7 +1056,7 @@
1056 1056 if (ret)
1057 1057 free_msg(msg_ptr);
1058 1058 out_fput:
1059   - fput(filp);
  1059 + fput_light(filp, fput_needed);
1060 1060 out:
1061 1061 return ret;
1062 1062 }
... ... @@ -1074,6 +1074,7 @@
1074 1074 ktime_t expires, *timeout = NULL;
1075 1075 struct timespec ts;
1076 1076 struct posix_msg_tree_node *new_leaf = NULL;
  1077 + int fput_needed;
1077 1078  
1078 1079 if (u_abs_timeout) {
1079 1080 int res = prepare_timeout(u_abs_timeout, &expires, &ts);
... ... @@ -1084,7 +1085,7 @@
1084 1085  
1085 1086 audit_mq_sendrecv(mqdes, msg_len, 0, timeout ? &ts : NULL);
1086 1087  
1087   - filp = fget(mqdes);
  1088 + filp = fget_light(mqdes, &fput_needed);
1088 1089 if (unlikely(!filp)) {
1089 1090 ret = -EBADF;
1090 1091 goto out;
... ... @@ -1160,7 +1161,7 @@
1160 1161 free_msg(msg_ptr);
1161 1162 }
1162 1163 out_fput:
1163   - fput(filp);
  1164 + fput_light(filp, fput_needed);
1164 1165 out:
1165 1166 return ret;
1166 1167 }
... ... @@ -1173,7 +1174,7 @@
1173 1174 SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes,
1174 1175 const struct sigevent __user *, u_notification)
1175 1176 {
1176   - int ret;
  1177 + int ret, fput_needed;
1177 1178 struct file *filp;
1178 1179 struct sock *sock;
1179 1180 struct inode *inode;
1180 1181  
... ... @@ -1220,13 +1221,13 @@
1220 1221 skb_put(nc, NOTIFY_COOKIE_LEN);
1221 1222 /* and attach it to the socket */
1222 1223 retry:
1223   - filp = fget(notification.sigev_signo);
  1224 + filp = fget_light(notification.sigev_signo, &fput_needed);
1224 1225 if (!filp) {
1225 1226 ret = -EBADF;
1226 1227 goto out;
1227 1228 }
1228 1229 sock = netlink_getsockbyfilp(filp);
1229   - fput(filp);
  1230 + fput_light(filp, fput_needed);
1230 1231 if (IS_ERR(sock)) {
1231 1232 ret = PTR_ERR(sock);
1232 1233 sock = NULL;
... ... @@ -1245,7 +1246,7 @@
1245 1246 }
1246 1247 }
1247 1248  
1248   - filp = fget(mqdes);
  1249 + filp = fget_light(mqdes, &fput_needed);
1249 1250 if (!filp) {
1250 1251 ret = -EBADF;
1251 1252 goto out;
... ... @@ -1292,7 +1293,7 @@
1292 1293 }
1293 1294 spin_unlock(&info->lock);
1294 1295 out_fput:
1295   - fput(filp);
  1296 + fput_light(filp, fput_needed);
1296 1297 out:
1297 1298 if (sock) {
1298 1299 netlink_detachskb(sock, nc);
... ... @@ -1308,6 +1309,7 @@
1308 1309 {
1309 1310 int ret;
1310 1311 struct mq_attr mqstat, omqstat;
  1312 + int fput_needed;
1311 1313 struct file *filp;
1312 1314 struct inode *inode;
1313 1315 struct mqueue_inode_info *info;
... ... @@ -1319,7 +1321,7 @@
1319 1321 return -EINVAL;
1320 1322 }
1321 1323  
1322   - filp = fget(mqdes);
  1324 + filp = fget_light(mqdes, &fput_needed);
1323 1325 if (!filp) {
1324 1326 ret = -EBADF;
1325 1327 goto out;
... ... @@ -1356,7 +1358,7 @@
1356 1358 ret = -EFAULT;
1357 1359  
1358 1360 out_fput:
1359   - fput(filp);
  1361 + fput_light(filp, fput_needed);
1360 1362 out:
1361 1363 return ret;
1362 1364 }