Dumbbell's home

ReiserFS for FreeBSD

ReiserFS is a journalised filesystem, made by Hans Reiser (namesys.com). It's available for Linux, since the 2.4.x series, but FreeBSD has no support for it.

Since July 10, 2004, I work on a port of ReiserFS for FreeBSD 5-CURRENT. The main goal is to achieve a read-only support for a ReiserFS 3.6 partition. No write support is scheduled for now.

Download

Known issues

To get a list of known issues of this module, see the Project status section.

Version en développement

A mush faster mirror is available at this address: http://dumbbell.nerim.net/

ReiserFS for FreeBSD, version 0.1.6 (Thursday April 14, 2005)

Locking update to be in sync with 6-CURRENT.

For FreeBSD 6-CURRENT only.

Files :

ReiserFS for FreeBSD, version 0.1.5 (Thursday April 07, 2005)

NFS export support.

For FreeBSD 6-CURRENT only.

Files :

ReiserFS for FreeBSD, version 0.1.4 (Tuesday April 05, 2005)

Update to reflect recent changes in VFS.

For FreeBSD 6-CURRENT only.

Files :

ReiserFS for FreeBSD, version 0.1.3 (Thursday February 10, 2005)

Compilation bugfix.

Files :

ReiserFS for FreeBSD, version 0.1.2 (Monday February 7, 2005)

FreeBSD 6-CURRENT support.

Changes :

  • Adapted to last changes of the VFS in 6-CURRENT
  • Improved mmap(2), now a real one, not a frontend to read(2)

Files :

ReiserFS for FreeBSD, version 0.1.1 (Monday October 18, 2004)

Bugfix release.

Changes :

  • Fixed several bugs leading to panic()

Files :

ReiserFS for FreeBSD, version 0.1.0 (Thursday August 26, 2004)

First public release.

What's new :

  • Read-only support
  • One can read files using both read(2) and mmap(2)
  • Symlink support
  • Inode cache

Files :

  • reiserfs_for_freebsd-0.1.0.tar.bz2 (MD5 sum) (PGP signature)
  • reiserfs_for_freebsd-0.1.0.tar.gz (MD5 sum) (PGP signature)

Installation

This module requires FreeBSD 5.x, and the kernel sources to compile it. It has been tested under FreeBSD 5.2.1-RELEASE, 5.2-CURRENT (several checkouts since the 5.2.1-RELEASE availability) and 6-CURRENT (dated August 23, 2004).

After the sources are uncompressed, you must run the usual make/make install:

freebsd# make
freebsd# make install

The kernel module reiserfs.ko ans the command mount_reiserfs will be compiled and installed. As it uses FreeBSD's Makefiles, you can add the same variable to change compile and install parameters.

It would be better to make a port for this.

Project status

The module is base on ReiserFS sources from Linux 2.6.7, the most up-to-date the day I started the project.

On August 26, 2004, read-only is almost complete. It still lacks:

Here is the project status grid, based on the list of functions to be implemented to have a read-only support:

VFS(9)
Funcion Description Status
VFS_INIT(9) Initialize the module, typically, prepare inode cache Done
VFS_MOUNT(9) Mount a partition into the given directory Done
VFS_ROOT(9) Return the struct vnode for the root node of the filesystem Done
VFS_STATFS(9) Read informations about the partition (fill a struct statfs) Done
VFS_VGET(9) Return a struct vnode base on a given inode number
VFS_CHECKEXP(9) Tell if the given mount point is exported
VFS_FHTOVP(9) Return a struct vnode corresponding to a given NFS handle
VFS_VPTOFH(9) Return a NFS handle correpsonding to a given struct vnode
VFS_UNMOUNT(9) Unmount a partition Done
VFS_UNINIT(9) Free module's resources, typically, delete the inode cache Done
Operation on struct vnode
Function Description Status
VOP_ACCESS(9) Check access rights for a given resource Done
VOP_PATHCONF(9) Give informations about file and directory names, etc. Done
VOP_GETATTR(9) Used by the stat(2) syscall Done
VOP_LOOKUP(9) Lookup a file/directory and return a struct vnode Done
VOP_OPEN(9) Open a file Done
VOP_READ(9) Read a file content Done
VOP_READDIR(9) Read the content of a directory (files and subdirs list) Done
VOP_READLINK(9) Read the link target Done
VOP_BMAP Convert a logical block number to a physical block number (for mmap(2)) Done
VOP_STRATEGY(9) Read a block, using its logical block number (for mmap(2)) Done
VOP_INACTIVE(9) Free an unsed vnode Done
VOP_RECLAIM(9) Recycle a vnode for another use Done