• Paul Serice's avatar
    [PATCH] iso9660: fix handling of inodes beyond 4GB · 9210c204
    Paul Serice authored
    This is my fourth attempt to patch the isofs code.  It is similar to the last
    posting except this one implements the NFS get_parent() method which has
    always been missing.
    
    The original problem I set out to addresses is that the current iso9660 file
    system cannot reach inodes located beyond the 4GB barrier.  This is caused by
    using the inode number as the byte offset of the inode data.  Being 32-bits
    wide, the inode number is unable to reach inode data that does not reside on
    the first 4GB of the file system.
    
    This causes real problems with "growisofs"
    
          http://fy.chalmers.se/~appro/linux/DVD+RW/#isofs4gb
    
    and my pet project "shunt"
    
          http://www.serice.net/shunt/
    
    This patch switches the isofs code from iget() to iget5_locked() which allows
    extra data to be passed into isofs_read_inode() so that inode data anywhere on
    the disk can be reached.
    
    The inode number scheme was also changed.  Continuing to use the byte offset
    would have resulted in non-unique inodes in many common situations, but
    because the inode number no longer plays any role in reading the meta-data off
    the disk, I was free to set the inode number to some unique characteristic of
    the file.  I have chosen to use the block offset which is also 32-bits wide.
    
    Lastly, the pre-patch code uses the default export_operations to handle
    accessing the file system through NFS.  The problem with this is that the
    default NFS operations assume that iget() works which is no longer the case
    because of the necessity of switching to iget5_locked().  So, I had to
    implement the NFS operations too.  As a bonus, I went ahead and implemented
    the NFS get_parent() method which has always been missing.
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    9210c204
Makefile 272 Bytes