mdev: re-initialize if uevent messages were lost
If the netlink read() failed with ENOBUFS we know that we have missed at least one message due to a socket receive buffer overrun. The only way how to recover is to drop the old socket, open a fresh one and make a cold-plug scan of the current system state. Signed-off-by: Jan Klötzke <jan@kloetzke.net> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
e3f4759019
commit
d560030548
@ -1199,6 +1199,16 @@ static void daemon_loop(char *temp, int fd)
|
||||
|
||||
len = safe_read(fd, netbuf, sizeof(netbuf) - 1);
|
||||
if (len < 0) {
|
||||
if (errno == ENOBUFS) {
|
||||
/*
|
||||
* We ran out of socket receive buffer space.
|
||||
* Start from scratch.
|
||||
*/
|
||||
dbg1s("uevent overrun, rescanning");
|
||||
close(fd);
|
||||
fd = daemon_init(temp);
|
||||
continue;
|
||||
}
|
||||
bb_simple_perror_msg_and_die("read");
|
||||
}
|
||||
end = netbuf + len;
|
||||
|
Loading…
Reference in New Issue
Block a user