备注

AI Translation Notice

This document was automatically translated by hunyuan-turbos-latest model, for reference only.

  • Source document: community/ChangeLog/V0.4.x/V0.4.0.md

  • Translation time: 2025-12-22 12:00:51

  • Translation model: hunyuan-turbos-latest

Please report issues via Community Channel

V0.4.0

Preface: This version focuses on “Linux semantic alignment + engineering usability”. Significant enhancements have been made to I/O multiplexing, POSIX timers/CPU time, file systems and procfs; tmpfs, mount propagation, and wait queue refactoring pave the way for container/cloud-native scenarios; CI/nightly builds and Playground make the experience and regression smoother.

Release Date: 2025-12-22

Core Highlights

I/O Multiplexing and Time Semantics: Alignment with Linux 6.6

  • poll/pselect6 System Call Improvements: Fixed signal mask restoration logic, optimized pselect6 implementation, correctly handled sigmask parameter and timeout validation, removed zero-timeout early return logic, ensured proper saving and restoring of signal masks during I/O waiting (#_translated_label__1531_en)

  • Enhanced epoll Event Handling: Properly handled epoll events for regular files, avoided unnecessary epitem additions; fixed epoll timeout wakeup mechanism, ensured timers wake waiting queues via Waker; improved poll_select_finish function to support more time types (#_translated_label__1528_en, #_translated_label__1492_en)

  • Complete POSIX Interval Timer Implementation: Implemented timer_create, timer_settime, timer_gettime, timer_getoverrun, timer_delete system calls, supported SIGEV_NONE/SIGEV_SIGNAL/SIGEV_THREAD_ID signal delivery modes, fixed gVisor timers_test (#_translated_label__1501_en, #_translated_label__1521_en)

  • Process and Thread CPU Time Statistics: Implemented ProcessCpuTime structure, supported user-mode, kernel-mode and total execution time statistics; added cputime_wait_queue to PCB, supported clock_nanosleep for CLOCK_PROCESS/THREAD_CPUTIME_ID; extended clock_gettime and clock_nanosleep system calls to support process and thread CPU time clocks (#_translated_label__1517_en)

  • POSIX Scheduling System Calls: Implemented sched_getparam, sched_getscheduler system calls, refactored sched_yield into an independent module (#_translated_label__1416_en)

File Systems and VFS: Functional Expansion and Stability Improvements

  • tmpfs File System Support: Added tmpfs support and integrated with devfs, provided memory file system capabilities; implemented atomic size management, zero-page creation, page cache management and other features; supported /dev/shm mounting, improved chroot and mount propagation mechanisms (#_translated_label__1459_en, #_translated_label__1480_en, #_translated_label__1410_en)

  • New System Call Implementations:

    • copy_file_range: Implemented efficient file range copy system call (#_translated_label__1513_en)

    • creat: Added creat system call support, following Linux semantics (create new file or truncate existing file and open in write-only mode) (#_translated_label__1482_en)

    • preadv2/pwritev2: Implemented vectorized I/O system call with offset and flags, supported RWF flag validation (#_translated_label__1451_en, #_translated_label__1461_en)

    • fadvise64: Implemented file access advisory system call, supported page cache range writeback and eviction, improved prefetch mechanism for random access patterns (#_translated_label__1439_en)

    • umask: Implemented umask system call, improved permission handling, set default umask to 0022 (#_translated_label__1500_en, #_translated_label__1419_en)

  • File Operation Improvements:

    • Fixed page cache truncation logic in truncate system call, fixed boundary conditions, added length checks (#_translated_label__1444_en)

    • Enhanced symbolic link handling, increased maximum symbolic link following count to 40 (aligned with Linux 6.6 standard), improved VFS behavior (#_translated_label__1507_en)

    • Fixed symlinkat handling when parent directory path is None (#_translated_label__1512_en)

    • Fixed sys_rename logic and supported RENAME_NOREPLACE flag (#_translated_label__1393_en)

    • Fixed pread64 system call compatibility and error handling, validated offset parameter and user buffer (#_translated_label__1398_en)

  • Append Lock Mechanism: Implemented file append operation lock manager, used jhash algorithm to ensure correctness of concurrent writes, supported forced append semantics (#_translated_label__1483_en)

  • EventFd File System: Implemented EventFd file system and enhanced VFS inode capabilities, supported event notification mechanisms; added is_stream, supports_seek, supports_pread, supports_pwrite methods to IndexNode trait (#_translated_label__1486_en)

  • File System Flag Refactoring: Refactored file system flag system, distinguished between open flags and access modes, improved code clarity (#_translated_label__1414_en)

  • Unified Path Checking: Unified use of vfs_check_and_clone_cstr function for path checking, reduced code duplication (#_translated_label__1481_en)

  • File Prefetch Functionality: Added file prefetch functionality, implemented readahead module for file prefetch algorithms, improved sequential read performance (#_translated_label__1391_en)

  • Mount Propagation Mechanism: Implemented mount propagation mechanism, supported Shared, Private, Slave, Unbindable propagation types, implemented recursive bind mount support (#_translated_label__1410_en)

procfs and System Information: Significant Observability Enhancements

  • Process Information Files:

    • /proc/<pid>/stat: Provided process status information, supported BusyBox ps/pstree/top and other tools (#_translated_label__1490_en)

    • /proc/<pid>/task: Implemented thread directory structure, supported displaying main thread with tid=pid (#_translated_label__1490_en)

    • /proc/<pid>/cmdline and /proc/cmdline: Provided process and kernel command line arguments (#_translated_label__1489_en)

    • /proc/<pid>/maps: Provided process memory mapping information, improved page fault handling (#_translated_label__1468_en)

    • /proc/<pid>/statm: Provided process memory statistics information (#_translated_label__1455_en)

  • Namespace Support:

    • /proc/<pid>/ns/ Directory: Supported dynamic creation of namespace files, implemented basic cgroup namespace structure (#_translated_label__1515_en)

    • /proc/thread-self/ns: Supported viewing thread namespaces, implemented setns system call for namespace management (#_translated_label__1412_en, #_translated_label__1515_en)

    • Fixed race conditions during namespace file creation (#_translated_label__1413_en)

  • Kernel Log Management: Implemented kernel log level management and procfs interface (/proc/sys/kernel/printk), supported dynamic adjustment of log levels (#_translated_label__1415_en)

  • File Descriptor Information: Added file descriptor related support in procfs, supported /proc/self/fd/N magic links, implemented FIONREAD ioctl command for pipes, added /proc//fdinfo directory support (#_translated_label__1426_en)

Process Management and Execution: Closer to Linux Behavior

  • Shebang Script Support: Added shebang script execution support, implemented script parsing and recursive execution, could directly run script files, supported multiple interpreters (#_translated_label__1511_en)

  • Process Wait Semantics Fixes:

    • Fixed wait semantics for child processes in thread groups (#_translated_label__1427_en)

    • Fixed parent process wakeup logic when child processes exit, ensured parent process is woken up regardless of exit_signal value (#_translated_label__1516_en)

  • Process Execution Improvements:

    • Fixed sys_exec related tests, fixed empty path and empty argument handling in execve system call (#_translated_label__1518_en)

    • Improved execve and execveat system call implementations, enhanced execution file permission checks and signal handling

    • Implemented fd_table unsharing in execve processes, ensured isolation

    • Improved path resolution logic, fixed error logging when shebang interpreter is not found

  • Signal Handling Enhancements:

    • Corrected POSIX timer signal delivery logic, supported SIGEV_THREAD mode, relaxed SIGEV_THREAD_ID restrictions (#_translated_label__1521_en)

    • Fixed signal ignore logic, implemented signal ignore check logic (#_translated_label__1434_en)

    • Implemented enhanced signal handling and IPC mechanisms, added rt_sigqueueinfo and rt_tgsigqueueinfo system calls (#_translated_label__1423_en)

    • Fixed kill process group bug (#_translated_label__1424_en)

    • Fixed issues related to sys_rt_sigtimedwait and sys_rt_sigreturn (#_translated_label__1406_en, #_translated_label__1394_en, #_translated_label__1400_en)

Memory Management and I/O: Performance and Stability Optimizations

  • User Space Memory Access Fixes:

    • Fixed zero-length buffer validation during IoVecs construction, ensured Linux semantics compliance

    • Fixed scatter method error handling when encountering inaccessible memory, avoided returning errors after partial writes

    • Fixed readv/preadv system calls to support chunked reading and partial successful writes

    • Fixed page reclamation logic to avoid reclaiming still-mapped file pages

    • Fixed null pointer checks in UserBufferReader/Writer, prevented undefined behavior

    • Optimized IoVecs user space memory access checks and copy logic, uniformly used user_accessible_len for accessibility validation (#_translated_label__1522_en)

  • Block Cache Enhancements: Enhanced CacheBlock and BlockCache functionality, added from_slice and write_data methods, improved insert_one_block and immediate_write methods to accept slices instead of vectors, fixed FileMapInfo::page_cache memory leak issue (changed to Weak) (#_translated_label__1465_en)

  • Page Cache Improvements:

    • Fixed page cache truncation during truncate, fixed boundary conditions (#_translated_label__1444_en)

    • Improved page cache management, refactored page cache read/write to resolve deadlock issues (#_translated_label__1455_en)

  • Memory Management Optimizations:

    • Fixed slab allocator iterator out-of-bounds access and concurrency safety issues, changed SLABALLOCATOR to SpinLock protection (#_translated_label__1464_en)

    • Fixed error handling return value for exception table safe copying (#_translated_label__1395_en)

    • Optimized page reclamation process, split into two phases to avoid deadlocks (#_translated_label__1455_en)

  • mmap Support Enhancements: Implemented mmap method for multiple file system nodes, improved mmap error handling and validation, enhanced memory protection handling and validation (#_translated_label__1455_en)

IPC and Pipes: Blocking Semantics and Race Condition Fixes

  • FIFO Blocking Open Semantics: Implemented FIFO blocking open semantics, added open_wait_queue to LockedPipeInode for FIFO blocking waits during opening, implemented Linux FIFO blocking/non-blocking open semantics (O_RDONLY/O_WRONLY/O_RDWR) (#_translated_label__1429_en)

  • Pipe Behavior Improvements:

    • Fixed and improved pipe behavior, added PipeFS (pipe file system) and registered PIPEFS_MAGIC

    • Expanded pipe buffer to 65536 bytes, supported atomic writes

    • Implemented FIFO (named pipe) support, allowed O_RDWR mode opening

    • Fixed race conditions for writer wakeup in blocking mode, increased writer count before waiting for readers in blocking mode (#_translated_label__1529_en, #_translated_label__1426_en)

    • Added pipe buffer size query functionality (F_GETPIPE_SZ and F_SETPIPE_SZ) to fcntl system call

    • Added file descriptor related support in procfs

Network and Devices: Stability Improvements

  • Network Stack Optimizations:

    • Changed NapiManager lock mechanism to lock_irqsave, fixed potential deadlocks when calling napi_schedule in interrupt context (#_translated_label__1525_en)

    • Fixed UDP getsockname/getpeername system calls (#_translated_label__1460_en)

  • TTY Driver Enhancements:

    • Enhanced TTY driver and device management, improved handling of master and slave types (#_translated_label__1462_en)

    • Fixed TTY and session permission check logic, added TIOCNOTTY command support (#_translated_label__1430_en)

    • Added page_cache method to TTY devices and handled cases without page cache (#_translated_label__1428_en)

    • Improved PTY device management, added /dev/ptmx symbolic link pointing to internal devpts node (#_translated_label__1462_en)

  • Asynchronous I/O Notification: Implemented asynchronous I/O notification mechanism and enhanced ioctl system calls (#_translated_label__1425_en)

File System Implementations: ext4 and FAT Improvements

  • ext4 File System:

    • Fixed spinlock deadlocks in ext4 inode read/write operations

    • Added parent directory pointer support, implemented parent() method

    • Improved block device addressing logic, uniformly used 512-byte LBA

    • Enhanced root file system detection mechanism, supported automatic identification of ext4 and FAT

    • Fixed interpreter path lookup issues in ELF loader

    • Added detection methods for ext4 and fat file systems and optimized code (#_translated_label__1509_en)

  • FAT File System:

    • Updated directory link count management, ensured directory link counts start from 2 (self-reference and parent directory link) (#_translated_label__1454_en)

    • Improved file system statistics support, implemented SuperBlock fields required for statfs (#_translated_label__1491_en)

    • Fixed overflow issues when updating free cluster counts in FAT32 FSInfo (#_translated_label__1491_en)

  • File System Statistics: Improved file system statistics support for FAT and tmpfs, added default capacity policy (half of physical memory) for tmpfs (#_translated_label__1491_en)

Wait Queue Refactoring: Introduction of Waiter/Waker Pattern

  • Wait Queue Mechanism Refactoring: Refactored wait queue mechanism, introduced Waiter/Waker pattern to prevent wakeup losses, unified wait interfaces, provided wait_event_interruptible/uninterruptible methods, refactored futex, epoll, eventfd, semaphore, completion and other modules to use new wait queues, optimized process wait for child process exit logic (#_translated_label__1452_en)

  • Signal Handling Fixes: Consumed signals promptly and refreshed HAS_PENDING_SIGNAL state in sys_rt_sigtimedwait, changed futex interruptible wakeup error code from ERESTARTSYS to EINTR to comply with Linux semantics (#_translated_label__1452_en)

Engineering Efficiency and CI: Automation and Toolchain Improvements

  • Nightly Build Workflow: Added nightly build and release workflow, supported automated building and releasing, separated build and release steps, compressed build artifacts into tarballs (#_translated_label__1469_en, #_translated_label__1471_en, #_translated_label__1472_en, #_translated_label__1473_en, #_translated_label__1474_en, #_translated_label__1475_en, #_translated_label__1476_en, #_translated_label__1477_en)

  • Build Container Upgrade: Upgraded build container version to v1.19, fixed CI related issues, added riscv64 libc support, updated Docker image repository addresses in CI workflows (#_translated_label__1442_en)

  • CI Process Fixes:

    • Fixed CI process where tests failed but returned success status (#_translated_label__1403_en)

    • Fixed gVisor test automation scripts, fixed scripts for automatically enabling/disabling gVisor syscall test case packaging (#_translated_label__1405_en)

    • Added open_test test (#_translated_label__1458_en)

  • Code Review Automation: Added Claude code review workflow, optimized code review process and configuration, enabled progress tracking functionality (#_translated_label__1435_en, #_translated_label__1436_en, #_translated_label__1437_en, #_translated_label__1438_en, #_translated_label__1440_en, #_translated_label__1445_en, #_translated_label__1446_en, #_translated_label__1447_en)

  • Development Container Support: Added devcontainer support based on CNB images, set non-root user as default devcontainer user (#_translated_label__1449_en, #_translated_label__1457_en)

Documentation and Community: Experience and Accessibility Improvements

  • DragonOS Playground: Updated README and build documentation, added DragonOS Playground experience methods, added cloud-native development experience methods in README, provided one-click launch link for CNB platform, updated community news with Playground launch information (#_translated_label__1484_en)

  • Documentation Translation Updates: Multiple rounds of documentation translation updates, improved internationalization support (#_translated_label__1485_en, #_translated_label__1453_en, #_translated_label__1411_en, #_translated_label__1408_en, #_translated_label__1402_en, #_translated_label__1396_en)

  • User Environment Improvements:

    • Fixed PS1 environment variable to match bash default highlighting (#_translated_label__1432_en)

    • Used colored PS1, improved user experience (#_translated_label__1422_en)

gVisor Testing: Continuous Compatibility Improvements

  • Test Case Expansion: Removed fifo_test blocklist file from gVisor tests, expanded test coverage (#_translated_label__1524_en)

  • System Call Fixes:

    • Fixed abnormal behavior of open system call under gVisor, fixed multiple open-related tests (#_translated_label__1417_en)

    • Fixed boundary cases of utimensat/futimesat system calls for gVisor test compatibility (#_translated_label__1431_en)

    • Fixed pread64 system call compatibility and error handling (#_translated_label__1398_en)

    • Fixed sys_rename logic and supported RENAME_NOREPLACE (#_translated_label__1393_en)

    • Fixed getdents system call implementation (#_translated_label__1397_en)

    • Fixed SIG derivation issues when writing partially readable buffers in syscall/vfs (#_translated_label__1375_en)

    • Fixed cputime, sys_rt_sigtimedwait and sys_rt_sigreturn related issues (#_translated_label__1406_en, #_translated_label__1394_en, #_translated_label__1400_en)

Other Improvements

  • Symbol Table Query Fixes: Fixed symbol table query issues, used binary search for symbols instead of original logic (#_translated_label__1443_en)

  • Device Driver Improvements: Added random device support (/dev/random), provided random byte generation capability (#_translated_label__1455_en)

  • File System Improvements: Improved directory link count management, updated directory link count management in FAT and RAM file systems (#_translated_label__1454_en)

Version Overview

  • I/O Multiplexing: Fixed poll/pselect6 signal mask restoration logic, enhanced epoll event handling, improved timeout wakeup mechanism

  • Time and Timers: Complete POSIX interval timer implementation, CPU time statistics, improved clock_nanosleep, POSIX scheduling system calls

  • File Systems: tmpfs support, new system calls like copy_file_range, creat, preadv2, pwritev2, fadvise64, umask, append lock mechanism, EventFd file system, mount propagation mechanism

  • procfs Enhancements: Support for /proc//stat, /proc//task, /proc//cmdline, /proc//maps, /proc//ns/, /proc/thread-self/ns/ and other files, kernel log management

  • Process Management: Shebang script support, process wait semantics fixes, signal handling enhancements, process execution improvements

  • Memory and I/O: Fixed user space memory access, enhanced block cache, improved page cache, fixed slab allocator concurrency safety, enhanced mmap support

  • IPC and Pipes: FIFO blocking open semantics, pipe race condition fixes, dynamic pipe buffer adjustment

  • Network and Devices: Optimized network stack lock mechanism, fixed UDP sockets, enhanced TTY drivers, added random device support

  • File System Implementations: Fixed ext4 deadlocks, improved FAT file system, enhanced file system statistics

  • Wait Queue Refactoring: Waiter/Waker pattern, unified wait interfaces

  • Engineering Efficiency: Nightly build workflow, build container upgraded to v1.19, CI process fixes, code review automation, development container support

  • Documentation and Community: DragonOS Playground promotion, documentation translation updates, user environment improvements

  • gVisor Testing: Expanded test cases, multiple system call fixes to pass gVisor tests

Detailed Changes

1. I/O Multiplexing and Time Semantics: Alignment with Linux 6.6

poll/pselect6 Optimizations (#_translated_label__1531_en)

  • Fixed signal mask restoration logic in poll_select_finish, avoided incorrect restoration during ERESTARTSYS

  • Refactored pselect6 system call, correctly handled sigmask parameter and timeout validation

  • Removed zero-timeout early return logic in poll_select_finish

  • Added as_millis method to PosixTimeSpec

  • Added whitelist for select-related tests

epoll Event Handling (#_translated_label__1528_en, #_translated_label__1492_en)

  • Fixed logic where regular files were always ready in epoll, avoided unnecessary epitem additions

  • Improved poll_select_finish function to support more time types

  • Fixed negative timeout value check in select system call

  • Refactored timer creation logic, used EpollTimeoutWaker structure to implement TimerFunction

  • Changed timeout wakeup method from direct PCB wakeup to triggering via Waker::wake()

POSIX Interval Timer (#_translated_label__1501_en, #_translated_label__1521_en)

  • Added handling for system calls timer_create/timer_settime/timer_gettime/timer_getoverrun/timer_delete and integrated them into the syscall table

  • Implemented process-level POSIX interval timers: creation/deletion/setting/querying based on CLOCK_MONOTONIC, periodic reloading, and expiration scheduling

  • Fully implemented SIGEV_NONE/SIGEV_SIGNAL/SIGEV_THREAD_ID (relaxed SIGEV_THREAD_ID restrictions to allow signal delivery to any thread in the same thread group) and SI_TIMER siginfo (including si_timerid/si_overrun/si_value)

  • Fixed overrun semantics and signal coalescing: merged and accumulated overruns in the per-thread pending queue to prevent duplicate queuing that could kill the process with signals

  • Fixed remaining time calculation in gettime for periodic timers and the issue of returning 0 for callback windows

  • Fixed self-deadlock caused by signal lock/queue access in timer callbacks

  • Fixed the issue where ProcessControlBlock::raw_tgid() returned the wrong field

CPU Time Statistics (#_translated_label__1517_en)

  • Added the ProcessCpuTime structure to track user-mode, kernel-mode, and total execution time

  • Added cputime_wait_queue to PCB to support clock_nanosleep for CLOCK_PROCESS/THREAD_CPUTIME_ID

  • Added CPU-time wait queue wakeup logic in scheduler CPU time statistics

  • Extended system calls clock_gettime and clock_nanosleep to support process and thread CPU time clocks

  • Added the PosixTimeSpec::from_ns method for convenient creation of time specifications from nanoseconds

  • Added defensive fallback and logging for invalid thread group relationships in process_cputime_ns

  • Added comments explaining atomic operation ordering for thread_cputime_ns

  • Added a multi-threaded CPU time test program to verify the functionality of accumulating thread times into process CPU time

POSIX Scheduling System Calls (#_translated_label__1416_en)

  • Added the sched_getparam system call to retrieve process scheduling parameters

  • Added the sched_getscheduler system call to retrieve process scheduling policies

  • Refactored sched_yield into an independent module, providing appropriate system call handlers

  • Added utility functions for scheduling permission checks

  • Removed the old do_sched_yield implementation from the main system call module

2. File Systems and VFS: Functional Expansion and Stability Improvements

tmpfs File System (#_translated_label__1459_en, #_translated_label__1480_en, #_translated_label__1410_en)

  • Introduced a new tmpfs module for in-memory temporary file storage

  • Updated devfs to mount /dev/shm as tmpfs, aligning with Linux semantics

  • Enhanced the vfs module to include TMPFS_MAGIC for tmpfs identification

  • Added methods and structures required for tmpfs functionality, including inode management and file operations

  • Implemented atomic size management, adding atomic operations to manage the current size of the tmpfs file system

  • Integrated size management into inode operations to ensure thread-safe size updates and adherence to specified limits

  • Enhanced resize and truncate methods to adjust the file system size accordingly during file modifications

  • Implemented zero-page creation, adding the create_zero_pages method to InnerPageCache for efficient zero-page creation

  • Updated Tmpfs to utilize the new zero-page creation during read/write operations, ensuring seamless page fault handling

  • Enhanced PageFaultHandler, adding pagecache_fault_zero to specifically manage tmpfs page faults

  • Fixed chroot-related issues and implemented mount propagation mechanisms

New System Call Implementations

copy_file_range (#_translated_label__1513_en)

  • Implemented the copy_file_range system call to support efficient data copying between files

  • Added comprehensive test cases covering basic functionality, boundary conditions, and error handling

creat (#_translated_label__1482_en)

  • Implemented the creat system call handler, following Linux semantics: creating a new file or truncating an existing file and opening it in write-only mode

  • Registered the creat system call in the syscall table for the x86_64 architecture

  • Added the creat test item to the gvisor test whitelist

preadv2/pwritev2 (#_translated_label__1451_en, #_translated_label__1461_en)

  • Implemented the preadv2 system call to support vectorized reading with offsets and flags

  • Handled the case where offset is -1 by using the current file offset, otherwise reusing preadv logic

  • Added validation for RWF flags, adhering to Linux compatibility requirements

  • Implemented the pwritev2 system call to allow vectorized writing with offsets and flags

  • Implemented validation for file descriptors and offsets to ensure robust error handling

  • Reused the core logic of pwritev for the new system calls to maintain consistency in file write operations

fadvise64 (#_translated_label__1439_en)

  • Added implementation of the fadvise64 system call

  • Added functionality for page cache range writeback and eviction

  • Improved prefetch mechanisms to support random access patterns

  • Expanded management of file access mode flags

  • Encapsulated access to file prefetch states and optimized fadvise64 implementation

  • Fixed the page boundary check logic in fadvise64

umask (#_translated_label__1500_en, #_translated_label__1419_en)

  • Set the default umask to 0022 for new file system instances

  • Added helper functions apply_umask_for_create() and chmod_preserve_type()

  • Implemented appropriate permission checks for file creation and chmod operations

  • Fixed the fchmod system call to work correctly and reject O_PATH file descriptors

  • Added open_create_test to the gvisor test suite

File Operation Improvements

truncate Fix (#_translated_label__1444_en)

  • Limited buffer size to 512KB to avoid capacity overflow due to excessive memory allocation

  • Added page cache truncation for resize

  • Increased checks for len to verify if the truncated length exceeds limits

  • Checked filemode

  • Improved type conversion logic for length parameters; uniformly used the limited-size buffer strategy

  • Added maximum capacity checks in fat’s resize

  • Uniformly defined ZERO_BUF_SIZE; added checks for zero writes; uniformly rejected lengths exceeding isize::MAX at the vfs layer

Symbolic Link Handling Enhancements (#_translated_label__1507_en)

  • Updated tmpfs to require both regular files and symbolic links to use the page cache, ensuring correct read/write operations

  • Increased the maximum number of symbolic link follows to 40, aligning with Linux 6.6 standards

  • Improved symbolic link handling in VFS, correctly following symbolic links based on path conditions and trailing slashes

  • Added validation for conflicting flags in vfs_statx to prevent invalid operations

  • Improved system call implementations for symbolic links and lstat to adhere to Linux semantics, ensuring correct behavior for symbolic link creation and path resolution

  • Corrected the handling logic for symbolic link follow counts, adjusting VFS_MAX_FOLLOW_SYMLINK_TIMES from 40 to 41

Other File Operation Fixes

  • Fixed the handling logic in symlinkat when the parent directory path is None (#_translated_label__1512_en)

  • Fixed the logic in sys_rename and added support for the RENAME_NOREPLACE flag (#_translated_label__1393_en)

  • Fixed compatibility and error handling in the pread64 system call, validating the offset parameter and user buffer (#_translated_label__1398_en)

Append Lock Mechanism (#_translated_label__1483_en)

  • Introduced the AppendLockManager to ensure atomicity of append operations across file systems, preventing data corruption in concurrent write scenarios

  • Updated file write methods to utilize the new append lock mechanism, ensuring respect for the latest file end position when appending to files

  • Enhanced write_append and pwrite_append methods to support forced append semantics, aligning with Linux behavior

  • Initialized the append lock manager during VFS initialization to ensure readiness before any file write operations

  • Added the jhash library and used it for hash calculations of append_lock

EventFd File System (#_translated_label__1486_en)

  • Introduced EventFdFs as a new pseudo-file system to support eventfd file descriptors, including methods for root inode retrieval and file system information

  • Enhanced the IndexNode trait, adding methods is_stream, supports_seek, supports_pread, and supports_pwrite to simplify stream file operation semantics

  • Updated file handling in VFS to leverage new inode capabilities, ensuring correct behavior for pread, pwrite, and lseek operations

  • Added eventfd_test to the system call whitelist for testing

  • Fixed the error handling order for O_PATH and stream objects in pread/pwrite

File System Flags Refactoring (#_translated_label__1414_en)

  • Refactored the file system flags system to distinguish between open flags and access modes

  • Improved code clarity and maintainability

Unified Path Checking (#_translated_label__1481_en)

  • Replaced check_and_clone_cstr in multiple VFS system calls with vfs_check_and_clone_cstr

  • Simplified the method of obtaining page_cache references in page_cache.rs

  • Added a new function copy_mount_path_string in sys_mount.rs specifically for handling mount paths

  • Removed redundant path length checks in rename_utils.rs

File Prefetch Functionality (#_translated_label__1391_en)

  • Added the readahead module to implement file prefetch algorithms

  • Modified the page_cache module to support prefetch markers

  • Added prefetch state management to the File structure

  • Added the PG_READAHEAD flag bit to PageFlags

Mount Propagation Mechanism (#_translated_label__1410_en)

  • Added support for mount propagation types: Shared, Private, Slave, and Unbindable

  • Introduced a new module to manage mount propagation semantics, including peer group registration and event propagation

  • Updated existing mount functions to handle propagation logic during mount and unmount operations

  • Enhanced documentation to include detailed information and usage of the new mount propagation features

  • Added unit tests to verify the correctness of mount propagation behavior in different scenarios

  • Implemented support for recursive bind mounts, adding the recursive bind mount feature with support for the MS_BIND | MS_REC flags

  • Implemented BFS traversal to copy sub-mounts in do_recursive_bind_mount

  • Fixed mount registration order to prevent dangling registrations in case of failures

3. procfs and System Information: Significantly Enhanced Observability

Process Information Files

/proc//stat and /proc//task (#_translated_label__1490_en)

  • Added generation of the /proc//stat file, supporting tools like BusyBox ps/pstree/top

  • Implemented the /proc//task directory structure, supporting the display of the main thread with tid=pid

  • Added the proc_pid_stat and proc_pid_task modules to handle related logic

  • Extended the ProcFileType enumeration, adding types such as ProcPidStat and ProcPidTaskDir

  • Added a tid field in InodeInfo to support thread information

/proc/cmdline and /proc//cmdline (#_translated_label__1489_en)

  • Added the proc_pid_cmdline module to implement the reading logic for /proc/cmdline and /proc//cmdline files

  • Added a cmdline field in the Process Control Block to store command-line arguments of processes

  • Properly set and inherited cmdline data during execve, fork, and initial process startup

  • Created corresponding file nodes in procfs and integrated them into the file type enumeration and opening logic

/proc//maps (#_translated_label__1468_en)

  • Added the proc_maps module to implement the generation logic for /proc//maps files

  • Registered the maps file in ProcFS, supporting the creation and cleanup of process folders

  • Updated the gvisor test whitelist, adding time_test

  • Corrected the user-space judgment logic in page fault handling, prioritizing the use of TrapFrame and error codes to determine the access initiator

/proc//statm (#_translated_label__1455_en)

  • Introduced the ProcStatm file type into the ProcFileType enumeration

  • Implemented the open_statm function to return a placeholder response for the statm file

  • Updated ProcFS inode creation to include a statm file for each process

  • Enhanced the IndexNode implementation to handle the new ProcStatm file type

  • Optimized the statm file opening logic, adding virtual memory page count calculations

Namespace Support

/proc//ns/ Directory (#_translated_label__1515_en)

  • Added the /proc//ns/ directory to support dynamic creation of namespace files

  • Implemented the basic structure for cgroup namespaces, supporting the CLONE_NEWCGROUP flag

  • Added ioctl support for namespace files (commands such as NS_GET_NSTYPE)

  • Extended the setns system call to support switching cgroup namespaces

/proc/thread-self/ns (#_translated_label__1412_en)

  • Introduced a new module to handle namespace files under /proc/thread-self/ns, allowing applications to reference namespaces via symbolic links

  • Implemented dynamic creation of namespace files and their corresponding IDs, ensuring compatibility with Linux behavior

  • Updated ProcFS to create necessary directory structures and files for thread-specific namespaces

  • Enhanced the existing ProcFileType enumeration to include new types for thread self-namespaces

  • Implemented the setns system call for namespace management, allowing processes to join existing namespaces using file descriptors

Namespace File Race Fixes (#_translated_label__1413_en)

  • Added appropriate error handling for concurrent namespace file creation

  • Moved namespace type validation earlier in the creation process

  • Ensured that child inodes are fully initialized before becoming visible in the children map

  • Handled EEXIST race conditions by rechecking the children map

Kernel Log Management (#_translated_label__1415_en)

  • Introduced a new module to manage kernel log levels, mimicking Linux behavior

  • Added support for dynamically configuring log levels through the command line and procfs interface

  • Created a new /proc/sys/kernel/printk file for reading and writing log level settings

  • Updated the existing logging mechanism to utilize the new log level management system

  • Enhanced QEMU startup scripts to allow setting log levels via environment variables

File Descriptor Information (#_translated_label__1426_en)

  • Added file descriptor-related support in procfs

  • Added a target_inode field in the procfs InodeInfo to store the original file inode of magic links

  • Implemented the IndexNode::special_node method to allow /proc/self/fd/N to return a reference to the original file

  • Handled SpecialNodeData::Reference in VFS to support path resolution for magic links

  • Implemented the ioctl FIONREAD command for pipe files to retrieve the number of readable bytes

  • Added support for the /proc//fdinfo directory and implemented dynamic adjustment of pipe buffers

4. Process Management and Execution: Closer to Linux Behavior

Shebang Script Support (#_translated_label__1511_en)

  • Added the shebang module to implement script parsing and recursive execution

  • Refactored the exec module to support recursive loading and context tracking

  • Added a test program to verify shebang functionality

  • Added the inline attribute to the parse_shebang_line function for optimization

Process Wait Semantics Fixes

Thread Group Wait Semantics (#_translated_label__1427_en)

  • Fixed the wait semantics for child processes in thread groups

Parent Process Wakeup Logic (#_translated_label__1516_en)

  • Corrected the parent process wakeup conditions to ensure wakeup regardless of the exit_signal value

  • Fixed the incorrect position of the thread group leader wakeup logic

Process Execution Improvements (#_translated_label__1518_en)

  • Fixed issues in the execve system call with empty paths and empty arguments, checking if argv is empty before resolving symbolic links to avoid null pointer dereferences

  • Added checks for empty path strings, returning the ENOENT error code

  • Added version management functionality to the gvisor test suite, introducing version variables and version files to support automatic detection and upgrades

  • Enhanced execution file permission checks and signal handling, adding file type and execution permission checks in the execve system call

  • Removed redundant interpreter_path fields in shebang processing

  • Fixed the signal mask copying issue during fork to ensure POSIX compliance

  • Improved handling of the AT_EMPTY_PATH and AT_SYMLINK_NOFOLLOW flags in the execveat system call

  • Implemented unsharing of the fd_table in the execve process to ensure isolation

  • Updated path resolution logic to replace argv[0] only when absolute_path() succeeds, otherwise keeping the original path

  • Improved error logging when the shebang interpreter is not found

Signal Handling Enhancements

POSIX Timer Signal Delivery (#_translated_label__1521_en)

  • Fixed the issue where ProcessControlBlock::raw_tgid() returned the wrong field

  • Added support for SIGEV_THREAD in POSIX timers, compatible with gVisor tests

  • Relaxed SIGEV_THREAD_ID restrictions to allow signal delivery to any thread in the same thread group

Signal Ignore Logic (#_translated_label__1434_en)

  • Implemented signal ignore check logic

  • Fixed getpid to return the correct tgid in namespaces

  • Fixed the copy_process order during fork

  • Fixed the CloneFlags::CLONE_SIGHAND flag in the init process

Enhanced Signal Handling and IPC Mechanisms (#_translated_label__1423_en)

  • Added the rt_sigqueueinfo and rt_tgsigqueueinfo system calls for POSIX-compliant signal delivery

  • Enhanced the kill process functionality, providing appropriate signal validation and permission checks

  • Improved process exit handling, including signal cleanup and parent process notification

  • Updated the fork implementation to correctly handle signal inheritance

  • Implemented the setresuid system call, providing appropriate permission management

  • Added comprehensive test coverage for signal-related system calls

Process Group Kill Fix (#_translated_label__1424_en)

  • Fixed the bug in killing process groups, enabling the KillTest.ProcessGroups to pass

sys_rt_sigtimedwait and sys_rt_sigreturn Fixes (#_translated_label__1406_en, #_translated_label__1394_en, #_translated_label__1400_en)

  • Improved process CPU time statistics accuracy by adjusting the baseline to net time (accounted_cputime) after deducting IRQ and Steal time.

  • Fixed the signal waiting logic in sys_rt_sigtimedwait to ensure correct entry into do_kernel_rt_sigtimedwait even when the waited signal set is empty.

  • Resolved potential infinite sleep issues: when a thread is awakened by non-target signals or non-timeout events, it will correctly return EINTR.

  • Fixed a bug where bitflags were incorrectly removed; should use remove().

  • Fixed sys_rt_sigreturn: when returning from a signal handler to user space, if the to-be-restored %rcx / %r11 conflicts with sysretq behavior, forcibly jump to the .L_syscall_must_use_iret branch and use iretq to precisely restore the full context.

5. Memory Management and I/O: Performance and Stability Optimizations

User-Space Memory Access Fixes (#_translated_label__1522_en)

  • Fixed validation of zero-length buffers during IoVecs construction to comply with Linux semantics.

  • Improved error handling in the scatter method when encountering inaccessible memory to avoid partial writes followed by errors.

  • Fixed system calls like readv/preadv to support chunked reads and partial successful writes.

  • Fixed page reclamation logic to avoid reclaiming still-mapped file pages.

  • Fixed null pointer checks in UserBufferReader/Writer to prevent undefined behavior.

  • Adjusted cache thresholds and added memory detection logic for gVisor tests.

  • Optimized user-space memory access checks and copy logic for IoVecs, removing redundant verify_area and UserBufferReader/Writer checks, and unifying accessibility verification using user_accessible_len.

  • Used copy_from_user_protected for exception-protected copying in the gather method, aligning with the scatter method.

  • Improved error handling logic to return successfully read data when partial data is read, otherwise return EFAULT.

Block Cache Enhancements (#_translated_label__1465_en)

  • Added a from_slice method to CacheBlock for direct instance creation from slices, avoiding unnecessary allocations.

  • Introduced a write_data method in CacheBlock to allow in-place block data updates.

  • Updated insert_one_block and immediate_write methods in BlockCache to accept slices instead of vectors, improving performance and memory usage.

  • Implemented error handling for block size validation in multiple locations to ensure data integrity.

  • Changed FileMapInfo::page_cache to Weak to fix memory leaks caused by reference cycles.

Page Cache Improvements (#_translated_label__1444_en, #_translated_label__1455_en)

  • Fixed page cache truncation during truncate operations, addressing boundary conditions.

  • Refactored page cache read/write operations to resolve deadlocks and improve error handling, splitting them into two phases to avoid holding locks during user page faults.

  • Improved filesystem page fault handling to return SIGBUS instead of panicking.

  • Optimized user buffer access checks in sys_read/sys_write.

  • Fixed alignment checks for mprotect parameters.

Memory Management Optimizations

Slab Allocator Fixes (#_translated_label__1464_en)

  • Added a remaining field to ObjectPageIterMut to prevent iterator out-of-bounds errors.

  • Changed SLABALLOCATOR to SpinLock protection to fix concurrent access issues.

  • Properly used locks in kernel_allocator to protect slab allocator operations.

Exception Table Safe Copy (#_translated_label__1395_en)

  • Modified the error handling return value for safe exception table copying.

Page Reclamation Optimization (#_translated_label__1455_en)

  • Optimized the page reclamation process to prevent deadlocks, splitting it into two phases to reduce the risk of long-held reclaimer locks and lower lock order inversion risks with page_manager/page_cache.

  • Updated shrink_list to handle victim page eviction without holding the reclaimer lock, ensuring safer memory management.

  • Improved drain_lru to efficiently retrieve victim pages for reclamation.

mmap Support Enhancements (#_translated_label__1455_en)

  • Implemented mmap methods for LockedZeroInode, LockedExt4Inode, LockedFATInode, and LockedRamFSInode to enable memory mapping operations.

  • Improved mmap error handling and validation, enhancing error responses for unsupported operations.

  • Added checks for MAP_PRIVATE and MAP_SHARED flags to ensure only one is set.

  • Implemented page alignment validation for MAP_FIXED.

  • Enhanced memory protection handling and validation, updating init_xd_rsvd to ensure NX support is enabled and hardware limitations are properly handled.

  • Improved alignment checks in sys_mprotect to prevent overflows and ensure proper memory region validation.

  • Enhanced offset checks and memory allocation logic in the mmap system call.

6. IPC and Pipes: Blocking Semantics and Race Fixes

FIFO Blocking Open Semantics (#_translated_label__1429_en)

  • Added open_wait_queue to LockedPipeInode for blocking waits during FIFO opens.

  • Implemented Linux FIFO blocking/non-blocking open semantics (O_RDONLY/O_WRONLY/O_RDWR).

  • Added helper methods has_reader/has_writer to check pipe status.

  • Updated test configurations to whitelist fifo_test.

Pipe Behavior Improvements (#_translated_label__1529_en, #_translated_label__1426_en)

  • Fixed and enhanced pipe behavior, introducing a new PipeFS and registering PIPEFS_MAGIC.

  • Expanded pipe buffers to 65536 bytes, supporting atomic writes.

  • Implemented named pipe (FIFO) support, allowing O_RDWR mode opens.

  • Improved fcntl’s F_SETFL implementation to only modify specific flag bits.

  • Fixed the error code for writing to read-only file descriptors to EBADF.

  • Automatically added O_LARGEFILE flag for named pipes.

  • Optimized pipe read/write logic to support circular writes and partial writes.

  • Fixed race conditions in blocking mode write-end wakeups: incremented writer count before waiting for readers in blocking mode to avoid races; immediately woke up waiting readers after incrementing writer count; rolled back writer count on signal interruptions; ensured correct reader wakeups in non-blocking mode.

  • Added ESPIPE error checks for pipes, sockets, and character devices in preadv/pwrite64/pwritev system calls.

  • Added F_GETPIPE_SZ and F_SETPIPE_SZ to the fcntl system call for querying pipe buffer sizes.

  • Optimized pipe close logic to avoid potential deadlocks.

  • Added file descriptor-related support in procfs, including magic links for /proc/self/fd/N and implementing FIONREAD for pipes.

  • Added /proc//fdinfo directory support and implemented dynamic pipe buffer adjustments.

7. Networking and Devices: Stability Improvements

Network Stack Optimizations

NapiManager Lock Mechanism (#_translated_label__1525_en)

  • Changed NapiManager’s lock mechanism to lock_irqsave.

  • Fixed potential deadlocks when calling napi_schedule in interrupt contexts.

UDP Socket Fixes (#_translated_label__1460_en)

  • Fixed UDP getsockname/getpeername system calls.

  • Added a test whitelist to support new available inet system calls.

TTY Driver Enhancements

TTY Driver and Device Management (#_translated_label__1462_en)

  • Updated TTY drivers to more effectively handle master and slave types during close operations, ensuring proper cleanup of /dev/pts device entries.

  • Improved control TTY detachment handling by adding support for the TIOCNOTTY command.

  • Refactored PTY device initialization to ensure correct metadata setup and device registration.

  • Added a symbolic link for /dev/ptmx pointing to the internal devpts node to prevent ENOENT errors during early access.

  • Improved PTY device management and cleanup logic, enhancing PtyDevPtsLink to more effectively manage PTY device lifecycles.

TTY Permission Checks (#_translated_label__1430_en)

  • Fixed TTY and session permission check logic via pty_root_test.

TTY Page Cache Support (#_translated_label__1428_en)

  • Implemented a page_cache method in TTY devices that returns None to indicate character devices do not require page caching.

  • Added handling for no-page-cache scenarios in page fault processing to avoid panics and return VM_FAULT_SIGBUS.

Asynchronous I/O Notification (#_translated_label__1425_en)

  • Implemented an asynchronous I/O notification mechanism and enhanced ioctl system calls.

Random Device Support (#_translated_label__1455_en)

  • Added a new random device module, random_dev, providing random byte generation capabilities.

  • Registered /dev/random in DevFS to ensure system access to random data.

8. Filesystem Implementations: ext4 and FAT Improvements

ext4 Filesystem (#_translated_label__1509_en)

  • Fixed spinlock deadlocks in ext4 inode read/write operations.

  • Added parent directory pointer support, implementing the parent() method.

  • Improved block device addressing logic, unifying the use of 512-byte LBA.

  • Enhanced root filesystem detection to support automatic identification of ext4 and FAT.

  • Fixed interpreter path lookup issues in the ELF loader.

  • Updated the another_ext4 dependency version.

  • Added probe methods for ext4 and FAT filesystems and optimized code, introducing new probe methods in Ext4FileSystem and FATFileSystem.

  • Refactored filesystem detection logic in vcore.rs to use new probe methods instead of standalone detection functions.

  • Optimized default value setting for the parent field in Ext4Inode constructors, using unwrap_or_default instead of unwrap_or_else.

  • Added PATH environment variable settings in the rcS startup script.

FAT Filesystem (#_translated_label__1454_en, #_translated_label__1491_en)

  • Updated directory link count management, adjusting counts to start from 2, considering self-references and parent directory links.

  • Updated logic for incrementing and decrementing link counts during directory creation and deletion.

  • Enhanced dynamic calculation of directory link counts in the VFS layer to ensure accuracy when metadata is unreliable.

  • Implemented SuperBlock fields required for FAT filesystem statfs (f_blocks, f_bfree, f_bavail, f_frsize).

  • Fixed overflow issues in FAT32 FSInfo free cluster count updates.

  • Provided a stable st_dev identifier for mount points.

Filesystem Statistics (#_translated_label__1491_en)

  • Improved filesystem statistics support for FAT and tmpfs.

  • Added a default capacity policy (half of physical memory) for tmpfs and synchronized SuperBlock statistics updates.

9. Wait Queue Refactoring: Introducing Waiter/Waker Pattern

Wait Queue Mechanism Refactoring (#_translated_label__1452_en)

  • Refactored WaitQueue to introduce the Waiter/Waker pattern to prevent wakeup losses.

  • Unified wait interfaces, providing wait_event_interruptible/uninterruptible methods.

  • Refactored modules like futex, epoll, eventfd, semaphore, and completion to use the new wait queue.

  • Optimized process waiting logic for child process exits using the new wait queue interface.

  • Added design documentation for the wait queue to explain the new mechanism.

  • Added a SKIP_GRUB option to support skipping GRUB installation in CI or headless environments.

Signal Handling Fixes (#_translated_label__1452_en)

  • Promptly refreshed the HAS_PENDING_SIGNAL state after consuming signals in sys_rt_sigtimedwait to avoid misjudgments in subsequent wait paths.

  • Changed the error code for interruptible futex wakeups from ERESTARTSYS to EINTR to align with Linux semantics.

10. Engineering Efficiency and CI: Automation and Toolchain Improvements

Nightly Build Workflow (#_translated_label__1469_en, #_translated_label__1471_en, #_translated_label__1472_en, #_translated_label__1473_en, #_translated_label__1474_en, #_translated_label__1475_en, #_translated_label__1476_en, #_translated_label__1477_en)

  • Added nightly build and release workflows.

  • Supported automated builds and releases, separating build and release steps.

  • Compressed build artifacts into tarballs and uploaded them for later use.

  • Modified Dockerfile to copy compressed artifacts instead of individual files, improving efficiency and organization.

  • Added steps to create a ‘bin’ directory in the nightly build workflow for better artifact organization.

  • Restored the HOME environment variable in the nightly build workflow to ensure proper build context.

  • Updated the nightly build workflow to conditionally run build and release jobs.

  • Added steps to checkout the DragonOS codebase in the nightly build workflow.

Build Container Upgrade (#_translated_label__1442_en)

  • Upgraded the build container version to v1.19.

  • Added –ci installation mode and APT_FLAG (–no-install-recommends) to bootstrap.sh.

  • Skipped grub/docs in CI, removed old RUST_VERSION_OLD installation steps.

  • Used –no-install-recommends in Dockerfile.

  • Adjusted build scripts and BUILD_CONTAINER_VERSION.

  • Updated DADK version to v0.5.1 and adjusted build scripts.

  • Updated Docker image sources in CI workflows.

  • Added linux-libc-dev-riscv64-cross to Ubuntu/Debian bootstrap installation lists for riscv64 cross-compilation libc headers.

  • Updated Docker image repository addresses in CI workflows.

CI Process Fixes

Test Status Fixes (#_translated_label__1403_en)

  • Fixed CI processes where tests failed but returned a success status.

gVisor Test Script Fixes (#_translated_label__1405_en)

  • Fixed scripts for automatically enabling/disabling gVisor syscall test case packaging.

Test Additions (#_translated_label__1458_en)

  • Added open_test.

Code Review Automation (#_translated_label__1435_en, #_translated_label__1436_en, #_translated_label__1437_en, #_translated_label__1438_en, #_translated_label__1440_en, #_translated_label__1445_en, #_translated_label__1446_en, #_translated_label__1447_en)

  • Added a Claude code review workflow.

  • Optimized code review processes and configurations.

  • Enabled progress tracking.

  • Expanded Claude parameters to support more tools.

  • Refactored prompt structures to clarify five key areas of code review.

  • Removed duplicate comment update instructions, simplifying workflow logic.

  • Explicitly used specific tools for inline comments and status updates.

  • Provided specific guidance for single-line and multi-line comments.

  • Simplified PR status summary requirements.

Development Container Support (#_translated_label__1449_en, #_translated_label__1457_en)

  • Added devcontainer support based on CNB images.

  • Set non-root users as the default devcontainer user.

  • Fixed devcontainer: changed the container user from ‘dragonos’ to ‘root’, then updated to use ‘dragonos’ as the default user.

  • Fixed CI: changed the source from the default image server to github.

11. Documentation and Community: Experience and Accessibility Improvements

DragonOS Playground (#_translated_label__1484_en)

  • Updated README and build documentation to include DragonOS Playground experiences.

  • Added cloud-native development experiences in README, providing a one-click launch link for the CNB platform.

  • Updated community news with Playground launch information.

  • Added a quick experience section at the beginning of build documentation, recommending the use of Playground.

Documentation Translation Updates (#_translated_label__1485_en, #_translated_label__1453_en, #_translated_label__1411_en, #_translated_label__1408_en, #_translated_label__1402_en, #_translated_label__1396_en)

  • Multiple rounds of documentation translation updates to enhance internationalization support.

User Environment Improvements

PS1 Environment Variable (#_translated_label__1432_en, #_translated_label__1422_en)

  • Corrected the PS1 environment variable to match bash default highlighting.

  • Used a colored PS1 to enhance user experience.

12. gVisor Testing: Continuous Compatibility Improvements

Test Case Expansions (#_translated_label__1524_en)

  • Removed the fifo_test blocklist file from gVisor tests.

  • Expanded test coverage to continuously improve Linux compatibility.

System Call Fixes

open System Call (#_translated_label__1417_en)

  • Adjusted error code types returned for readable and writable.

  • Fixed the following tests: OpenTest.OTrunc, OpenTest.OTruncAndReadOnlyDir, OpenTest.OCreateDirectory, OpenTest.MustCreateExisting, OpenTest.CreateWithAppend, OpenTest.AppendOnly, OpenTest.AppendConcurrentWrite, OpenTest.DirectoryWritableFails, OpenTest.DirectoryDirectFails, OpenTest.Null, OpenTest.CanTruncateReadOnly, OpenTest.OpenNonDirectoryWithTrailingSlash, OpenTest.OpenWithStrangeFlags.

  • Added a block for open_test.

utimensat/futimesat (#_translated_label__1431_en)

  • Fixed boundary cases for utimensat/futimesat system calls to ensure gVisor test compatibility.

pread64 (#_translated_label__1398_en)

  • Fixed compatibility and error handling for the pread64 system call.

  • Validated the offset parameter: returned EINVAL for negative offsets or overflows.

  • Validated the user buffer: used new_checked to ensure memory is mapped, correctly returning EFAULT.

  • Checked file types: returned ESPIPE for non-seekable files (e.g., pipes, sockets).

  • Fixed permission checks in File::readable().

  • Fixed multiple failures in the gVisor pread64 test suite.

sys_rename (#_translated_label__1393_en)

  • Fixed sys_rename logic and added support for RENAME_NOREPLACE.

getdents (#_translated_label__1397_en)

  • Fixed the getdents system call implementation.

Other Fixes

  • Fixed SIG derivation issues when writing partially readable buffers in syscall/vfs (#_translated_label__1375_en).

  • Fixed issues related to cputime, sys_rt_sigtimedwait, and sys_rt_sigreturn (#_translated_label__1406_en, #_translated_label__1394_en, #_translated_label__1400_en).

13. Other Improvements

Symbol Table Query Fixes (#_translated_label__1443_en)

  • Fixed symbol table query issues where the original logic would return index i when addr equals kallsyms_adress_list[i+1], but the correct index should be i+1.

  • Now uses binary search for symbols.

Cargo.lock Cleanup (#_translated_label__1530_en)

  • Fixed duplicate entries for the another_ext4 package in Cargo.lock.

  • Unified lockfile formats to avoid conflicts when different developers use different Cargo versions.

Known Concerns

  • The integration path of I/O multiplexing with signals is relatively complex. It is recommended to focus on regression testing of high-concurrency network services/event loop frameworks after upgrading to version 0.4.0.

  • Changes related to tmpfs and chroot involve filesystem mounting and path resolution. It is advised to verify behavior in containerized scenarios.

  • The refactored waiting queue mechanism involves concurrency control. Stability and performance under multi-threaded scenarios should be tested as a priority.

  • POSIX interval timers and CPU time statistics are new features. It is recommended to validate timer precision and performance overhead in practical applications.

  • Mount propagation is a new feature. Behavior of different propagation types should be verified in containerized scenarios.

Acknowledgments

Thank you to all community contributors who provided code, testing, documentation, and feedback for DragonOS 0.4.0!

This release includes 105 commits, covering improvements and fixes across multiple modules such as the kernel core, filesystem, process management, memory management, networking, device drivers, and engineering tools.

Key contributors (in order of commit time): LoGin, Vitus, kaleidoscope416, Samuel Dai, aLinChe, xboHodx, Yuming Jiang, kado, goldwind-ting, sparkzky, and others.

For the full list of contributors, please refer to the Contributors page on the GitHub repository.

References