IBM's Journaled File System (JFS) for Linux beta 2 version 0.2.0
Team members
Steve Best       sbest@us.ibm.com
Dave Kleikamp    shaggy@us.ibm.com  
Ben Rafanello    benr@us.ibm.com
Barry Arndt      barndt@us.ibm.com


Release March 7, 2001 (beta 2 version 0.2.0)

This is our twenty-seventh release of IBM's Enterprise JFS technology port to Linux.
Beta 1 was release 0.1.0 on 12/8/2000 and Beta 2 is release 0.2.0 on 3/7/2001.
  
The first drop on February 2, 2000 (jfs-0.0.1.tar.gz) had the following 
functionality (enough to allow other developers to evaluate and potentially 
contribute to this project):

 - MKFS functional and able to format an existing or newly created partition for JFS.
 - mount/unmount functional
 - able to view the self(.) and parent (..) directories entries. 

The second drop on February 28, 2000 (jfs-0.0.2.tar.gz) had fixes for MKFS and the 
following utilities logredo, xchkdmp, xpeek are functional. The file system was able
to mkdir, create files and directories were working (and rm, rmdir). 

The third drop on March 24, 2000 (jfs-0.0.3.tar.gz) provided read and write capability 
for the file system. Also, support for hard and soft links are functional.  

The fourth drop on March 29,2000 (jfs-0.0.4.tar.gz) provided rename capability for 
the file system and fixes for write problems. 

The fifth drop on April 6, 2000 (jfs-0.0.5.tar.gz) provided mknod capability for the 
file system. 
                                                              
The sixth drop on April 21, 2000 (jfs-0.0.6.tar.gz) provided fixes for the file system
and utilities.

The seventh drop on May 11, 2000 (jfs-0.0.7.tar.gz) provided changes to the file system
to be able to work on the development kernel 2.3.99-pre6. Drop 7 contains fixes for the
file system to be built within the kernel. 

The eighth drop on June 20, 2000 (jfs-0.0.8.tar.gz) provided fixes for the file system 
and changes to the file system to be able to work on the development kernel 2.4.0-test1-ac21.
In the utility area: fsck and logdump are functional.

The ninth drop on July 13, 2000 (jfs-0.0.9.tar.gz) has the meta-data of the file system 
using the page cache. In the utility area: fixes for fsck.jfs and xpeek are included.

The tenth drop on August 11, 2000 <jfs-0.0.10.tar.gz> provided fixes for the file system
and changes to the file system to be able to work on the development kernel 2.4.0-test5.
In the utility area: fixes for fsck.jfs are included. The utility portion of extendfs has
been ported (still need to port the file system portion for extendfs). Man pages have
been written for the utilities. The compiler warnings have been removed from all of the
utilities.

The eleventh drop on September 1, 2000 <jfs-0.0.11.tar.gz> provided fixes for the file system
and changes to the file system to be able to work on the development kernel 2.4.0-test7.
The utility portion of defrag has been ported (still need to port the file system portion
for defrag). 

The twelfth drop on September 15, 2000 (jfs-0.0.12.tar.gz) provided the Transaction
Manager Log I/O routines.

The thirteenth drop on September 29, 2000 (jfs-0.0.13.tar.gz) provided case-sensitive
support. In the utility area: fsck.jfs has the support for block/character special files.
Note: The JFS partition must be formatted/reformatted using mkfs.jfs created by drop 13 
for case-sensitive to work.

The fourteenth drop on October 4, 2000 (jfs-0.0.14.tar.gz) included a fix to the file
system for not mounting a JFS partition if the size of the partition is > 4G on 2.2.x
series of the kernel.

The fifteenth drop on October 9, 2000 (jfs-0.0.15.tar.gz) included the Transaction
Manager routines (Initialize, Begin, Locks, End). The file system has fixes and
changes to the file system to be able to work on the development kernel 2.4.0-test9.
The utility xchklog has been ported.

The sixteenth drop on October 27, 2000 (jfs-0.0.16.tar.gz) included the Transaction
Manager routines (Commit, Buffer Management, Abort). The file system and utilities
have fixes included. 

The seventeenth drop on November 10, 2000 (jfs-0.0.17.tar.gz) has the transaction
sub operations back into the file system operations. The file system is now journaling
appropriate file system operations. The file system is temporary doing synchronous logging
(which slows down operations that are logged) to make sure that the transaction processing
is right. Asynchronous logging will be added shortly. The file system has fixes and changes 
to the file system to be able to work on the development kernel 2.4.0-test10.

The eighteenth drop on November 15, 2000 (jfs-0.0.18.tar.gz) included fixes to the file
system.

The nineteenth drop on December 4, 2000 (jfs-0.0.19.tar.gz) is now doing asynchronous
logging. The file system has fixes and changes to the file system to be able to work
on the development kernel 2.4.0-test11. 

The twentieth drop on December 8, 2000 (jfs-0.1.0.tar.gz beta) included fixes to the file
system.

The twenty-first drop on December 14, 2000 (jfs-0.1.1.tar.gz) included a fsck fix
to handle sparse files correctly. The file system has fixes and changes to the file
system to be able to work on the development kernel 2.4.0-test12 and 2.2.18 kernel.

The twenty-second drop on January 5, 2001 (jfs-0.1.2.tar.gz) included fixes to the 
file system. The file system has changes to able to work on the 2.4.0 kernel.

The twenty-third drop on January 12, 2001 (jfs-0.1.3.tar.gz) included fixes to the
file system. Fsck now supports fifo correctly.

The twenty-fourth drop on January 26, 2001 (jfs-0.1.4.tar.gz) included fixes to the
file system. The new feature in the file system is "Lazy Commit" which increases
performance while going asynchronous logging. The main makefile for the utilities
now has an install option. 

The twenty-fifth drop on February 7, 2001 (jfs-0.1.5.tar.gz) included fixes to the
file system. 

The twenty-sixth drop on February 26, 2001 (jfs-0.1.6.tar.gz) included fixes to the
file system. The log manager no longer uses the page cache for log pages, this 
eliminates dead-locks that were occurring in the log manager. The file system has
general work done to remove SMP dead-lock problems. Fsck now supports default values
passed by fstab correctly.

The twenty-seventh drop on March 07, 2001 (beta 2) (jfs-0.2.0.tar.gz) includes fixes to the
file system. This drop contains jfsprogs.spec that can be used to create RPM for the
JFS utilities. The file system has general work done to remove SMP and UP hang related problems.
The file system performance has been increased by changes to extent inode cache.  
 
Drop 27 has the temporary restriction that the block size must be 4K. MKFS.jfs defaults
the block size to 4K.
JFS has a common source tree that can be built on 2.2.12 - 2.2.18 and 2.4.0 - 2.4.2.

We will continue with the port and make incremental drops as we have more function 
working. 

There is a anonymous cvs access available for the JFS tree. The steps below are
what is needed to pull the JFS cvs tree from the oss.software.ibm.com server.

id anoncvs
password anoncvs

CVSROOT should be set to :pserver:anoncvs@oss.software.ibm.com:/usr/cvs/jfs
cvs checkout linux-2.2.12


The reference source code is available in the fs/jfs/ref and fs/jfs/ref_utils sub 
directories. The header files for the reference source code are available in the
include/linux/jfs/ref. The reference source code is now available in the jfsref.tar.gz
file. The code included in the define statement, #ifdef _STILL_TO_PORT, indicates 
the source has not been ported yet.

The following files in the kernel source tree have been changed so JFS can be built.
The source tar ball now contains each of the files below with the extension of the 
kernel level it is associated with. As an example, there are now four Config.in files
named Config.in-2.2.14, Config.in-2.2.16, Config.in-2.2.18 and Config.in-2.4.0. 
If you use the tar ball to build JFS you must rename each of the kernel files to the 
file names listed below. The standard kernel from www.kernel.org is the source of the 
kernel files that are included in the jfs tar files. 

In sub dir fs Config.in, Makefile, filesystem.c
In sub dir fs/nls Config.in
In sub dir arch/i386 defconfig
In sub dir Documentation Configure.help
In sub dir Documentation/filesystems 00-INDEX
In sub dir include/linux fs.h
In sub dir linux MAINTAINERS
In sub dir linux/kernel/ksyms.c

Please backup the above files before the JFS patch file is added to the kernel source 
tree. There are three new header files in the sub dir include/linux named jfs_fs.h,
jfs_fs_i.h,and jfs_fs_sb.h. All other JFS files are located in the include/linux/jfs
or fs/jfs sub dirs.

Our development team has used the Linux kernel levels 2.2.12-2.2.18 and 
2.4.0 - 2.4.2 kernels with gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) 
for our port so far. 

To make JFS build, during the "make config" step of building the kernel answer y to
the Prompt for development and/or incomplete code/drivers in the Code maturity level
options section. In the Filesystems section use the m for the answer to 
JFS filesystem support (experimental) (CONFIG_JFS_FS) [Y/m/n?]

Note: If you are use JFS on the 2.2.x series of the kernel you must rebuild the kernel
and run that rebuilt kernel for JFS to build/run. The reason for this change is that
JFS needs to export symbols for the page cache support that was added for drop 9.
The page cache symbols have been included in the 2.2.18 kernel, so if you are using this
level of the kernel, you don't have to rebuild the kernel to use JFS.

Build in /usr/src/linux with the command:


make modules
make modules_install

If you rebuild jfs.o after having mounted and unmounted a partition, "modprobe -r jfs" 
will unload the old module.

For the file system debugging messages are being written to /var/log/messages.

To use the jfsprogs.spec located in sub dir linux/fs/jfs/utils/SPECS you need to update
the version of JFS in the spec file, also the corresponding jfs-x.x.x-patch.tar.gz file
must be in the SOURCES directory of your system. Now it's time to begin the build. First,
change into the directory holding jfsprogs.spec file:

cd /usr/src/linux/fs/jfs/SPECS

Next, start the build with a rpm -b command:

rpm -ba jfsprogs.spec

The a following the -b option directs RPM to perform all phases of the build process.


The second way to build the utilities for JFS (mkfs, xpeek, logredo, xchkdmp, fsck, logdump, xchklog). 

Build in /usr/src/linux/fs/jfs/utils with the command:

make
make install

One of results of this build is a program called mkfs.jfs. 
To format a JFS partition use the following command.

     mkfs -t jfs device-name

will result in the specified device being formatted.



******************************************************************************************
**                                                                                      **
********** Like all new file systems please only use this code on a test system. *********
**                                                                                      **
**                                                                                      **
******************************************************************************************


If you used any previous release of JFS, please format your JFS partition with the new 
mkfs.jfs.


JFS today:

  
- Utilities:
  Function in drop 1
   - MKFS.JFS builds on 2.2.12
   - MKFS successfully formats a new partition for JFS
   
  Function and Fixes in drop 2
   - MKFS supports all parameters now
   - MKFS has fixes from release pre-alpha 0.0.1
          mkfs.jfs results in segmentation fault if no arguments are specified
          mkfs.jfs hangs on invocation
    
   - XPEEK, utility to PEEK and POKE JFS on-disk data/structures
   
  Function and Fixes in drop 5
   - MKFS.jfs has a fix to support -l option correctly. 
   
  Function and Fixes in drop 6
   - libfs has compiler warning fixes and a bug fix 
   
  Function in drop 8
   - fsck.jfs successfully checks and repairs a jfs partition
   - logdump, utility that dumps the contents of the journal log. 
   
  Function and Fixes in drop 9
   - fixes for fsck.jfs and xpeek have been done. 

  Function and Fixes in drop 10
   - fixes for fsck.jfs 
   - man pages for utilities 
   - extendfs utility part has been ported (still need to port FS portion)
   - compiler warnings have been removed.
   
  Function and Fixes in drop 11
   - defrag utility part has been ported (still need to port FS portion)
   
  Function and Fixes in drop 13
   - fsck.jfs supports block special files and character special files (Jitterbug problem #28)
   
  Function and Fixes in drop 15
   - ported xchklog utility, extracts a log from fsck.
   
  Function and Fixes in drop 16
   - fixes for fsck.jfs to handle case-sensitive support correctly (Jitterbug problem #36)
   - cleanup changes for the utilities

  Function and Fixes in drop 18
   - cleanup changes for the utilities
   
  Function and Fixes in drop 21
   - fix in fsck to handle sparse files correctly
   
  Function and Fixes in drop 23
   - fix in fsck to handle fifo correctly
   
  Function and Fixes in drop 24
   - man pages updates for the utilities
   - install option for utilities
   
  Function and Fixes in drop 26
   - man page updates for fsck
   - fsck now supports default options passed by fstab correctly
    
  Function and Fixes in drop 27
   - new jfsprogs.spec file
   - fix in fsck for hard links
   - fix for unicode conversion problem


   
- JFS:
  Function in drop 1   
   - builds on 2.2.12 
   - successfully MOUNTs & UMOUNTs
   - limited READ capability (i.e. LS is operational)
   - other system commands (i.e. DF, CHOWN, CHMOD, etc. working limited)
   
  Function and Fixes in drop 2
     - Write capabilities are operational
      - MKDIR
      - CREATE file
      - RMDIR
      - RM
     - Problems fixed from release pre-alpha 0.0.1
       using 2.2.14 jfs_imap.c:3004: `event' undeclared (first use in this function)
      
  Function and Fixes in drop 3
   - WRITE a file
   - READ a file 
   - Support for hard and soft links
   
  Function and Fixes in drop 4
   - MV
   - Executables can now be started from a jfs partition
   - Problems while writing files have been fixed

  Function and Fixes in drop 5
   - added support for special files (mknod)
   - alpha changes have been included

  Function and Fixes in drop 6
   - Jitterbug problem 9 du output is incorrect on jfs
   - Jitterbug problem 11 unresolved symbol jfs_rwlock_lock on SMP build
   
  Function and Fixes in drop 7
   - moved JFS upto the 2.3.x development kernel (2.3.99-pre6)
   - Jitterbug problem 14 can't build JFS within the kernel 

  Function and Fixes in drop 8
   - moved JFS upto the 2.4.0 development kernel (2.4.0-test1-ac21)
   - Jitterbug problem 17 undefined: jfs_rdwrlock_lock
   - PowerPC build problem
 
  Function and Fixes in drop 9
   - moved JFS upto the 2.4.0 development kernel (2.4.0-test3)
   - moved meta-data from buffer cache to page cache
   - fixes for the file system are included
   
  Function and Fixes in drop 10
   - moved JFS upto the 2.4.0 development kernel (2.4.0-test5)
   - fixes for the file system are included 
   
  Function and Fixes in drop 11
   - moved JFS upto the 2.4.0 development kernel (2.4.0-test7)
   - fixes for the file system are included
   - start of journaling code has been included (jfs_txnmgr.h)
   - WIP of log manager (jfs_logmgr.c) 

  Function and Fixes in drop 12
   - Transaction Manager Log I/O -> Write log records is functional
   
  Function and Fixes in drop 13
   - case-sensitive support has been added
   
  Function and Fixes in drop 14
   - JFS mount error 22 is fixed (Jitterbug problem #30)

  Function and Fixes in drop 15
   - Following Transaction Manager routines are functional
            Initialize        -> Initialize transaction manager
            Begin             -> Start a transaction
            Locks             -> Acquire/release locks
            End               -> End a transaction
   - moved JFS upto the 2.4.0 development kernel (2.4.0-test9)
   - Fixed 2.2.x series block write problem.
   
Function and Fixes in drop 16
   - Following Transaction Manager routines are functional
         Commit            -> Commit the transaction
         Buffer Management -> Update inode, directory, extent
         Abort             -> Stop the commit from occurring
   - File System build problem on 2.2.x series of the kernel (Jitterbug #35)
   - Fixed case-sensitive bug in the filesystem (Jitterbug #36)
   

Function and Fixes in drop 17
   - Added transaction sub operations back into the file system operations.
   - The file system is now journaling appropriate file system operations.
   - moved JFS upto the 2.4.0 development kernel (2.4.0-test10)    
   
Function and Fixes in drop 18
   - symlink fix
   - inode corruption problem
   
Function and Fixes in drop 19
   - Added asynchronous logging support back into the file system.
   - moved JFS upto the 2.4.0 development kernel (2.4.0-test11) 
   - Fixes to transaction related hang problems.  

Function and Fixes in drop 20
   - Fix to remove memory on module cleanup

Function and Fixes in drop 21
   - Fix so fsck doesn't report the message 
     Secondary file/directory allocation structure(2) is not a correct redundant copy of primary structure.
   - Fix for setup of finish_aync_io
   - moved JFS upto the 2.4.0 development kernel (2.4.0-test12) 
   - moved JFS upto the 2.2.18 kernel 
          
Function and Fixes in drop 22

   - moved JFS upto the 2.4.0 kernel
   - Fix to do transaction processing for mknod correctly
   - Fix for spinlock.h needed on 2.2.18 ppc
   
Function and Fixes in drop 23
   - Fix for undefined BUG() in 2.2.x series
   - Fix for 2.2 kernels, struct pipe_inode_info overlays the file system dependent portion of the inode structure. 
    
Function and Fixes in drop 24
   - rmmod jfs fix
   - Implemented "Lazy Commit" - asynchronous logging enhancement to increase performance
   - Removed ino_t from on-disk structures (fixes a mount problem) 

Function and Fixes in drop 25  
   - Fix for deadlocks by putting IWRITE_LOCK/UNLOCK within jfs_delete_inode
   - Fix to handle removing a link to an inode that isn't the last link.
   - Fixes to general transaction processing SMP related hangs.

Function and Fixes in drop 26  
   - Fix for file writes on 2.2.x series of the kernel 
   - Change to log pages, so they no longer use the page cache.
   - Fixes to general transaction processing SMP related dead-lock problems

Function and Fixes in drop 27  
   - Report error on read_metapage failure in jfs_readlink
   - Report correct error in jfs_lookup if VFS fails to locate the inode
   - Fix for a buffer overrun problem in jfs_readlink when compiled for linux-2.2
   - Fix to support fsync call correctly (jitterbug #57)
   - Fixes to general SMP related dead-lock problems
   - Fix to define BUG() if 2.2 and !i386
   - Fixes to general UP related hangs
   - Changes to handling the inode extent cache increase the performance of the file system
   
   
JFS TODO list:

- JFS:
   - add endian support for non-Intel platforms
   - fix jitterbug 10 rm -rf fails on a big directory
   - add support for block sizes (512,1024,2048)
   - get EXTENDFS capabilities operational
   - get defrag capabilities operational
   - Test booting from JFS partition
 
  
   - Integrate with LVM
   - Integrate with SnapFS Snapshot file system
   - add support to shrink the file system
   - add support for logfile on dedicated partition
   - get access control list functionality operational

    
- Utilities:

   - test EXTENDFS utility, for growing JFS partitions
   - test defrag utility, calls file system to defragment the file system.
  


Please send bugs, comments, cards and letters to linuxjfs@us.ibm.com.

The JFS mailing list can be subscribed to by using the link labeled "Mail list Subscribe"
at our web page http://oss.software.ibm.com/developerworks/opensource/jfs/.
