diff options
author | Arnd Bergmann <arnd@arndb.de> | 2019-04-17 16:51:48 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-04-19 17:07:40 -0400 |
commit | c7cbdbf29f488a19982cd9f4a109887f18028bbb (patch) | |
tree | 74b39321c14b93411eda0939683dc9b8b713717b /net/appletalk/ddp.c | |
parent | 1ab839281cf72476988901a2606378d76530f99c (diff) |
net: rework SIOCGSTAMP ioctl handling
The SIOCGSTAMP/SIOCGSTAMPNS ioctl commands are implemented by many
socket protocol handlers, and all of those end up calling the same
sock_get_timestamp()/sock_get_timestampns() helper functions, which
results in a lot of duplicate code.
With the introduction of 64-bit time_t on 32-bit architectures, this
gets worse, as we then need four different ioctl commands in each
socket protocol implementation.
To simplify that, let's add a new .gettstamp() operation in
struct proto_ops, and move ioctl implementation into the common
sock_ioctl()/compat_sock_ioctl_trans() functions that these all go
through.
We can reuse the sock_get_timestamp() implementation, but generalize
it so it can deal with both native and compat mode, as well as
timeval and timespec structures.
Acked-by: Stefan Schmidt <stefan@datenfreihafen.org>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Acked-by: Marc Kleine-Budde <mkl@pengutronix.de>
Link: https://lore.kernel.org/lkml/CAK8P3a038aDQQotzua_QtKGhq8O9n+rdiz2=WDCp82ys8eUT+A@mail.gmail.com/
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/appletalk/ddp.c')
-rw-r--r-- | net/appletalk/ddp.c | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c index 709d2542f729..e2511027d19b 100644 --- a/net/appletalk/ddp.c +++ b/net/appletalk/ddp.c | |||
@@ -1806,12 +1806,6 @@ static int atalk_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) | |||
1806 | rc = put_user(amount, (int __user *)argp); | 1806 | rc = put_user(amount, (int __user *)argp); |
1807 | break; | 1807 | break; |
1808 | } | 1808 | } |
1809 | case SIOCGSTAMP: | ||
1810 | rc = sock_get_timestamp(sk, argp); | ||
1811 | break; | ||
1812 | case SIOCGSTAMPNS: | ||
1813 | rc = sock_get_timestampns(sk, argp); | ||
1814 | break; | ||
1815 | /* Routing */ | 1809 | /* Routing */ |
1816 | case SIOCADDRT: | 1810 | case SIOCADDRT: |
1817 | case SIOCDELRT: | 1811 | case SIOCDELRT: |
@@ -1871,6 +1865,7 @@ static const struct proto_ops atalk_dgram_ops = { | |||
1871 | .getname = atalk_getname, | 1865 | .getname = atalk_getname, |
1872 | .poll = datagram_poll, | 1866 | .poll = datagram_poll, |
1873 | .ioctl = atalk_ioctl, | 1867 | .ioctl = atalk_ioctl, |
1868 | .gettstamp = sock_gettstamp, | ||
1874 | #ifdef CONFIG_COMPAT | 1869 | #ifdef CONFIG_COMPAT |
1875 | .compat_ioctl = atalk_compat_ioctl, | 1870 | .compat_ioctl = atalk_compat_ioctl, |
1876 | #endif | 1871 | #endif |