Releases: nanovms/nanos
Releases · nanovms/nanos
0.1.42
TFS: inflate existing file extents, eliminate extent size maximum When file data is being written beyond the range of an existing file extent, if the storage space adjacent to the extent is free, the extent can be extended to cover additional storage space, instead of creating a new extent; this keeps the amount of file metadata down and minimizes the number of disk I/O requests being used to transfer a given amount of data. The existing maximum limit of 1 MB on extent creation is no longer necessary and is being removed. Since allocations from the storage space are aligned to the allocation size, requesting large extents can create large unallocated ranges in the storage space; in order to be able to fill these ranges when requesting a new extent that does not fit into a single contiguous storage area, the create_extent() function upon allocation failure retries an allocation with a smaller size (down to a 1MB limit); the code that calls this function has been amended to properly handle the cases where the size of a created extent is smaller than requested.
0.1.41
clone(2): fix check for attempts to create new process The existing clone(2) syscall implementation was detecting whether the user program is trying to create a new process by checking the child_stack argument against a null value. This logic is based on the fact that the glibc fork() wrapper that is provided as part of the NPTL threading implementation invokes clone(2) with child_stack set to 0. However, it is possible to create a new process even if child_stack is non-zero: notably, the posix_spawn() implementation in glibc invokes clone() with a valid stack pointer, which is later unmapped by the parent process after the child starts executing the newly created process. The correct way for clone(2) to detect an attempt to create a new process is by checking for the CLONE_THREAD flag.
0.1.40
0.1.39
Unix fault handler: do not change CPU state When the fault handler is invoked, the CPU state is the same as the state when the interrupt was triggered. Therefore, it is not necessary for the fault handler to set the state when returning the current context; in fact, this causes a wrong state to be set when a user thread generates a page fault that is resolved without blocking, which may cause any subsequent exception generated by the thread to be handled as if it was generated by the kernel.
0.1.38
net connection_handler: use input_buffer_handler for incoming data The closure that handles incoming data on a given network connection may close the connection (by invoking the output buffer handler with a null buffer argument); if this happens, the direct_conn struct is deallocated, thus it should not be accessed anymore. This change replaces the buffer_handler closure type for handling incoming data with a new input_buffer_handler type, whose return value is a boolean variable that indicates whether the connection has been closed. The code in net/direct.c uses this return value to ensure that the direct_conn struct is not accessed after closing a connection. In addition, since in case of client connections the associated direct struct is also deallocated, the direct_conn_closed() function has been modified to return a boolean value that indicates whether the direct struct has been deallocated. This change fixes a crash occurring on Microsoft Azure instances when the cloud_init klib reports the instance status to the wire server.
0.1.37
gcp queue size, smp-enable, klib tls; brk; dirent; conc pf; huge backed heap
Pre-release
Merge pull request #1558 from nanovms/fix/epoll_wait_notify-no-thread Set current thread to access user's epoll events array
dhcpv6, locked heap; file fuzzer; cwd; syslog klib; uname avx
Merge pull request #1501 from nanovms/fix/unixsockets Fix various unix socket bugs and behaviors
fuse / mgmt / multi-interface
0.1.34 support static configuration and DHCP on multiple network interfaces …
tsc / aarch64 / minvim / balloon
PC platform vm_exit(): fix handling of reboot_on_exit flag The PC platform code that handles a VM exit should reference the root_fs global variable (defined in kernel/init.c), which holds a pointer to the root filesystem, instead of a static variable that is never set.