mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
Contrary to common expectations for an "int" return, these functions
return only a positive value -- if used correctly they cannot even
return 0 because the message header will necessarily be in the skb.
This makes the very common pattern of
if (genlmsg_end(...) < 0) { ... }
be a whole bunch of dead code. Many places also simply do
return nlmsg_end(...);
and the caller is expected to deal with it.
This also commonly (at least for me) causes errors, because it is very
common to write
if (my_function(...))
/* error condition */
and if my_function() does "return nlmsg_end()" this is of course wrong.
Additionally, there's not a single place in the kernel that actually
needs the message length returned, and if anyone needs it later then
it'll be very easy to just use skb->len there.
Remove this, and make the functions void. This removes a bunch of dead
code as described above. The patch adds lines because I did
- return nlmsg_end(...);
+ nlmsg_end(...);
+ return 0;
I could have preserved all the function's return values by returning
skb->len, but instead I've audited all the places calling the affected
functions and found that none cared. A few places actually compared
the return value with <= 0 in dump functionality, but that could just
be changed to < 0 with no change in behaviour, so I opted for the more
efficient version.
One instance of the error I've made numerous times now is also present
in net/phonet/pn_netlink.c in the route_dumpit() function - it didn't
check for <0 or <=0 and thus broke out of the loop every single time.
I've preserved this since it will (I think) have caused the messages to
userspace to be formatted differently with just a single message for
every SKB returned to userspace. It's possible that this isn't needed
for the tools that actually use this, but I don't even know what they
are so couldn't test that changing this behaviour would be acceptable.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|---|---|---|
| .. | ||
| ast.c | ||
| ast.h | ||
| config.c | ||
| config.h | ||
| debug_fs.c | ||
| dir.c | ||
| dir.h | ||
| dlm_internal.h | ||
| Kconfig | ||
| lock.c | ||
| lock.h | ||
| lockspace.c | ||
| lockspace.h | ||
| lowcomms.c | ||
| lowcomms.h | ||
| lvb_table.h | ||
| main.c | ||
| Makefile | ||
| member.c | ||
| member.h | ||
| memory.c | ||
| memory.h | ||
| midcomms.c | ||
| midcomms.h | ||
| netlink.c | ||
| plock.c | ||
| rcom.c | ||
| rcom.h | ||
| recover.c | ||
| recover.h | ||
| recoverd.c | ||
| recoverd.h | ||
| requestqueue.c | ||
| requestqueue.h | ||
| user.c | ||
| user.h | ||
| util.c | ||
| util.h | ||