06 Feb, 2007

1 commit

  • The patch below appears to fix the list corruption that we are seeing on
    occasion. Although the transaction structure is private to a single
    thread, when the queued structures are dismantled during an in-core
    commit, its possible for a different thread to be trying to add the same
    structure to another, new, transaction at the same time.

    To avoid this, this patch takes the log spinlock during this operation.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

30 Nov, 2006

2 commits


13 Oct, 2006

1 commit


25 Sep, 2006

1 commit


22 Sep, 2006

1 commit

  • Fix a bug in the directory reading code, where we might have dereferenced
    a NULL pointer in case of OOM. Updated the directory code to use the new
    & improved version of gfs2_meta_ra() which now returns the first block
    that was being read. Previously it was releasing it requiring following
    code to grab the block again at each point it was called.

    Also turned off readahead on directory lookups since we are reading a
    hash table, and therefore reading the entries in order is very
    unlikely. Readahead is still used for all other calls to the
    directory reading function (e.g. when growing the hash table).

    Removed the DIO_START constant. Everywhere this was used, it was
    used to unconditionally start i/o aside from a couple of places, so
    I've removed it and made the couple of exceptions to this rule into
    separate functions.

    Also hunted through the other DIO flags and removed them as arguments
    from functions which were always called with the same combination of
    arguments.

    Updated gfs2_meta_indirect_buffer to be a bit more efficient and
    hopefully also be a bit easier to read.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

19 Sep, 2006

1 commit

  • lm_interface.h has a few out of the tree clients such as GFS1
    and userland tools.

    Right now, these clients keeps a copy of the file in their build tree
    that can go out of sync.

    Move lm_interface.h to include/linux, export it to userland and
    clean up fs/gfs2 to use the new location.

    Signed-off-by: Fabio M. Di Nitto
    Signed-off-by: Steven Whitehouse

    Fabio Massimo Di Nitto
     

06 Sep, 2006

1 commit


05 Sep, 2006

3 commits


01 Sep, 2006

2 commits

  • As per comments from Jan Engelhardt this
    updates the copyright message to say "version" in full rather than
    "v.2". Also incore.h has been updated to remove forward structure
    declarations which are not required.

    The gfs2_quota_lvb structure has now had endianess annotations added
    to it. Also quota.c has been updated so that we now store the
    lvb data locally in endian independant format to avoid needing
    a structure in host endianess too. As a result the endianess
    conversions are done as required at various points and thus the
    conversion routines in lvb.[ch] are no longer required. I've
    moved the one remaining constant in lvb.h thats used into lm.h
    and removed the unused lvb.[ch].

    I have not changed the HIF_ constants. That is left to a later patch
    which I hope will unify the gh_flags and gh_iflags fields of the
    struct gfs2_holder.

    Cc: Jan Engelhardt
    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This patch fixes three main bugs. Firstly the direct i/o get_block
    was returning the wrong return code in certain cases. Secondly, the
    GFS2's releasepage function was not dealing with cases when clean,
    ordered buffers were found still queued on a transaction (which can
    happen depending on the ordering of journal flushes). Thirdly, the
    journaling code itself needed altering to take account of the
    after effects of removing the clean ordered buffers from the transactions
    before a journal flush.

    The releasepage bug did also show up under "normal" buffered i/o
    as well, so its not just a fix for direct i/o. In fact its not
    normally used in the direct i/o path at all, except when flushing
    existing buffers after performing a direct i/o write, but that was
    the code path that led us to spot this.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

23 Aug, 2006

1 commit


22 Aug, 2006

1 commit


19 Aug, 2006

1 commit

  • This fixes a memory leak of struct gfs2_bufdata and also some
    problems in the ordered write handling code. It needs a bit
    more testing, but I believe that the reference counting of
    ordered write buffers should now be correct.

    This is aimed at fixing Red Hat bugzilla: #201028 and #201082

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

19 Jun, 2006

2 commits


15 Jun, 2006

1 commit

  • This patch fixes the way we have been dealing with unlinked,
    but still open files. It removes all limits (other than memory
    for inodes, as per every other filesystem) on numbers of these
    which we can support on GFS2. It also means that (like other
    fs) its the responsibility of the last process to close the file
    to deallocate the storage, rather than the person who did the
    unlinking. Note that with GFS2, those two events might take place
    on different nodes.

    Also there are a number of other changes:

    o We use the Linux inode subsystem as it was intended to be
    used, wrt allocating GFS2 inodes
    o The Linux inode cache is now the point which we use for
    local enforcement of only holding one copy of the inode in
    core at once (previous to this we used the glock layer).
    o We no longer use the unlinked "special" file. We just ignore it
    completely. This makes unlinking more efficient.
    o We now use the 4th block allocation state. The previously unused
    state is used to track unlinked but still open inodes.
    o gfs2_inoded is no longer needed
    o Several fields are now no longer needed (and removed) from the in
    core struct gfs2_inode
    o Several fields are no longer needed (and removed) from the in core
    superblock

    There are a number of future possible optimisations and clean ups
    which have been made possible by this patch.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

19 May, 2006

2 commits


07 Apr, 2006

1 commit

  • This fixes a ref count bug that sometimes showed up a umount time
    (causing it to hang) but it otherwise mostly harmless. At the same
    time there are some clean ups including making the log operations
    structures const, moving a memory allocation so that its not done
    in the fast path of checking to see if there is an outstanding
    transaction related to a particular glock.

    Removes the sd_log_wrap varaible which was updated, but never actually
    used anywhere. Updates the gfs2 ioctl() to run without the kernel lock
    (which it never needed anyway). Removes the "invalidate inodes" loop
    from GFS2's put_super routine. This is done in kill super anyway so
    we don't need to do it here. The loop was also bogus in that if there
    are any inodes "stuck" at this point its a bug and we need to know
    about it rather than hide it by hanging forever.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

31 Mar, 2006

1 commit


02 Mar, 2006

1 commit

  • Fix a bug I introduced earlier with a kfree() and usage of
    a structure in the wrong order. Also try and get the counts
    of the journaled data buffers "more correct". Still some work
    to do in this area though.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

28 Feb, 2006

2 commits

  • As suggested by Pekka Enberg .

    The DIV_RU macro is renamed DIV_ROUND_UP and and moved to kernel.h
    The other macros are gone from gfs2.h as (although not requested
    by Pekka Enberg) are a number of included header file which are now
    included individually. The inode number comparison function is
    now an inline function.

    The DT2IF and IF2DT may be addressed in a future patch.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Requested by:
    Prarit Bhargava

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

23 Feb, 2006

1 commit


22 Feb, 2006

1 commit

  • Heinz had spotted that I'd forgotten to test in databuf_lo_add()
    that the data buffer in question hadn't already been added to
    the list. This was causing an infinite loop later on in the
    "before commit" routine.

    This means that GFS2 is now ready to be tested by everybody.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

21 Feb, 2006

1 commit


13 Feb, 2006

1 commit

  • Umount is now working correctly again. The bug was due to
    not getting an extra ref count when mounting the fs. We
    should have bumped it by two (once for the internal pointer
    to the root inode from the super block and once for the
    inode hanging off the dcache entry for root).

    Also this patch tidys up the code dealing with looking up
    and creating inodes. We now pass Linux inodes (with gfs2_inodes
    attached) rather than the other way around and this reduces code
    duplication in various places.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

08 Feb, 2006

1 commit

  • This is a very large patch, with a few still to be resolved issues
    so you might want to check out the previous head of the tree since
    this is known to be unstable. Fixes for the various bugs will be
    forthcoming shortly.

    This patch removes the special data format which has been used
    up till now for journaled data files. Directories still retain the
    old format so that they will remain on disk compatible with earlier
    releases. As a result you can now do the following with journaled
    data files:

    1) mmap them
    2) export them over NFS
    3) convert to/from normal files whenever you want to (the zero length
    restriction is gone)

    In addition the level at which GFS' locking is done has changed for all
    files (since they all now use the page cache) such that the locking is
    done at the page cache level rather than the level of the fs operations.
    This should mean that things like loopback mounts and other things which
    touch the page cache directly should now work.

    Current known issues:

    1. There is a lock mode inversion problem related to the resource
    group hold function which needs to be resolved.
    2. Any significant amount of I/O causes an oops with an offset of hex 320
    (NULL pointer dereference) which appears to be related to a journaled data
    buffer appearing on a list where it shouldn't be.
    3. Direct I/O writes are disabled for the time being (will reappear later)
    4. There is probably a deadlock between the page lock and GFS' locks under
    certain combinations of mmap and fs operation I/O.
    5. Issue relating to ref counting on internally used inodes causes a hang
    on umount (discovered before this patch, and not fixed by it)
    6. One part of the directory metadata is different from GFS1 and will need
    to be resolved before next release.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

18 Jan, 2006

2 commits

  • Since we'll need to pin data if we are going to journal it, then
    I'm renaming this function to make it less confusing. It might also
    be worth moving it into lops.c since there are no users outside that
    file.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Removing the gfs2_databuf structure and using gfs2_bufdata instead
    is a step towards allowing journaling of data without requiring the
    metadata header on each journaled block. The idea is to merge the
    code paths for ordered data with that of journaled data, with the
    log operations in lops.c tacking account of the different types of
    buffers as they are presented to it. Largely the code path for
    metadata will be similar too, but obviously through a different set
    of log operations.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

17 Jan, 2006

1 commit