Hello,

Milos Nikic, le jeu. 26 juin 2025 23:40:22 -0700, a ecrit:
> diff --git a/ext2fs/inode.c b/ext2fs/inode.c
> index dc309ac8..a3560630 100644
> --- a/ext2fs/inode.c
> +++ b/ext2fs/inode.c
>  /* these flags aren't actually defined by a header file yet, so temporarily
>     disable them if necessary.  */
> @@ -524,6 +525,8 @@ write_all_disknodes (void)
>  void
>  diskfs_write_disknode (struct node *np, int wait)
>  {
> +
> +  journal_log_metadata(np, &(struct journal_entry_info){ .action = "sync" });

Try to get used to the GNU coding style: there should be a space before
opening parentheses

>    struct ext2_inode *di = write_node (np);
>    if (di)
>      {

> diff --git a/libdiskfs/journal.c b/libdiskfs/journal.c
> new file mode 100644
> index 00000000..4c8681dc
> --- /dev/null
> +++ b/libdiskfs/journal.c
> @@ -0,0 +1,260 @@
> +/*

Note that you need to add a copyright header, and assign your copyright
to the FSF.

> + * journal.c - Experimental journaling layer for Hurd's ext2fs/libdiskfs
> + *
> + * This is a work-in-progress implementation of a toy journaling layer
> + * intended for exploration and learning purposes. It logs basic metadata
> + * about file changes into a shared in-memory buffer, which is periodically
> + * flushed to a file (/tmp/journal.log).
> + *
> + * Features:
> + *   - Logs inode metadata (mode, size, nlink, mtime, ctime, etc.)
> + *   - Each log entry is wrapped in a transaction with a unique ID and 
> timestamp
> + *   - Uses a fixed-size in-memory buffer with auto-flushing on overflow
> + *   - Timestamp includes millisecond precision
> + *   - Thread-safe using a mutex
> + *
> + * Missing / Not Implemented Yet:
> + *   - Write barriers or guarantees of ordering with actual FS operations
> + *   - Integration at a lower level to capture all metadata changes (not 
> just sync hooks)
> + *   - Actual recovery mechanisms or replays from the journal
> + *   - Logging of inode or block bitmap changes
> + *   - File name resolution (only available if passed manually)
> + *   - UID/GID or finer-grained permission changes
> + *   - Disk-backed circular journal buffer for continuous logging
> + *   - Atomicity guarantees across flush boundaries (currently only soft 
> protection)
> + *
> + * Warning:
> + *   This code is experimental and not suitable for production.
> + *   It is designed to support incremental development and learning.
> + *
> + * Author: Milos Nikic, 2025
> + */
> +#include <stdio.h>
> +#include <inttypes.h>
> +#include <time.h>
> +#include <string.h>
> +#include <errno.h>
> +#include <sys/stat.h>
> +#include <libdiskfs/journal.h>
> +#include <diskfs.h>
> +#include <sys/types.h>
> +#include <stdbool.h>
> +#include <stdint.h>
> +#include <sys/time.h>
> +#include <pthread.h>
> +
> +#define JOURNAL_DIR_PATH "/tmp"
> +#define JOURNAL_LOG_PATH JOURNAL_DIR_PATH "/journal.log"
> +#define JOURNAL_BUF_SIZE (64 * 1024) 
> +#define MAX_REASONABLE_TIME 4102444800  /* Jan 1, 2100 */
> +#define MIN_REASONABLE_TIME 946684800   /* Jan 1, 2000 */

Better take the current time plus / minus a lot of years, so it'll stay
a reasonable guess decades from now.

Samuel

Reply via email to