27 May, 2011

1 commit

  • * 'for-linus' of git://oss.sgi.com/xfs/xfs:
    xfs: correctly decrement the extent buffer index in xfs_bmap_del_extent
    xfs: check for valid indices in xfs_iext_get_ext and xfs_iext_idx_to_irec
    xfs: fix up asserts in xfs_iflush_fork
    xfs: do not do pointer arithmetic on extent records
    xfs: do not use unchecked extent indices in xfs_bunmapi
    xfs: do not use unchecked extent indices in xfs_bmapi
    xfs: do not use unchecked extent indices in xfs_bmap_add_extent_*
    xfs: remove if_lastex
    xfs: remove the unused XFS_BMAPI_RSVBLOCKS flag
    xfs: do not discard alloc btree blocks
    xfs: add online discard support

    Linus Torvalds
     

25 May, 2011

12 commits

  • The code in xfs_bmap_del_extent does not correctly decrement the
    extent buffer index when deleting a whole extent. Most of the time
    this gets caught by checks in xfs_bmapi that work around it and
    decrement it manually and thus wasn't noticed so far.

    Based on an earlier patch from Lachlan McIlroy.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Lachlan McIlroy
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • Based on an earlier patch from Lachlan McIlroy.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Lachlan McIlroy
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • Remove asserts in xfs_iflush_fork that would call xfs_iext_get_ext
    with a potentially invalid extent buffer index.

    Based on an earlier patch from Lachlan McIlroy.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Lachlan McIlroy
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • We need to call xfs_iext_get_ext for the previous extent to get a
    valid pointer, and can't just do pointer arithmetics as they might
    be in different pages.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Lachlan McIlroy
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • Make sure to only call xfs_iext_get_ext after we've validate the
    extent index when moving on to the next index in xfs_bunmapi. Also
    remove the old workaround for too large indices that has been
    superceeded by the proper fix in xfs_bmap_del_extent.

    Based on an earlier patch from Lachlan McIlroy.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Lachlan McIlroy
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • Make sure to only call xfs_iext_get_ext after we've validate the
    extent index when moving on to the next index in xfs_bmapi.

    Based on an earlier patch from Lachlan McIlroy.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Lachlan McIlroy
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • Make sure to only call xfs_iext_get_ext after we've validate the
    extent index in the various xfs_bmap_add_extent_* helpers.

    Based on an earlier patch from Lachlan McIlroy.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Lachlan McIlroy
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • The if_lastex field in struct xfs_ifork is only used as a temporary
    index during xfs_bmapi and xfs_bunmapi. Instead of using the inode
    fork to store it keep it local in the callchain. Fortunately this
    is very easy as we already pass a stack copy of it down the whole
    chain which can simplify be changed to be passed by reference.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • The XFS_BMAPI_RSVBLOCKS is unused, and as far as I can see has
    always been. Remove it to simplify the bmapi implementation and
    conserve stack space.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • Change each shrinker's API by consolidating the existing parameters into
    shrink_control struct. This will simplify any further features added w/o
    touching each file of shrinker.

    [akpm@linux-foundation.org: fix build]
    [akpm@linux-foundation.org: fix warning]
    [kosaki.motohiro@jp.fujitsu.com: fix up new shrinker API]
    [akpm@linux-foundation.org: fix xfs warning]
    [akpm@linux-foundation.org: update gfs2]
    Signed-off-by: Ying Han
    Cc: KOSAKI Motohiro
    Cc: Minchan Kim
    Acked-by: Pavel Emelyanov
    Cc: KAMEZAWA Hiroyuki
    Cc: Mel Gorman
    Acked-by: Rik van Riel
    Cc: Johannes Weiner
    Cc: Hugh Dickins
    Cc: Dave Hansen
    Cc: Steven Whitehouse
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ying Han
     
  • Blocks for the allocation btree are allocated from and released to
    the AGFL, and thus frequently reused. Even worse we do not have an
    easy way to avoid using an AGFL block when it is discarded due to
    the simple FILO list of free blocks, and thus can frequently stall
    on blocks that are currently undergoing a discard.

    Add a flag to the busy extent tracking structure to skip the discard
    for allocation btree blocks. In normal operation these blocks are
    reused frequently enough that there is no need to discard them
    anyway, but if they spill over to the allocation btree as part of a
    balance we "leak" blocks that we would otherwise discard. We could
    fix this by adding another flag and keeping these block in the
    rbtree even after they aren't busy any more so that we could discard
    them when they migrate out of the AGFL. Given that this would cause
    significant overhead I don't think it's worthwile for now.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • Now that we have reliably tracking of deleted extents in a
    transaction we can easily implement "online" discard support
    which calls blkdev_issue_discard once a transaction commits.

    The actual discard is a two stage operation as we first have
    to mark the busy extent as not available for reuse before we
    can start the actual discard. Note that we don't bother
    supporting discard for the non-delaylog mode.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     

24 May, 2011

2 commits

  • * 'for-linus' of git://oss.sgi.com/xfs/xfs:
    xfs: obey minleft values during extent allocation correctly
    xfs: reset buffer pointers before freeing them
    xfs: avoid getting stuck during async inode flushes
    xfs: fix xfs_itruncate_start tracing
    xfs: fix duplicate workqueue initialisation
    xfs: kill off xfs_printk()
    xfs: fix race condition in AIL push trigger
    xfs: make AIL target updates and compares 32bit safe.
    xfs: always push the AIL to the target
    xfs: exit AIL push work correctly when AIL is empty
    xfs: ensure reclaim cursor is reset correctly at end of AG
    xfs: add an x86 compat handler for XFS_IOC_ZERO_RANGE
    xfs: fix compiler warning in xfs_trace.h
    xfs: cleanup duplicate initializations
    xfs: reduce the number of pagb_lock roundtrips in xfs_alloc_clear_busy
    xfs: exact busy extent tracking
    xfs: do not immediately reuse busy extent ranges
    xfs: optimize AGFL refills

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (39 commits)
    b43: fix comment typo reqest -> request
    Haavard Skinnemoen has left Atmel
    cris: typo in mach-fs Makefile
    Kconfig: fix copy/paste-ism for dell-wmi-aio driver
    doc: timers-howto: fix a typo ("unsgined")
    perf: Only include annotate.h once in tools/perf/util/ui/browsers/annotate.c
    md, raid5: Fix spelling error in comment ('Ofcourse' --> 'Of course').
    treewide: fix a few typos in comments
    regulator: change debug statement be consistent with the style of the rest
    Revert "arm: mach-u300/gpio: Fix mem_region resource size miscalculations"
    audit: acquire creds selectively to reduce atomic op overhead
    rtlwifi: don't touch with treewide double semicolon removal
    treewide: cleanup continuations and remove logging message whitespace
    ath9k_hw: don't touch with treewide double semicolon removal
    include/linux/leds-regulator.h: fix syntax in example code
    tty: fix typo in descripton of tty_termios_encode_baud_rate
    xtensa: remove obsolete BKL kernel option from defconfig
    m68k: fix comment typo 'occcured'
    arch:Kconfig.locks Remove unused config option.
    treewide: remove extra semicolons
    ...

    Linus Torvalds
     

20 May, 2011

6 commits

  • When allocating an extent that is long enough to consume the
    remaining free space in an AG, we need to ensure that the allocation
    leaves enough space in the AG for any subsequent bmap btree blocks
    that are needed to track the new extent. These have to be allocated
    in the same AG as we only reserve enough blocks in an allocation
    transaction for modification of the freespace trees in a single AG.

    xfs_alloc_fix_minleft() has been considering blocks on the AGFL as
    free blocks available for extent and bmbt block allocation, which is
    not correct - blocks on the AGFL are there exclusively for the use
    of the free space btrees. As a result, when minleft is less than the
    number of blocks on the AGFL, xfs_alloc_fix_minleft() does not trim
    the given extent to leave minleft blocks available for bmbt
    allocation, and hence we can fail allocation during bmbt record
    insertion.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Dave Chinner
     
  • When we free a vmapped buffer, we need to ensure the vmap address
    and length we free is the same as when it was allocated. In various
    places in the log code we change the memory the buffer is pointing
    to before issuing IO, but we never reset the buffer to point back to
    it's original memory (or no memory, if that is the case for the
    buffer).

    As a result, when we free the buffer it points to memory that is
    owned by something else and attempts to unmap and free it. Because
    the range does not match any known mapped range, it can trigger
    BUG_ON() traps in the vmap code, and potentially corrupt the vmap
    area tracking.

    Fix this by always resetting these buffers to their original state
    before freeing them.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Dave Chinner
     
  • When the underlying inode buffer is locked and xfs_sync_inode_attr()
    is doing a non-blocking flush, xfs_iflush() can return EAGAIN. When
    this happens, clear the error rather than returning it to
    xfs_inode_ag_walk(), as returning EAGAIN will result in the AG walk
    delaying for a short while and trying again. This can result in
    background walks getting stuck on the one AG until inode buffer is
    unlocked by some other means.

    This behaviour was noticed when analysing event traces followed by
    code inspection and verification of the fix via further traces.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Dave Chinner
     
  • Variables are ordered incorrectly in trace call.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Dave Chinner
     
  • The workqueue initialisation function is called twice when
    initialising the XFS subsystem. Remove the second initialisation
    call.

    Signed-off-by: Dave Chinner
    Signed-off-by: Alex Elder

    Dave Chinner
     
  • xfs_alert_tag() can be defined using xfs_alert(), and thereby avoid
    using xfs_printk() altogether. This is the only remaining use of
    xfs_printk(), so changing it this way means xfs_printk() can simply
    be eliminated.can simply be eliminated.can simply be eliminated.can
    simply be eliminated.can simply be eliminated.can simply be
    eliminated.can simply be eliminated.can simply be eliminated.can
    simply be eliminated.

    Also add format checking to the non-debug inline function xfs_debug.
    Miscellaneous function prototype argument alignment.

    (Updated to delete the definition of xfs_printk(), which is
    no longer used or needed.)

    Signed-off-by: Joe Perches
    Signed-off-by: Alex Elder

    Joe Perches
     

10 May, 2011

11 commits

  • - kenrel -> kernel
    - whetehr -> whether
    - ttt -> tt
    - sss -> ss

    Signed-off-by: Justin P. Mattock
    Signed-off-by: Jiri Kosina

    Justin P. Mattock
     
  • The recent conversion of the xfsaild functionality to a work queue
    introduced a hard-to-hit log space grant hang. One is caused by a
    race condition in determining whether there is a psh in progress or
    not.

    The XFS_AIL_PUSHING_BIT is used to determine whether a push is
    currently in progress. When the AIL push work completes, it checked
    whether the target changed and cleared the PUSHING bit to allow a
    new push to be requeued. The race condition is as follows:

    Thread 1 push work

    smp_wmb()
    smp_rmb()
    check ailp->xa_target unchanged
    update ailp->xa_target
    test/set PUSHING bit
    does not queue
    clear PUSHING bit
    does not requeue

    Now that the push target is updated, new attempts to push the AIL
    will not trigger as the push target will be the same, and hence
    despite trying to push the AIL we won't ever wake it again.

    The fix is to ensure that the AIL push work clears the PUSHING bit
    before it checks if the target is unchanged.

    As a result, both push triggers operate on the same test/set bit
    criteria, so even if we race in the push work and miss the target
    update, the thread requesting the push will still set the PUSHING
    bit and queue the push work to occur. For safety sake, the same
    queue check is done if the push work detects the target change,
    though only one of the two will will queue new work due to the use
    of test_and_set_bit() checks.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    (cherry picked from commit e4d3c4a43b595d5124ae824d300626e6489ae857)

    Dave Chinner
     
  • The recent conversion of the xfsaild functionality to a work queue
    introduced a hard-to-hit log space grant hang. One of the problems
    noticed was that updates of the push target are not 32 bit safe as
    the target is a 64 bit value.

    We cannot copy a 64 bit LSN without the possibility of corrupting
    the result when racing with another updating thread. We have
    function to do this update safely without needing to care about
    32/64 bit issues - xfs_trans_ail_copy_lsn() - so use that when
    updating the AIL push target.

    Also move the reading of the target in the push work inside the AIL
    lock, and use XFS_LSN_CMP() for the unlocked comparison during work
    termination to close read holes as well.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    (cherry picked from commit fd5670f22fce247754243cf2ed41941e5762d990)

    Dave Chinner
     
  • The recent conversion of the xfsaild functionality to a work queue
    introduced a hard-to-hit log space grant hang. One of the problems
    discovered is a target mismatch between the item pushing loop and
    the target itself.

    The push trigger checks for the target increasing (i.e. new target >
    current) while the push loop only pushes items that have a LSN <
    current. As a result, we can get the situation where the push target
    is X, the items at the tail of the AIL have LSN X and they don't get
    pushed. The push work then completes thinking it is done, and cannot
    be restarted until the push target increases to >= X + 1. If the
    push target then never increases (because the tail is not moving),
    then we never run the push work again and we stall.

    Fix it by making sure log items with a LSN that matches the target
    exactly are pushed during the loop.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    (cherry picked from commit cb64026b6e8af50db598ec7c3f59d504259b00bb)

    Dave Chinner
     
  • The recent conversion of the xfsaild functionality to a work queue
    introduced a hard-to-hit log space grant hang. The main cause is a
    regression where a work exit path fails to clear the PUSHING state
    and recheck the target correctly.

    Make both exit paths do the same PUSHING bit clearing and target
    checking when the "no more work to be done" condition is hit.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    (cherry picked from commit ea35a20021f8497390d05b93271b4d675516c654)

    Dave Chinner
     
  • On a 32 bit highmem PowerPC machine, the XFS inode cache was growing
    without bound and exhausting low memory causing the OOM killer to be
    triggered. After some effort, the problem was reproduced on a 32 bit
    x86 highmem machine.

    The problem is that the per-ag inode reclaim index cursor was not
    getting reset to the start of the AG if the radix tree tag lookup
    found no more reclaimable inodes. Hence every further reclaim
    attempt started at the same index beyond where any reclaimable
    inodes lay, and no further background reclaim ever occurred from the
    AG.

    Without background inode reclaim the VM driven cache shrinker
    simply cannot keep up with cache growth, and OOM is the result.

    While the change that exposed the problem was the conversion of the
    inode reclaim to use work queues for background reclaim, it was not
    the cause of the bug. The bug was introduced when the cursor code
    was added, just waiting for some weird configuration to strike....

    Signed-off-by: Dave Chinner
    Tested-By: Christian Kujau
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    (cherry picked from commit b223221956675ce8a7b436d198ced974bb388571)

    Dave Chinner
     
  • The recent conversion of the xfsaild functionality to a work queue
    introduced a hard-to-hit log space grant hang. One is caused by a
    race condition in determining whether there is a psh in progress or
    not.

    The XFS_AIL_PUSHING_BIT is used to determine whether a push is
    currently in progress. When the AIL push work completes, it checked
    whether the target changed and cleared the PUSHING bit to allow a
    new push to be requeued. The race condition is as follows:

    Thread 1 push work

    smp_wmb()
    smp_rmb()
    check ailp->xa_target unchanged
    update ailp->xa_target
    test/set PUSHING bit
    does not queue
    clear PUSHING bit
    does not requeue

    Now that the push target is updated, new attempts to push the AIL
    will not trigger as the push target will be the same, and hence
    despite trying to push the AIL we won't ever wake it again.

    The fix is to ensure that the AIL push work clears the PUSHING bit
    before it checks if the target is unchanged.

    As a result, both push triggers operate on the same test/set bit
    criteria, so even if we race in the push work and miss the target
    update, the thread requesting the push will still set the PUSHING
    bit and queue the push work to occur. For safety sake, the same
    queue check is done if the push work detects the target change,
    though only one of the two will will queue new work due to the use
    of test_and_set_bit() checks.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    Dave Chinner
     
  • The recent conversion of the xfsaild functionality to a work queue
    introduced a hard-to-hit log space grant hang. One of the problems
    noticed was that updates of the push target are not 32 bit safe as
    the target is a 64 bit value.

    We cannot copy a 64 bit LSN without the possibility of corrupting
    the result when racing with another updating thread. We have
    function to do this update safely without needing to care about
    32/64 bit issues - xfs_trans_ail_copy_lsn() - so use that when
    updating the AIL push target.

    Also move the reading of the target in the push work inside the AIL
    lock, and use XFS_LSN_CMP() for the unlocked comparison during work
    termination to close read holes as well.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    Dave Chinner
     
  • The recent conversion of the xfsaild functionality to a work queue
    introduced a hard-to-hit log space grant hang. One of the problems
    discovered is a target mismatch between the item pushing loop and
    the target itself.

    The push trigger checks for the target increasing (i.e. new target >
    current) while the push loop only pushes items that have a LSN <
    current. As a result, we can get the situation where the push target
    is X, the items at the tail of the AIL have LSN X and they don't get
    pushed. The push work then completes thinking it is done, and cannot
    be restarted until the push target increases to >= X + 1. If the
    push target then never increases (because the tail is not moving),
    then we never run the push work again and we stall.

    Fix it by making sure log items with a LSN that matches the target
    exactly are pushed during the loop.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    Dave Chinner
     
  • The recent conversion of the xfsaild functionality to a work queue
    introduced a hard-to-hit log space grant hang. The main cause is a
    regression where a work exit path fails to clear the PUSHING state
    and recheck the target correctly.

    Make both exit paths do the same PUSHING bit clearing and target
    checking when the "no more work to be done" condition is hit.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    Dave Chinner
     
  • On a 32 bit highmem PowerPC machine, the XFS inode cache was growing
    without bound and exhausting low memory causing the OOM killer to be
    triggered. After some effort, the problem was reproduced on a 32 bit
    x86 highmem machine.

    The problem is that the per-ag inode reclaim index cursor was not
    getting reset to the start of the AG if the radix tree tag lookup
    found no more reclaimable inodes. Hence every further reclaim
    attempt started at the same index beyond where any reclaimable
    inodes lay, and no further background reclaim ever occurred from the
    AG.

    Without background inode reclaim the VM driven cache shrinker
    simply cannot keep up with cache growth, and OOM is the result.

    While the change that exposed the problem was the conversion of the
    inode reclaim to use work queues for background reclaim, it was not
    the cause of the bug. The bug was introduced when the cursor code
    was added, just waiting for some weird configuration to strike....

    Signed-off-by: Dave Chinner
    Tested-By: Christian Kujau
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Alex Elder

    Dave Chinner
     

29 Apr, 2011

7 commits

  • XFS_IOC_ZERO_RANGE uses struct xfs_flock64, and thus requires argument
    translation for 32-bit binaries on x86. Add the required
    XFS_IOC_ZERO_RANGE_32 defined and add it to the list of commands that
    require xfs_flock64 translation.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • xfs_fsblock_t may be a 32-bit type on if XFS_BIG_BLKNOS is not set,
    make sure to cast a value of this type to an unsigned long long
    before using the ll printk qualifier.

    Reported-by: Randy Dunlap
    Signed-off-by: Christoph Hellwig
    Reviewed-by: Dave Chinner
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • follow these guidelines:
    - leave initialization in the declaration block if it fits the line
    - move to the code where it's more suitable ('for' init block)

    The last chunk was modified from David's original to be a correct
    fix for what appeared to be a duplicate initialization.

    Signed-off-by: David Sterba
    Signed-off-by: Alex Elder
    Reviewed-by: Dave Chinner

    David Sterba
     
  • Instead of finding the per-ag and then taking and releasing the pagb_lock
    for every single busy extent completed sort the list of busy extents and
    only switch betweens AGs where nessecary. This becomes especially important
    with the online discard support which will hit this lock more often.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • Update the extent tree in case we have to reuse a busy extent, so that it
    always is kept uptodate. This is done by replacing the busy list searches
    with a new xfs_alloc_busy_reuse helper, which updates the busy extent tree
    in case of a reuse. This allows us to allow reusing metadata extents
    unconditionally, and thus avoid log forces especially for allocation btree
    blocks.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • Every time we reallocate a busy extent, we cause a synchronous log force
    to occur to ensure the freeing transaction is on disk before we continue
    and use the newly allocated extent. This is extremely sub-optimal as we
    have to mark every transaction with blocks that get reused as synchronous.

    Instead of searching the busy extent list after deciding on the extent to
    allocate, check each candidate extent during the allocation decisions as
    to whether they are in the busy list. If they are in the busy list, we
    trim the busy range out of the extent we have found and determine if that
    trimmed range is still OK for allocation. In many cases, this check can
    be incorporated into the allocation extent alignment code which already
    does trimming of the found extent before determining if it is a valid
    candidate for allocation.

    Based on earlier patches from Dave Chinner.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • While we need to make sure we do not reuse busy extents, there is no need
    to force out busy extents when moving them between the AGFL and the
    freespace btree as we still take care of that when doing the real allocation.

    To avoid the log force when just moving extents from the different free
    space tracking structures, move the busy search out of
    xfs_alloc_get_freelist into the callers that need it, and move the busy
    list insert from xfs_free_ag_extent which is used both by AGFL refills
    and real allocation to xfs_free_extent, which is only used by the latter.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     

21 Apr, 2011

1 commit

  • Commit 957935dc ("xfs: fix xfs_debug warnings" broke the logic in
    __xfs_printk(). Instead of only printing one of two possible output
    strings based on whether the fs has a name or not, it outputs both.
    Fix it to only output one message again.

    Signed-off-by: Dave Chinner
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Dave Chinner