03 Oct, 2012

2 commits

  • Pull user namespace changes from Eric Biederman:
    "This is a mostly modest set of changes to enable basic user namespace
    support. This allows the code to code to compile with user namespaces
    enabled and removes the assumption there is only the initial user
    namespace. Everything is converted except for the most complex of the
    filesystems: autofs4, 9p, afs, ceph, cifs, coda, fuse, gfs2, ncpfs,
    nfs, ocfs2 and xfs as those patches need a bit more review.

    The strategy is to push kuid_t and kgid_t values are far down into
    subsystems and filesystems as reasonable. Leaving the make_kuid and
    from_kuid operations to happen at the edge of userspace, as the values
    come off the disk, and as the values come in from the network.
    Letting compile type incompatible compile errors (present when user
    namespaces are enabled) guide me to find the issues.

    The most tricky areas have been the places where we had an implicit
    union of uid and gid values and were storing them in an unsigned int.
    Those places were converted into explicit unions. I made certain to
    handle those places with simple trivial patches.

    Out of that work I discovered we have generic interfaces for storing
    quota by projid. I had never heard of the project identifiers before.
    Adding full user namespace support for project identifiers accounts
    for most of the code size growth in my git tree.

    Ultimately there will be work to relax privlige checks from
    "capable(FOO)" to "ns_capable(user_ns, FOO)" where it is safe allowing
    root in a user names to do those things that today we only forbid to
    non-root users because it will confuse suid root applications.

    While I was pushing kuid_t and kgid_t changes deep into the audit code
    I made a few other cleanups. I capitalized on the fact we process
    netlink messages in the context of the message sender. I removed
    usage of NETLINK_CRED, and started directly using current->tty.

    Some of these patches have also made it into maintainer trees, with no
    problems from identical code from different trees showing up in
    linux-next.

    After reading through all of this code I feel like I might be able to
    win a game of kernel trivial pursuit."

    Fix up some fairly trivial conflicts in netfilter uid/git logging code.

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (107 commits)
    userns: Convert the ufs filesystem to use kuid/kgid where appropriate
    userns: Convert the udf filesystem to use kuid/kgid where appropriate
    userns: Convert ubifs to use kuid/kgid
    userns: Convert squashfs to use kuid/kgid where appropriate
    userns: Convert reiserfs to use kuid and kgid where appropriate
    userns: Convert jfs to use kuid/kgid where appropriate
    userns: Convert jffs2 to use kuid and kgid where appropriate
    userns: Convert hpfs to use kuid and kgid where appropriate
    userns: Convert btrfs to use kuid/kgid where appropriate
    userns: Convert bfs to use kuid/kgid where appropriate
    userns: Convert affs to use kuid/kgid wherwe appropriate
    userns: On alpha modify linux_to_osf_stat to use convert from kuids and kgids
    userns: On ia64 deal with current_uid and current_gid being kuid and kgid
    userns: On ppc convert current_uid from a kuid before printing.
    userns: Convert s390 getting uid and gid system calls to use kuid and kgid
    userns: Convert s390 hypfs to use kuid and kgid where appropriate
    userns: Convert binder ipc to use kuids
    userns: Teach security_path_chown to take kuids and kgids
    userns: Add user namespace support to IMA
    userns: Convert EVM to deal with kuids and kgids in it's hmac computation
    ...

    Linus Torvalds
     
  • Pull workqueue changes from Tejun Heo:
    "This is workqueue updates for v3.7-rc1. A lot of activities this
    round including considerable API and behavior cleanups.

    * delayed_work combines a timer and a work item. The handling of the
    timer part has always been a bit clunky leading to confusing
    cancelation API with weird corner-case behaviors. delayed_work is
    updated to use new IRQ safe timer and cancelation now works as
    expected.

    * Another deficiency of delayed_work was lack of the counterpart of
    mod_timer() which led to cancel+queue combinations or open-coded
    timer+work usages. mod_delayed_work[_on]() are added.

    These two delayed_work changes make delayed_work provide interface
    and behave like timer which is executed with process context.

    * A work item could be executed concurrently on multiple CPUs, which
    is rather unintuitive and made flush_work() behavior confusing and
    half-broken under certain circumstances. This problem doesn't
    exist for non-reentrant workqueues. While non-reentrancy check
    isn't free, the overhead is incurred only when a work item bounces
    across different CPUs and even in simulated pathological scenario
    the overhead isn't too high.

    All workqueues are made non-reentrant. This removes the
    distinction between flush_[delayed_]work() and
    flush_[delayed_]_work_sync(). The former is now as strong as the
    latter and the specified work item is guaranteed to have finished
    execution of any previous queueing on return.

    * In addition to the various bug fixes, Lai redid and simplified CPU
    hotplug handling significantly.

    * Joonsoo introduced system_highpri_wq and used it during CPU
    hotplug.

    There are two merge commits - one to pull in IRQ safe timer from
    tip/timers/core and the other to pull in CPU hotplug fixes from
    wq/for-3.6-fixes as Lai's hotplug restructuring depended on them."

    Fixed a number of trivial conflicts, but the more interesting conflicts
    were silent ones where the deprecated interfaces had been used by new
    code in the merge window, and thus didn't cause any real data conflicts.

    Tejun pointed out a few of them, I fixed a couple more.

    * 'for-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (46 commits)
    workqueue: remove spurious WARN_ON_ONCE(in_irq()) from try_to_grab_pending()
    workqueue: use cwq_set_max_active() helper for workqueue_set_max_active()
    workqueue: introduce cwq_set_max_active() helper for thaw_workqueues()
    workqueue: remove @delayed from cwq_dec_nr_in_flight()
    workqueue: fix possible stall on try_to_grab_pending() of a delayed work item
    workqueue: use hotcpu_notifier() for workqueue_cpu_down_callback()
    workqueue: use __cpuinit instead of __devinit for cpu callbacks
    workqueue: rename manager_mutex to assoc_mutex
    workqueue: WORKER_REBIND is no longer necessary for idle rebinding
    workqueue: WORKER_REBIND is no longer necessary for busy rebinding
    workqueue: reimplement idle worker rebinding
    workqueue: deprecate __cancel_delayed_work()
    workqueue: reimplement cancel_delayed_work() using try_to_grab_pending()
    workqueue: use mod_delayed_work() instead of __cancel + queue
    workqueue: use irqsafe timer for delayed_work
    workqueue: clean up delayed_work initializers and add missing one
    workqueue: make deferrable delayed_work initializer names consistent
    workqueue: cosmetic whitespace updates for macro definitions
    workqueue: deprecate system_nrt[_freezable]_wq
    workqueue: deprecate flush[_delayed]_work_sync()
    ...

    Linus Torvalds
     

24 Sep, 2012

27 commits

  • If a dirty GFS2 inode was being deleted but was in use by another node, its
    metadata was not getting written out before GFS2 checked for dirty buffers in
    gfs2_ail_flush(). GFS2 was relying on inode_go_sync() to write out the
    metadata when the other node tried to free the file, but it failed the error
    check before it got that far. This patch writes out the metadata before calling
    gfs2_ail_flush()

    Signed-off-by: Benjamin Marzinski
    Signed-off-by: Steven Whitehouse

    Benjamin Marzinski
     
  • gfs2_ail_empty_gl() contains an "inline version" of gfs2_trans_begin(),
    so it needs an explicit sb_start_intwrite() as well, to balance the
    sb_end_intwrite() which will be called by gfs2_trans_end().

    With this, xfstest 068 passes on lock_nolock local gfs2.
    Without it, we reach a writer count of -1 and get stuck.

    Signed-off-by: Eric Sandeen
    Signed-off-by: Steven Whitehouse

    Eric Sandeen
     
  • This patch fixes an infinite loop in gfs2_rbm_find that was introduced
    by the previous patch. The problem occurred when the length was less
    than 3 but the rbm block was byte-aligned, causing it to improperly
    return a extent length of zero, which caused it to spin.

    Signed-off-by: Bob Peterson
    Signed-off-by: Steven Whitehouse
    Tested-by: Bob Peterson
    Tested-by: Barry Marson

    Bob Peterson
     
  • With the recently added block reservation code, an additional function
    was added to search for free blocks. This had a restriction of only being
    able to search for aligned extents of free blocks. As a result the
    allocation patterns when reserving blocks were suboptimal when the
    existing allocation of blocks for an inode was not aligned to the same
    boundary.

    This patch resolves that problem by adding the ability for gfs2_rbm_find
    to search for extents of a particular minimum size. We can then use
    gfs2_rbm_find for both looking for reservations, and also looking for
    free blocks on an individual basis when we actually come to do the
    allocation later on. As a result we only need a single set of code
    to deal with both situations.

    The function gfs2_rbm_from_block() is moved up rgrp.c so that it
    occurs before all of its callers.

    Many thanks are due to Bob for helping track down the final issue in
    this patch. That fix to the rb_tree traversal and to not share
    block reservations from a dirctory to its children is included here.

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

    Steven Whitehouse
     
  • GFS2 uses i_mutex on its system quota inode to synchronize writes to
    quota file. Since this is an internal inode to GFS2 (not part of directory
    hiearchy or visible by user) we are safe to define locking rules for it. So
    let's just get it its own locking class to make it clear.

    Signed-off-by: Jan Kara
    Signed-off-by: J. Bruce Fields
    Signed-off-by: Steven Whitehouse

    Jan Kara
     
  • This patch stops multiple block allocations if a nonzero
    return code is received from gfs2_rbm_from_block. Without
    this patch, if enough pressure is put on the file system,
    you get a kernel warning quickly followed by:
    BUG: unable to handle kernel NULL pointer dereference at (null)
    IP: [] gfs2_alloc_blocks+0x2c8/0x880 [gfs2]
    With this patch, things run normally.

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

    Bob Peterson
     
  • When rgd->rd_free_clone is less than rgd->rd_reserved, the
    unclaimed_blocks() calculation would wrap and produce
    incorrect results. This patch checks for this condition
    when this function is called from gfs2_mblk_search()

    In addition, the use of this particular function in other
    places in the code has been dropped by means of a general
    clean up of gfs2_inplace_reserve(). This function is now
    much easier to follow.

    Also the setting of the rgd->rd_last_alloc field is corrected.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This patch improves the tracing of block reservations by
    removing some corner cases and also providing more useful
    detail in the traces.

    A new field is added to the reservation structure to contain
    the inode number. This is used since in certain contexts it is
    not possible to access the inode itself to obtain this information.
    As a result we can then display the inode number for all tracepoints
    and also in case we dump the resource group.

    The "del" tracepoint operation has been removed. This could be called
    with the reservation rgrp set to NULL. That resulted in not printing
    the device number, and thus making the information largely useless
    anyway. Also, the conditional on the rgrp being NULL can then be
    removed from the tracepoint. After this change, all the block
    reservation tracepoint calls will be called with the rgrp information.

    The existing ins,clm and tdel calls to the block reservation tracepoint
    are sufficient to track the entire life of the block reservation.

    In gfs2_block_alloc() the error detection is updated to print out
    the inode number of the problematic inode. This can then be compared
    against the information in the glock dump,tracepoints, etc.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • When we get to the stage of allocating blocks, we know that the
    resource group in question must contain enough free blocks, otherwise
    gfs2_inplace_reserve() would have failed. So if we are left with only
    free blocks which are reserved, then we must use those. This can happen
    if another node has sneeked in and use some blocks reserved on this
    node, for example. Generally this will happen very rarely and only
    when the resouce group is nearly full.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • The ->show_options() function for GFS2 was not correctly displaying
    the value when statfs slow in in use.

    Signed-off-by: Steven Whitehouse
    Reported-by: Milos Jakubicek

    Steven Whitehouse
     
  • Use the rbm structure for gfs2_setbit() in order to simplify the
    arguments to the function. We have to add a bool to control whether
    the clone bitmap should be updated (if it exists) but otherwise it
    is a more or less direct substitution.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Change the arguments to gfs2_testbit() so that it now just takes an
    rbm specifying the position of the two bit entry to return.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Function gfs2_bitfit was checking for state > 3, but that's
    impossible since it is only called from rgblk_search, which receives
    only GFS2_BLKST_ constants.

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

    Bob Peterson
     
  • Function add_to_queue was checking may_grant for the passed-in
    holder for every iteration of its gh2 loop. Now it only checks it
    once at the beginning to see if a try lock is futile.

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

    Bob Peterson
     
  • Function gfs2_glock_dq_wait called two-line function wait_on_demote,
    so they were combined.

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

    Bob Peterson
     
  • Function gfs2_glock_wait only called function wait_on_holder and
    returned its return code, so they were combined for readability.

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

    Bob Peterson
     
  • Since function gfs2_glock_schedule_for_reclaim is only two
    significant lines, we can eliminate it, simplifying the code
    and making it more readable.

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

    Bob Peterson
     
  • This patch changes function gfs2_direct_IO so that it uses a normal
    call to gfs2_glock_dq rather than a call to a multiple-dq of one item.

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

    Bob Peterson
     
  • This patch fixes a few small rbm related things. First, it fixes
    a corner case where the rbm needs to switch bitmaps and wasn't
    adjusting its buffer pointer. Second, there's a white space issue
    fixed. Third, the logic in function gfs2_rbm_from_block was optimized
    a bit. Lastly, a check for goal block overflows was added to function
    gfs2_alloc_blocks.

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

    Bob Peterson
     
  • One corner case which the original patch failed to take into
    account was when there is a reservation which ended such that
    the following block was one beyond the end of the rgrp in
    question. This extra test fixes that case.

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

    Steven Whitehouse
     
  • gfs2 calls RB_EMPTY_NODE() to check if nodes are not on an rbtree.
    The corresponding initialization function is RB_CLEAR_NODE().
    rb_init_node() was never clearly defined and is going away.

    Signed-off-by: Michel Lespinasse
    Signed-off-by: Steven Whitehouse

    Michel Lespinasse
     
  • Replace open coded version with a call to gfs2_rbm_from_block()

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • Use the new gfs2_rbm_from_block() function to replace an open
    coded version of the same code.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This is part of a series of patches which are introducing the
    gfs2_rbm structure throughout the block allocation code. The
    main aim of this part is to create a search function which can
    deal directly with struct gfs2_rbm. In this case it specifies
    the initial position at which to start the search and also the
    point at which the search terminates.

    The net result of this is to clean up the search code and make
    it rather more readable, and the various possible exceptions which
    may occur during the search are partitioned into their own functions.

    There are some bug fixes too. We should not be checking the reservations
    while allocating extents - the time for that is when we are searching
    for where to put the extent, not when we've already made that decision.

    Also, rgblk_search had two uses, and in only one of those cases did
    it make sense to check for reservations. This is fixed in the new
    gfs2_rbm_find function, which has a cleaner interface.

    The reservation checking has been improved by always checking for
    contiguous reservations, and returning the first free block after
    all contiguous reservations. This is done under the spin lock to
    ensure consistancy of the tree.

    The allocation of extents is now in all cases done by the existing
    allocation code, and if there is an active reservation, that is updated
    after the fact. Again this is done under the spin lock, since it entails
    changing the lookup key for the reservation in question.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This patch introduces a new structure, gfs2_rbm, which is a
    tuple of a resource group, a bitmap within the resource group
    and an offset within that bitmap. This is designed to make
    manipulating these sets of variables easier. There is also a
    new helper function which converts this representation back
    to a disk block address.

    In addition, the rbtree nodes which are used for the reservations
    were not being correctly initialised, which is now fixed. Also,
    the tracing was not passing through the inode where it should
    have been. That is mostly fixed aside from one corner case. This
    needs to be revisited since there can also be a NULL rgrp in
    some cases which results in the device being incorrect in the
    trace.

    This is intended to be the first step towards cleaning up some
    of the allocation code, and some further bug fixes.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • The rs_requested field is left over from the original allocation
    code, however this should have been a parameter passed to the
    various functions from gfs2_inplace_reserve() and not a member of the
    reservation structure as the value is not required after the
    initial allocation.

    This also helps simplify the code since we no longer need to set
    the rs_requested to zero. Also the gfs2_inplace_release()
    function can also be simplified since the reservation structure
    will always be defined when it is called, and the only remaining
    task is to unlock the rgrp if required. It can also now be
    called unconditionally too, resulting in a further simplification.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • There were two functions in the xattr code which were nearly
    identical, the only difference being that one was copy data into
    the unstuffed xattrs and the other was copying data out from it.

    This patch merges the two functions such that the code which deal
    with iteration over the unstuffed xattrs is no longer duplicated.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

18 Sep, 2012

3 commits

  • Modify quota_send_warning to take struct kqid instead a type and
    identifier pair.

    When sending netlink broadcasts always convert uids and quota
    identifiers into the intial user namespace. There is as yet no way to
    send a netlink broadcast message with different contents to receivers
    in different namespaces, so for the time being just map all of the
    identifiers into the initial user namespace which preserves the
    current behavior.

    Change the callers of quota_send_warning in gfs2, xfs and dquot
    to generate a struct kqid to pass to quota send warning. When
    all of the user namespaces convesions are complete a struct kqid
    values will be availbe without need for conversion, but a conversion
    is needed now to avoid needing to convert everything at once.

    Cc: Ben Myers
    Cc: Alex Elder
    Cc: Dave Chinner
    Cc: Jan Kara
    Cc: Steven Whitehouse
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     
  • Update the quotactl user space interface to successfull compile with
    user namespaces support enabled and to hand off quota identifiers to
    lower layers of the kernel in struct kqid instead of type and qid
    pairs.

    The quota on function is not converted because while it takes a quota
    type and an id. The id is the on disk quota format to use, which
    is something completely different.

    The signature of two struct quotactl_ops methods were changed to take
    struct kqid argumetns get_dqblk and set_dqblk.

    The dquot, xfs, and ocfs2 implementations of get_dqblk and set_dqblk
    are minimally changed so that the code continues to work with
    the change in parameter type.

    This is the first in a series of changes to always store quota
    identifiers in the kernel in struct kqid and only use raw type and qid
    values when interacting with on disk structures or userspace. Always
    using struct kqid internally makes it hard to miss places that need
    conversion to or from the kernel internal values.

    Cc: Jan Kara
    Cc: Dave Chinner
    Cc: Mark Fasheh
    Cc: Joel Becker
    Cc: Ben Myers
    Cc: Alex Elder
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     
  • - Pass the user namespace the uid and gid values in the xattr are stored
    in into posix_acl_from_xattr.

    - Pass the user namespace kuid and kgid values should be converted into
    when storing uid and gid values in an xattr in posix_acl_to_xattr.

    - Modify all callers of posix_acl_from_xattr and posix_acl_to_xattr to
    pass in &init_user_ns.

    In the short term this change is not strictly needed but it makes the
    code clearer. In the longer term this change is necessary to be able to
    mount filesystems outside of the initial user namespace that natively
    store posix acls in the linux xattr format.

    Cc: Theodore Tso
    Cc: Andrew Morton
    Cc: Andreas Dilger
    Cc: Jan Kara
    Cc: Al Viro
    Signed-off-by: "Eric W. Biederman"

    Eric W. Biederman
     

15 Sep, 2012

1 commit

  • Pull GFS2 fixes from Steven Whitehouse:
    "Here are three GFS2 fixes for the current kernel tree. These are all
    related to the block reservation code which was added at the merge
    window. That code will be getting an update at the forthcoming merge
    window too. In the mean time though there are a few smaller issues
    which should be fixed.

    The first patch resolves an issue with write sizes of greater than 32
    bits with the size hinting code. The second ensures that the
    allocation data structure is initialised when using xattrs and the
    third takes into account allocations which may have been made by other
    nodes which affect a reservation on the local node."

    * git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes:
    GFS2: Take account of blockages when using reserved blocks
    GFS2: Fix missing allocation data for set/remove xattr
    GFS2: Make write size hinting code common

    Linus Torvalds
     

13 Sep, 2012

3 commits

  • The claim_reserved_blks() function was not taking account of
    the possibility of "blockages" while performing allocation.
    This can be caused by another node allocating something in
    the same extent which has been reserved locally.

    This patch tests for this condition and then skips the remainder
    of the reservation in this case. This is a relatively rare event,
    so that it should not affect the general performance improvement
    which the block reservations provide.

    The claim_reserved_blks() function also appears not to be able
    to deal with reservations which cross bitmap boundaries, but
    that can be dealt with in a future patch since we don't generate
    boundary crossing reservations currently.

    Signed-off-by: Steven Whitehouse
    Reported-by: David Teigland
    Cc: Bob Peterson

    Steven Whitehouse
     
  • These entry points were missed in the original patch to allocate
    this data structure.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     
  • This collects up the write size hinting code which is used by the
    block reservation subsystem into a single function. At the same
    time this also corrects the rounding for this calculation.

    Signed-off-by: Steven Whitehouse

    Steven Whitehouse
     

21 Aug, 2012

1 commit

  • flush[_delayed]_work_sync() are now spurious. Mark them deprecated
    and convert all users to flush[_delayed]_work().

    If you're cc'd and wondering what's going on: Now all workqueues are
    non-reentrant and the regular flushes guarantee that the work item is
    not pending or running on any CPU on return, so there's no reason to
    use the sync flushes at all and they're going away.

    This patch doesn't make any functional difference.

    Signed-off-by: Tejun Heo
    Cc: Russell King
    Cc: Paul Mundt
    Cc: Ian Campbell
    Cc: Jens Axboe
    Cc: Mattia Dongili
    Cc: Kent Yoder
    Cc: David Airlie
    Cc: Jiri Kosina
    Cc: Karsten Keil
    Cc: Bryan Wu
    Cc: Benjamin Herrenschmidt
    Cc: Alasdair Kergon
    Cc: Mauro Carvalho Chehab
    Cc: Florian Tobias Schandinat
    Cc: David Woodhouse
    Cc: "David S. Miller"
    Cc: linux-wireless@vger.kernel.org
    Cc: Anton Vorontsov
    Cc: Sangbeom Kim
    Cc: "James E.J. Bottomley"
    Cc: Greg Kroah-Hartman
    Cc: Eric Van Hensbergen
    Cc: Takashi Iwai
    Cc: Steven Whitehouse
    Cc: Petr Vandrovec
    Cc: Mark Fasheh
    Cc: Christoph Hellwig
    Cc: Avi Kivity

    Tejun Heo
     

04 Aug, 2012

1 commit


02 Aug, 2012

1 commit

  • Pull second vfs pile from Al Viro:
    "The stuff in there: fsfreeze deadlock fixes by Jan (essentially, the
    deadlock reproduced by xfstests 068), symlink and hardlink restriction
    patches, plus assorted cleanups and fixes.

    Note that another fsfreeze deadlock (emergency thaw one) is *not*
    dealt with - the series by Fernando conflicts a lot with Jan's, breaks
    userland ABI (FIFREEZE semantics gets changed) and trades the deadlock
    for massive vfsmount leak; this is going to be handled next cycle.
    There probably will be another pull request, but that stuff won't be
    in it."

    Fix up trivial conflicts due to unrelated changes next to each other in
    drivers/{staging/gdm72xx/usb_boot.c, usb/gadget/storage_common.c}

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (54 commits)
    delousing target_core_file a bit
    Documentation: Correct s_umount state for freeze_fs/unfreeze_fs
    fs: Remove old freezing mechanism
    ext2: Implement freezing
    btrfs: Convert to new freezing mechanism
    nilfs2: Convert to new freezing mechanism
    ntfs: Convert to new freezing mechanism
    fuse: Convert to new freezing mechanism
    gfs2: Convert to new freezing mechanism
    ocfs2: Convert to new freezing mechanism
    xfs: Convert to new freezing code
    ext4: Convert to new freezing mechanism
    fs: Protect write paths by sb_start_write - sb_end_write
    fs: Skip atime update on frozen filesystem
    fs: Add freezing handling to mnt_want_write() / mnt_drop_write()
    fs: Improve filesystem freezing handling
    switch the protection of percpu_counter list to spinlock
    nfsd: Push mnt_want_write() outside of i_mutex
    btrfs: Push mnt_want_write() outside of i_mutex
    fat: Push mnt_want_write() outside of i_mutex
    ...

    Linus Torvalds
     

31 Jul, 2012

1 commit

  • We update gfs2_page_mkwrite() to use new freeze protection and the transaction
    code to use freeze protection while the transaction is running. That is needed
    to stop iput() of unlinked file from modifying the filesystem. The rest is
    handled by the generic code.

    CC: cluster-devel@redhat.com
    CC: Steven Whitehouse
    Acked-by: Steven Whitehouse
    Signed-off-by: Jan Kara
    Signed-off-by: Al Viro

    Jan Kara