19 Jan, 2009

1 commit


10 Nov, 2008

1 commit

  • When we create a directory, we reserve a number of blocks for the maximum
    possible expansion of of the directory due to various btree splits,
    freespace allocation, etc. Unfortunately, each allocation is not reflected
    in the total number of blocks still available to the transaction, so the
    maximal reservation is used over and over again.

    This leads to problems where an allocation group has only enough blocks
    for *some* of the allocations required for the directory modification.
    After the first N allocations, the remaining blocks in the allocation
    group drops below the total reservation, and subsequent allocations fail
    because the allocator will not allow the allocation to proceed if the AG
    does not have the enough blocks available for the entire allocation total.

    This results in an ENOSPC occurring after an allocation has already
    occurred. This results in aborting the directory operation (leaving the
    directory in an inconsistent state) and cancelling a dirty transaction,
    which results in a filesystem shutdown.

    Avoid the problem by reflecting the number of blocks allocated in any
    directory expansion in the total number of blocks available to the
    modification in progress. This prevents a directory modification from
    being aborted part way through with an ENOSPC.

    SGI-PV: 988144

    SGI-Modid: xfs-linux-melb:xfs-kern:32340a

    Signed-off-by: David Chinner
    Signed-off-by: Lachlan McIlroy

    David Chinner
     

28 Jul, 2008

4 commits

  • Currently the xfs module init/exit code is a mess. It's farmed out over a
    lot of function with very little error checking. This patch makes sure we
    propagate all initialization failures properly and clean up after them.
    Various runtime initializations are replaced with compile-time
    initializations where possible to make this easier. The exit path is
    similarly consolidated.

    There's now split out function to create/destroy the kmem zones and
    alloc/free the trace buffers. I've also changed the ktrace allocations to
    KM_MAYFAIL and handled errors resulting from that.

    And yes, we really should replace the XFS_*_TRACE ifdefs with a single
    XFS_TRACE..

    SGI-PV: 976035

    SGI-Modid: xfs-linux-melb:xfs-kern:31354a

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Niv Sardi
    Signed-off-by: Lachlan McIlroy

    Christoph Hellwig
     
  • The end of the xfs_da_args structure has 4 unsigned char fields for
    true/false information on directory and attr operations using the
    xfs_da_args structure.

    The following converts these 4 into a op_flags field that uses the first 4
    bits for these fields and allows expansion for future operation
    information (eg. case-insensitive lookup request).

    SGI-PV: 981520
    SGI-Modid: xfs-linux-melb:xfs-kern:31206a

    Signed-off-by: Barry Naujok
    Signed-off-by: Christoph Hellwig

    Barry Naujok
     
  • Adds two pieces of functionality for the basis of case-insensitive support
    in XFS:

    1. A comparison result enumerated type: xfs_dacmp. It represents an

    exact match, case-insensitive match or no match at all. This patch

    only implements different and exact results.

    2. xfs_nameops vector for specifying how to perform the hash generation

    of filenames and comparision methods. In this patch the hash vector

    points to the existing xfs_da_hashname function and the comparison

    method does a length compare, and if the same, does a memcmp and

    return the xfs_dacmp result.

    All filename functions that use the hash (create, lookup remove, rename,
    etc) now use the xfs_nameops.hashname function and all directory lookup
    functions also use the xfs_nameops.compname function.

    The lookup functions also handle case-insensitive results even though the
    default comparison function cannot return that. And important aspect of
    the lookup functions is that an exact match always has precedence over a
    case-insensitive. So while a case-insensitive match is found, we have to
    keep looking just in case there is an exact match. In the meantime, the
    info for the first case-insensitive match is retained if no exact match is
    found.

    SGI-PV: 981519
    SGI-Modid: xfs-linux-melb:xfs-kern:31205a

    Signed-off-by: Barry Naujok
    Signed-off-by: Christoph Hellwig

    Barry Naujok
     
  • kmem_free() function takes (ptr, size) arguments but doesn't actually use
    second one.

    This patch removes size argument from all callsites.

    SGI-PV: 981498
    SGI-Modid: xfs-linux-melb:xfs-kern:31050a

    Signed-off-by: Denys Vlasenko
    Signed-off-by: David Chinner
    Signed-off-by: Lachlan McIlroy

    Denys Vlasenko
     

14 Feb, 2008

1 commit


07 Feb, 2008

1 commit

  • Un-obfuscate dabuf_global_lock, remove mutex_lock->spin_lock macros, call
    spin_lock directly, remove extraneous cookie holdover from old xfs code,
    and change lock type to spinlock_t.

    SGI-PV: 970382
    SGI-Modid: xfs-linux-melb:xfs-kern:29744a

    Signed-off-by: Eric Sandeen
    Signed-off-by: Donald Douwsma
    Signed-off-by: Tim Shimmin

    Eric Sandeen
     

05 Sep, 2007

1 commit

  • - in xfs_probe_cluster rename the inner len to pg_len. There's no harm
    here because the outer len isn't used after the inner len comes into
    existence but it keeps the code clean.
    - in xfs_da_do_buf remove the inner i because they don't overlap
    and they are both the same type.

    SGI-PV: 968555
    SGI-Modid: xfs-linux-melb:xfs-kern:29311a

    Signed-off-by: Christoph Hellwig
    Signed-off-by: David Chinner
    Signed-off-by: Tim Shimmin

    Christoph Hellwig
     

10 Feb, 2007

2 commits


28 Sep, 2006

1 commit


20 Jun, 2006

1 commit


09 Jun, 2006

3 commits


29 Mar, 2006

1 commit


17 Mar, 2006

7 commits