12 Jan, 2007

1 commit

  • Revert bd_mount_mutex back to a semaphore so that xfs_freeze -f /mnt/newtest;
    xfs_freeze -u /mnt/newtest works safely and doesn't produce lockdep warnings.

    (XFS unlocks the semaphore from a different task, by design. The mutex
    code warns about this)

    Signed-off-by: Dave Chinner
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Chinner
     

16 Dec, 2006

1 commit

  • Here is a patch to fix up the Kconfig so that we don't land up with
    problems when people disable the NET subsystem. Thanks for all the hints and
    suggestions that people have sent me regarding this.

    Signed-off-by: Steven Whitehouse
    Cc: Aleksandr Koltsoff
    Cc: Toralf Förster
    Cc: Randy Dunlap
    Cc: Adrian Bunk
    Cc: Chris Zubrzycki
    Cc: Patrick Caulfield

    Steven Whitehouse
     

09 Dec, 2006

1 commit


08 Dec, 2006

2 commits

  • * master.kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw: (73 commits)
    [DLM] Clean up lowcomms
    [GFS2] Change gfs2_fsync() to use write_inode_now()
    [GFS2] Fix indent in recovery.c
    [GFS2] Don't flush everything on fdatasync
    [GFS2] Add a comment about reading the super block
    [GFS2] Mount problem with the GFS2 code
    [GFS2] Remove gfs2_check_acl()
    [DLM] fix format warnings in rcom.c and recoverd.c
    [GFS2] lock function parameter
    [DLM] don't accept replies to old recovery messages
    [DLM] fix size of STATUS_REPLY message
    [GFS2] fs/gfs2/log.c:log_bmap() fix printk format warning
    [DLM] fix add_requestqueue checking nodes list
    [GFS2] Fix recursive locking in gfs2_getattr
    [GFS2] Fix recursive locking in gfs2_permission
    [GFS2] Reduce number of arguments to meta_io.c:getbuf()
    [GFS2] Move gfs2_meta_syncfs() into log.c
    [GFS2] Fix journal flush problem
    [GFS2] mark_inode_dirty after write to stuffed file
    [GFS2] Fix glock ordering on inode creation
    ...

    Linus Torvalds
     
  • Replace all uses of kmem_cache_t with struct kmem_cache.

    The patch was generated using the following script:

    #!/bin/sh
    #
    # Replace one string by another in all the kernel sources.
    #

    set -e

    for file in `find * -name "*.c" -o -name "*.h"|xargs grep -l $1`; do
    quilt add $file
    sed -e "1,\$s/$1/$2/g" $file >/tmp/$$
    mv /tmp/$$ $file
    quilt refresh
    done

    The script was run like this

    sh replace kmem_cache_t "struct kmem_cache"

    Signed-off-by: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

07 Dec, 2006

1 commit

  • This is a bit better than the previous version of gfs2_fsync()
    although it would be better still if we were able to call a
    function which only wrote the inode & metadata. Its no big deal
    though that this will potentially write the data as well since
    the VFS has already done that before calling gfs2_fsync(). I've
    also added a comment to explain whats going on here.

    Signed-off-by: Steven Whitehouse
    Cc: Andrew Morton

    Steven Whitehouse
     

06 Dec, 2006

2 commits


04 Dec, 2006

1 commit


30 Nov, 2006

31 commits

  • The gfs2_fsync() function was doing a journal flush on each
    and every call. While this is correct, its also a lot of
    overhead. This patch means that on fdatasync flushes we
    rely on the VFS to flush the data for us and we don't do
    a journal flush unless we really need to.

    We have to do a journal flush for stuffed files though because
    they have the data and the inode metadata in the same block.
    Journaled files also need a journal flush too of course.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • The comment explains why we use the bio functions to read
    the super block.

    Signed-off-by: Steven Whitehouse
    Cc: Andrew Morton
    Cc: Srinivasa Ds

    Steven Whitehouse
     
  • While mounting the gfs2 filesystem,our test team had a problem and we
    got this error message.
    =======================================================

    GFS2: fsid=: Trying to join cluster "lock_nolock", "dasde1"
    GFS2: fsid=dasde1.0: Joined cluster. Now mounting FS...
    GFS2: not a GFS2 filesystem
    GFS2: fsid=dasde1.0: can't read superblock: -22

    ==========================================================================
    On debugging further we found that problem is while reading the super
    block(gfs2_read_super) and comparing the magic number in it.
    When I replace the submit_bio() call(present in gfs2_read_super) with
    the sb_getblk() and ll_rw_block(), mount operation succeded.
    On further analysis we found that before calling submit_bio(),
    bio->bi_sector was set to "sector" variable. This "sector" variable has
    the same value of bh->b_blocknr(block number). Hence there is a need to
    multiply this valuwith (blocksize >> 9)(9 because,sector size
    2^9,samething happens in ll_rw_block also, before calling submit_bio()).
    So I have developed the patch which solves this problem. Please let me
    know your comments.
    ================================================================

    Signed-off-by: Srinivasa DS
    Signed-off-by: Steven Whitehouse

    Srinivasa Ds
     
  • As pointed out by Adrian Bunk, the gfs2_check_acl() function is no
    longer used. This patch removes it and renamed gfs2_check_acl_locked()
    to gfs2_check_acl() since we only need one variant of that function now.

    Signed-off-by: Steven Whitehouse
    Cc: Adrian Bunk

    Steven Whitehouse
     
  • Fix function parameter typing:
    fs/gfs2/glock.c:100: warning: function declaration isn't a prototype

    Signed-off-by: Randy Dunlap
    Signed-off-by: Steven Whitehouse

    Randy Dunlap
     
  • Fix a printk format warning in fs/gfs2/log.c:
    fs/gfs2/log.c:322: warning: format '%llu' expects type 'long long unsigned int', but argument 3 has type 'sector_t'

    Signed-off-by: Ryusuke Konishi
    Signed-off-by: Steven Whitehouse

    Ryusuke Konishi
     
  • The readdirplus NFS operation can result in gfs2_getattr being
    called with the glock already held. In this case we do not want
    to try and grab the lock again.

    This fixes Red Hat bugzilla #215727

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Since gfs2_permission may be called either from the VFS (in which case
    we need to obtain a shared glock) or from GFS2 (in which case we already
    have a glock) we need to test to see whether or not a lock is required.
    The original test was buggy due to a potential race. This one should
    be safe.

    This fixes Red Hat bugzilla #217129

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Since the superblock and the address_space are determined by the
    glock, we might as well just pass that as the argument since all
    the callers already have that available.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • By moving gfs2_meta_syncfs() into log.c, gfs2_ail1_start()
    can be made static.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This fixes a bug which resulted in poor performance due to flushing
    the journal too often. The code path in question was via the inode_go_sync()
    function in glops.c. The solution is not to flush the journal immediately
    when inodes are ejected from memory, but batch up the work for glockd to
    deal with later on. This means that glocks may now live on beyond the end of
    the lifetime of their inodes (but not very much longer in the normal case).

    Also fixed in this patch is a bug (which was hidden by the bug mentioned above) in
    calculation of the number of free journal blocks.

    The gfs2_logd process has been altered to be more responsive to the journal
    filling up. We now wake it up when the number of uncommitted journal blocks
    has reached the threshold level rather than trying to flush directly at the
    end of each transaction. This again means doing fewer, but larger, log
    flushes in general.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Writes to stuffed files were not being marked dirty correctly.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • The lock order here should be parent -> child rather than
    numeric order.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • The go_sync callback took two flags, but one of them was set on every
    call, so this patch removes once of the flags and makes the previously
    conditional operations (on this flag), unconditional.

    The go_inval callback took three flags, each of which was set on every
    call to it. This patch removes the flags and makes the operations
    unconditional, which makes the logic rather more obvious.

    Two now unused flags are also removed from incore.h.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • GFS2 requires the CRC32 library function. This was reported by
    Toralf Förster.

    Cc: Toralf Förster
    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • When deleting directory entries, we set the inum.no_addr to zero
    in a dirent when its the first dirent in a block and thus cannot
    be merged into the previous dirent as is the usual case. In gfs1,
    inum.no_formal_ino was used instead.

    This patch changes gfs2 to set both inum.no_addr and inum.no_formal_ino
    to zero. It also changes the test from just looking at inum.no_addr to
    look at both inum.no_addr and inum.no_formal_ino and a sentinel is
    now considered to be a dirent in which _either_ (or both) of them
    is set to zero.

    This resolves Red Hat bugzillas: #215809, #211465

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • The gfs2_glock_nq_m_atime function is unused in so far as its only
    ever called with num_gh = 1, and this falls through to the
    gfs2_glock_nq_atime function, so we might as well call that directly.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Four of the sysfs files are unused and can therefore be removed.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This moves the locking for bmap into the bmap function itself
    rather than using a wrapper function. It also fixes a bug where
    the boundary flag was set on the wrong bh. Also the flags on
    the mapped bh are reset earlier in the function to ensure that
    they are 100% correct on the error path.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Change from GFP_KERNEL to GFP_NOFS as this was causing a
    slow down when trying to push inodes from cache.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Stuffed files only consist of a maximum of
    (gfs2 block size - sizeof(struct gfs2_dinode)) bytes. Since the
    gfs2 block size is always less than page size, we will never see
    a call to stuffed_readpage for anything other than the first page
    in the file.

    Signed-off-by: Russell Cattelan
    Signed-off-by: Steven Whitehouse

    Russell Cattelan
     
  • The log lock is dropped prior to io submittion, but
    this exposes a hole in which the log data structures
    may be going away due to a truncate.
    Store the buffer head in a local pointer prior to
    dropping the lock and relay on the buffer_head lock
    for consitency on the buffer head.

    Signed-Off-By: Russell Cattelan
    Signed-off-by: Steven Whitehouse

    Russell Cattelan
     
  • This function wasn't really doing the right thing. There was no need
    to update the inode size at this point and the updating of the
    i_blocks field has now been moved to the places where di_blocks is
    updated. A result of this patch and some those preceeding it is that
    unlocking a glock is now a much more efficient process, since there
    is no longer any requirement to copy data from the gfs2 inode into
    the vfs inode at this point.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Since the inode number is constant, we don't need to keep updating
    it everytime we refresh the other inode fields.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • We were setting the inode flags from GFS2's flags far too often, even when they
    couldn't possibly have changed. This patch reduces the amount of flag
    setting going on so that we do it only when the inode is read in or
    when the flags have changed. The create case is covered by the "when
    the inode is read in" case.

    This also fixes a bug where we didn't set S_SYNC correctly.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This fixes a race between the glock and the page lock encountered
    during truncate in gfs2_readpage and gfs2_prepare_write. The gfs2_readpages
    function doesn't need the same fix since it only uses a try lock anyway, so
    it will fail back to gfs2_readpage in the case of a potential deadlock.

    This bug was spotted by Russell Cattelan.

    Cc: Russell Cattelan
    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • There is no way to set the GL_DUMP flag, and in any case the
    same thing can be done with systemtap if required for debugging,
    so this removes it.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • The meta_header for an ondisk rgrp never changes, so there is no point
    copying it in and back out to disk. Also there is no reason to keep
    a copy for each rgrp in memory.

    The code already checks to ensure that the header is correct before
    it calls the routine to copy the data in, so that we don't even need
    to check whether its correct on disk in the functions in ondisk.c

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • We don't need to use endian conversions for 0 initialisations
    when creating a new on-disk inode.

    Cc: Christoph Hellwig
    Cc: Alexey Dobriyan
    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This shrinks the size of the gfs2_inode by 8 bytes by
    replacing the version counter with a one bit valid/invalid
    flag.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This is almost never used. Its there for backward
    compatibility with GFS1. It doesn't need its own
    field since it can always be calculated from the
    inode mode & flags. This saves a bit more space
    in the gfs2_inode.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse