• Joel Becker's avatar
    ocfs2: Limit inode allocation to 32bits. · 1187c968
    Joel Becker authored
    ocfs2 inode numbers are block numbers.  For any filesystem with less
    than 2^32 blocks, this is not a problem.  However, when ocfs2 starts
    using JDB2, it will be able to support filesystems with more than 2^32
    blocks.  This would result in inode numbers higher than 2^32.
    
    The problem is that stat(2) can't handle those numbers on 32bit
    machines.  The simple solution is to have ocfs2 allocate all inodes
    below that boundary.
    
    The suballoc code is changed to honor an optional block limit.  Only the
    inode suballocator sets that limit - all other allocations stay unlimited.
    
    The biggest trick is to grow the inode suballocator beneath that limit.
    There's no point in allocating block groups that are above the limit,
    then rejecting their elements later on.  We want to prevent the inode
    allocator from ever having block groups above the limit.  This involves
    a little gyration with the local alloc code.  If the local alloc window
    is above the limit, it signals the caller to try the global bitmap but
    does not disable the local alloc file (which can be used for other
    allocations).
    
    [ Minor cleanup - removed an ML_NOTICE comment. --Mark ]
    Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
    Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
    1187c968
suballoc.c 53.1 KB