26 Jan, 2008

28 commits

  • In ocfs2_read_inline_data() we should store file size in loff_t. Although
    the file size should fit in 32 bits we cannot be sure in case filesystem is
    corrupted.

    Signed-off-by: Jan Kara
    Signed-off-by: Mark Fasheh

    Jan Kara
     
  • Create separate lockdep lock classes for system file's i_mutexes. They are
    used to guard allocations and similar things and thus rank differently
    than i_mutex of a regular file or directory.

    Signed-off-by: Jan Kara
    Signed-off-by: Mark Fasheh

    Jan Kara
     
  • Hook up ocfs2_flock(), using the new flock lock type in dlmglue.c. A new
    mount option, "localflocks" is added so that users can revert to old
    functionality as need be.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • This adds a new dlmglue lock type which is intended to back flock()
    requests.

    Since these locks are driven from userspace, usage rules are much more
    liberal than the typical Ocfs2 internal cluster lock. As a result, we can't
    make use of most dlmglue features - lock caching and lock level
    optimizations in particular. Additionally, userspace is free to deadlock
    itself, so we have to deal with that in the same way as the rest of the
    kernel - by allowing a signal to abort a lock request.

    In order to keep ocfs2_cluster_lock() complexity down, ocfs2_file_lock()
    does it's own dlm coordination. We still use the same helper functions
    though, so duplicated code is kept to a minimum.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • Local alloc is a performance optimization in ocfs2 in which a node
    takes a window of bits from the global bitmap and then uses that for
    all small local allocations. This window size is fixed to 8MB currently.
    This patch allows users to specify the window size in MB including
    disabling it by passing in 0. If the number specified is too large,
    the fs will use the default value of 8MB.

    mount -o localalloc=X /dev/sdX /mntpoint

    Signed-off-by: Sunil Mushran
    Signed-off-by: Mark Fasheh

    Sunil Mushran
     
  • Mostly taken from ext3. This allows the user to set the jbd commit interval,
    in seconds. The default of 5 seconds stays the same, but now users can
    easily increase the commit interval. Typically, this would be increased in
    order to benefit performance at the expense of data-safety.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • Check that an online resize is being driven by a user with permission to
    change system resource limits.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • This patch adds the ability for a userspace program to request that a
    properly formatted cluster group be added to the main allocation bitmap for
    an Ocfs2 file system. The request is made via an ioctl, OCFS2_IOC_GROUP_ADD.
    On a high level, this is similar to ext3, but we use a different ioctl as
    the structure which has to be passed through is different.

    During an online resize, tunefs.ocfs2 will format any new cluster groups
    which must be added to complete the resize, and call OCFS2_IOC_GROUP_ADD on
    each one. Kernel verifies that the core cluster group information is valid
    and then does the work of linking it into the global allocation bitmap.

    Signed-off-by: Tao Ma
    Signed-off-by: Mark Fasheh

    Tao Ma
     
  • This patch adds the ability for a userspace program to request an extend of
    last cluster group on an Ocfs2 file system. The request is made via ioctl,
    OCFS2_IOC_GROUP_EXTEND. This is derived from EXT3_IOC_GROUP_EXTEND, but is
    obviously Ocfs2 specific.

    tunefs.ocfs2 would call this for an online-resize operation if the last
    cluster group isn't full.

    Signed-off-by: Tao Ma
    Signed-off-by: Mark Fasheh

    Tao Ma
     
  • We need to reserve at least two ioctls for online-resize. Reserve a small
    range of ioctls for Ocfs2 use in Documentation/ioctl-number.txt. This should
    give us enough room for future growth.

    Signed-off-by: Tao Ma
    Signed-off-by: Mark Fasheh

    Tao Ma
     
  • This value is initialized from global_bitmap->id2.i_chain.cl_cpg. If there
    is only 1 group, it will be equal to the total clusters in the volume. So
    as for online resize, it should change for all the nodes in the cluster.
    It isn't easy and there is no corresponding lock for it.

    bitmap_cpg is only used in 2 areas:
    1. Check whether the suballoc is too large for us to allocate from the global
    bitmap, so it is little used. And now the suballoc size is 2048, it rarely
    meet this situation and the check is almost useless.
    2. Calculate which group a cluster belongs to. We use it during truncate to
    figure out which cluster group an extent belongs too. But we should be OK
    if we increase it though as the cluster group calculated shouldn't change
    and we only ever have a small bitmap_cpg on file systems with a single
    cluster group.

    Signed-off-by: Tao Ma
    Signed-off-by: Mark Fasheh

    Tao Ma
     
  • Remove 'readpages' from the list in ocfs2.txt. Instead of having two
    identical lists, I just removed the list in the OCFS2 section of fs/Kconfig
    and added a pointer to Documentation/filesystems/ocfs2.txt.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • Add ->readpages support to Ocfs2. This is rather trivial - all it required
    is a small update to ocfs2_get_block (for mapping full extents via b_size)
    and an ocfs2_readpages() function which partially mirrors ocfs2_readpage().

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • This allows others to use the DLM constants without being tied to the
    function API of fs/dlm.

    Signed-off-by: Joel Becker
    Signed-off-by: Steven Whitehouse
    Signed-off-by: David Teigland
    Signed-off-by: Mark Fasheh

    Joel Becker
     
  • Call this the "inode_lock" now, since it covers both data and meta data.
    This patch makes no functional changes.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • The meta lock now covers both meta data and data, so this just removes the
    now-redundant data lock.

    Combining locks saves us a round of lock mastery per inode and one less lock
    to ping between nodes during read/write.

    We don't lose much - since meta locks were always held before a data lock
    (and at the same level) ordered writeout mode (the default) ensured that
    flushing for the meta data lock also pushed out data anyways.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • In order to extend inode lock coverage to inode data, we use the same data
    downconvert worker with only a small modification to only do work for
    regular files.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • The node maps that are set/unset by these votes are no longer relevant, thus
    we can remove the mount and umount votes. Since those are the last two
    remaining votes, we can also remove the entire vote infrastructure.

    The vote thread has been renamed to the downconvert thread, and the small
    amount of functionality related to managing it has been moved into
    fs/ocfs2/dlmglue.c. All references to votes have been removed or updated.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • Now that the dlm exposes domain information to us, we don't need generic
    node up / node down callbacks. And since the DLM is only telling us when a
    node goes down unexpectedly, we no longer need to optimize away node down
    callbacks via the umount map.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • With this, a dlm client can take advantage of the group protocol in the dlm
    to get full notification whenever a node within the dlm domain leaves
    unexpectedly.

    Signed-off-by: Mark Fasheh

    Mark Fasheh
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/shaggy/jfs-2.6:
    mount options: fix jfs
    JFS: simplify types to get rid of sparse warning
    JFS: FIx one more plain integer as NULL pointer warning
    JFS: Remove defconfig ptr comparison to 0
    JFS: use DIV_ROUND_UP where appropriate
    Remove unnecessary kmalloc casts in the jfs filesystem
    JFS is missing a memory barrier
    JFS: Make sure special inode data is written after journal is flushed
    JFS: clear PAGECACHE_TAG_DIRTY for no-write pages

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/selinux-2.6:
    selinux: make mls_compute_sid always polyinstantiate
    security/selinux: constify function pointer tables and fields
    security: add a secctx_to_secid() hook
    security: call security_file_permission from rw_verify_area
    security: remove security_sb_post_mountroot hook
    Security: remove security.h include from mm.h
    Security: remove security_file_mmap hook sparse-warnings (NULL as 0).
    Security: add get, set, and cloning of superblock security information
    security/selinux: Add missing "space"

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6:
    [AVR32] extint: Set initial irq type to low level
    [AVR32] extint: change set_irq_type() handling
    [AVR32] NMI debugging
    [AVR32] constify function pointer tables
    [AVR32] ATNGW100: Update defconfig
    [AVR32] ATSTK1002: Update defconfig
    [AVR32] Kconfig: Choose daughterboard instead of CPU
    [AVR32] Add support for ATSTK1003 and ATSTK1004
    [AVR32] Clean up external DAC setup code
    [AVR32] ATSTK1000: Move gpio-leds setup to setup.c
    [AVR32] Add support for AT32AP7001 and AT32AP7002
    [AVR32] Provide more CPU information in /proc/cpuinfo and dmesg
    [AVR32] Oprofile support
    [AVR32] Include instrumentation menu
    Disable VGA text console for AVR32 architecture
    [AVR32] Enable debugging only when needed
    ptrace: Call arch_ptrace_attach() when request=PTRACE_TRACEME
    [AVR32] Remove redundant try_to_freeze() call from do_signal()
    [AVR32] Drop GFP_COMP for DMA memory allocations

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw: (56 commits)
    [GFS2] Allow journal recovery on read-only mount
    [GFS2] Lockup on error
    [GFS2] Fix page_mkwrite truncation race path
    [GFS2] Fix typo
    [GFS2] Fix write alloc required shortcut calculation
    [GFS2] gfs2_alloc_required performance
    [GFS2] Remove unneeded i_spin
    [GFS2] Reduce inode size by moving i_alloc out of line
    [GFS2] Fix assert in log code
    [GFS2] Fix problems relating to execution of files on GFS2
    [GFS2] Initialize extent_list earlier
    [GFS2] Allow page migration for writeback and ordered pages
    [GFS2] Remove unused variable
    [GFS2] Fix log block mapper
    [GFS2] Minor correction
    [GFS2] Eliminate the no longer needed sd_statfs_mutex
    [GFS2] Incremental patch to fix compiler warning
    [GFS2] Function meta_read optimization
    [GFS2] Only fetch the dinode once in block_map
    [GFS2] Reorganize function gfs2_glmutex_lock
    ...

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (125 commits)
    [CRYPTO] twofish: Merge common glue code
    [CRYPTO] hifn_795x: Fixup container_of() usage
    [CRYPTO] cast6: inline bloat--
    [CRYPTO] api: Set default CRYPTO_MINALIGN to unsigned long long
    [CRYPTO] tcrypt: Make xcbc available as a standalone test
    [CRYPTO] xcbc: Remove bogus hash/cipher test
    [CRYPTO] xcbc: Fix algorithm leak when block size check fails
    [CRYPTO] tcrypt: Zero axbuf in the right function
    [CRYPTO] padlock: Only reset the key once for each CBC and ECB operation
    [CRYPTO] api: Include sched.h for cond_resched in scatterwalk.h
    [CRYPTO] salsa20-asm: Remove unnecessary dependency on CRYPTO_SALSA20
    [CRYPTO] tcrypt: Add select of AEAD
    [CRYPTO] salsa20: Add x86-64 assembly version
    [CRYPTO] salsa20_i586: Salsa20 stream cipher algorithm (i586 version)
    [CRYPTO] gcm: Introduce rfc4106
    [CRYPTO] api: Show async type
    [CRYPTO] chainiv: Avoid lock spinning where possible
    [CRYPTO] seqiv: Add select AEAD in Kconfig
    [CRYPTO] scatterwalk: Handle zero nbytes in scatterwalk_map_and_copy
    [CRYPTO] null: Allow setkey on digest_null
    ...

    Linus Torvalds
     
  • This can be broken down into these major areas:
    - Documentation updates (language translations and fixes, as
    well as kobject and kset documenatation updates.)
    - major kset/kobject/ktype rework and fixes. This cleans up the
    kset and kobject and ktype relationship and architecture,
    making sense of things now, and good documenation and samples
    are provided for others to use. Also the attributes for
    kobjects are much easier to handle now. This cleaned up a LOT
    of code all through the kernel, making kobjects easier to use
    if you want to.
    - struct bus_type has been reworked to now handle the lifetime
    rules properly, as the kobject is properly dynamic.
    - struct driver has also been reworked, and now the lifetime
    issues are resolved.
    - the block subsystem has been converted to use struct device
    now, and not "raw" kobjects. This patch has been in the -mm
    tree for over a year now, and finally all the issues are
    worked out with it. Older distros now properly work with new
    kernels, and no userspace updates are needed at all.
    - nozomi driver is added. This has also been in -mm for a long
    time, and many people have asked for it to go in. It is now
    in good enough shape to do so.
    - lots of class_device conversions to use struct device instead.
    The tree is almost all cleaned up now, only SCSI and IB is the
    remaining code to fix up...

    * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6: (196 commits)
    Driver core: coding style fixes
    Kobject: fix coding style issues in kobject c files
    Kobject: fix coding style issues in kobject.h
    Driver core: fix coding style issues in device.h
    spi: use class iteration api
    scsi: use class iteration api
    rtc: use class iteration api
    power supply : use class iteration api
    ieee1394: use class iteration api
    Driver Core: add class iteration api
    Driver core: Cleanup get_device_parent() in device_add() and device_move()
    UIO: constify function pointer tables
    Driver Core: constify the name passed to platform_device_register_simple
    driver core: fix build with SYSFS=n
    sysfs: make SYSFS_DEPRECATED depend on SYSFS
    Driver core: use LIST_HEAD instead of call to INIT_LIST_HEAD in __init
    kobject: add sample code for how to use ksets/ktypes/kobjects
    kobject: add sample code for how to use kobjects in a simple manner.
    kobject: update the kobject/kset documentation
    kobject: remove old, outdated documentation.
    ...

    Linus Torvalds
     
  • If the node we're booting on doesn't have memory, bootstrapping kmalloc()
    caches resorts to fallback_alloc() which requires ->nodelists set for all
    nodes. Fix that by calling set_up_list3s() for CACHE_CACHE in
    kmem_cache_init().

    As kmem_getpages() is called with GFP_THISNODE set, this used to work before
    because of breakage in 2.6.22 and before with GFP_THISNODE returning pages from
    the wrong node if a node had no memory. So it may have worked accidentally and
    in an unsafe manner because the pages would have been associated with the wrong
    node which could trigger bug ons and locking troubles.

    Tested-by: Mel Gorman
    Tested-by: Olaf Hering
    Reviewed-by: Christoph Lameter
    Signed-off-by: Pekka Enberg
    [ With additional one-liner by Olaf Hering - Linus ]
    Signed-off-by: Linus Torvalds

    Pekka Enberg
     
  • Fix overwriting the stack with the version string
    (it is currently 10 bytes + zero) when unloading the
    capidrv module. Safeguard against overwriting it
    should the version string grow in the future.

    Should fix Kernel Bug Tracker Bug 9696.

    Signed-off-by: Gerd v. Egidy
    Acked-by: Karsten Keil
    Signed-off-by: Linus Torvalds

    Karsten Keil
     

25 Jan, 2008

12 commits

  • This patch allows gfs2 to perform journal recovery even if it is mounted
    read-only. Strictly speaking, a read-only mount should not be writing to
    the filesystem, but we do this only to perform journal recovery. A
    read-only mount will fail if we don't recover the dirty journal. Also,
    when gfs2 is used as a root filesystem, it will be mounted read-only
    before being mounted read-write during the boot sequence. A failed
    read-only mount will panic the machine during bootup.

    Signed-off-by: Abhijith Das
    Signed-off-by: Steven Whitehouse

    Abhijith Das
     
  • I spotted this bug while I was digging around. Looks like it could cause
    a lockup in some rare error condition.

    Signed-off-by: Bob Peterson
    Signed-off-by: Steven Whitehouse

    Bob Peterson
     
  • There was a bug in the truncation/invalidation race path for
    ->page_mkwrite for gfs2. It ought to return 0 so that the effect is the
    same as if the page was truncated at any of the other points at which
    the page_lock is dropped. This will result in the restart of the whole
    page fault path. If it was due to a real truncation (as opposed to an
    invalidate because we let a glock go) then the ->fault path will pick
    that up when it gets called again.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This patch fixes a minor typo. Surprisingly, it still compiled.

    Signed-off-by: Bob Peterson
    Signed-off-by: Steven Whitehouse

    Bob Peterson
     
  • The comparison was being made against the wrong quantity.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This is a small I/O performance enhancement to gfs2. (Actually, it is a rework of
    an earlier version I got wrong). The idea here is to check if the write extends
    past the last block in the file. If so, the function can save itself a lot of
    time and trouble because it knows an allocate will be required. Benchmarks like
    iozone should see better performance.

    Signed-off-by: Bob Peterson
    Signed-off-by: Steven Whitehouse

    Bob Peterson
     
  • This patch removes a vestigial variable "i_spin" from the gfs2_inode
    structure. This not only saves us memory (>300000 of these in memory
    for the oom test) it also saves us time because we don't have to
    spend time initializing it (i.e. slightly better performance).

    Signed-off-by: Bob Peterson
    Signed-off-by: Steven Whitehouse

    Bob Peterson
     
  • It is possible to reduce the size of GFS2 inodes by taking the i_alloc
    structure out of the gfs2_inode. This patch allocates the i_alloc
    structure whenever its needed, and frees it afterward. This decreases
    the amount of low memory we use at the expense of requiring a memory
    allocation for each page or partial page that we write. A quick test
    with postmark shows that the overhead is not measurable and I also note
    that OCFS2 use the same approach.

    In the future I'd like to solve the problem by shrinking down the size
    of the members of the i_alloc structure, but for now, this reduces the
    immediate problem of using too much low-memory on x86 and doesn't add
    too much overhead.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Although the values were all being calculated correctly, there was a
    race in the assert due to the way it was using atomic variables. This
    changes the value we assert on so that we get the same effect by testing
    a different variable. This prevents the assert triggering when it shouldn't.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This patch fixes a couple of problems which affected the execution of files
    on GFS2. The first is that there was a corner case where inodes were not
    always uptodate at the point at which permissions checks were being carried
    out, this was resulting in refusal of execute permission, but only on the
    first lookup, subsequent requests worked correctly. The second was a problem
    relating to incorrect updating of file sizes which was introduced with the
    write_begin/end code for GFS2 a little while back.

    Signed-off-by: Steven Whitehouse
    Cc: Abhijith Das

    Steven Whitehouse
     
  • Here is a patch for the latest upstream GFS2 code:
    The journal extent map needs to be initialized sooner than it
    currently is. Otherwise failed mount attempts (e.g. not enough
    journals, etc.) may panic trying to access the uninitialized list.

    Signed-off-by: Bob Peterson
    Signed-off-by: Steven Whitehouse

    Bob Peterson
     
  • To improve performance on NUMA, we use the VM's standard page
    migration for writeback and ordered pages. Probably we could
    also do the same for journaled data, but that would need a
    careful audit of the code, so will be the subject of a later
    patch.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse