16 Mar, 2011

15 commits

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (57 commits)
    tidy the trailing symlinks traversal up
    Turn resolution of trailing symlinks iterative everywhere
    simplify link_path_walk() tail
    Make trailing symlink resolution in path_lookupat() iterative
    update nd->inode in __do_follow_link() instead of after do_follow_link()
    pull handling of one pathname component into a helper
    fs: allow AT_EMPTY_PATH in linkat(), limit that to CAP_DAC_READ_SEARCH
    Allow passing O_PATH descriptors via SCM_RIGHTS datagrams
    readlinkat(), fchownat() and fstatat() with empty relative pathnames
    Allow O_PATH for symlinks
    New kind of open files - "location only".
    ext4: Copy fs UUID to superblock
    ext3: Copy fs UUID to superblock.
    vfs: Export file system uuid via /proc//mountinfo
    unistd.h: Add new syscalls numbers to asm-generic
    x86: Add new syscalls for x86_64
    x86: Add new syscalls for x86_32
    fs: Remove i_nlink check from file system link callback
    fs: Don't allow to create hardlink for deleted file
    vfs: Add open by file handle support
    ...

    Linus Torvalds
     
  • The new vfs locking scheme introduced in 2.6.38 breaks NFS sillyrename
    because the latter relies on being able to determine the parent
    directory of the dentry in the ->iput() callback in order to send the
    appropriate unlink rpc call.

    Looking at the code that cares about races with dput(), there doesn't
    seem to be anything that specifically uses d_parent as a test for
    whether or not there is a race:
    - __d_lookup_rcu(), __d_lookup() all test for d_hashed() after d_parent
    - shrink_dcache_for_umount() is safe since nothing else can rearrange
    the dentries in that super block.
    - have_submount(), select_parent() and d_genocide() can test for a
    deletion if we set the DCACHE_DISCONNECTED flag when the dentry
    is removed from the parent's d_subdirs list.

    Signed-off-by: Trond Myklebust
    Cc: stable@kernel.org (2.6.38, needs commit c826cb7dfce8 "dcache.c:
    create helper function for duplicated functionality" )
    Signed-off-by: Linus Torvalds

    Trond Myklebust
     
  • This creates a helper function for he "try to ascend into the parent
    directory" case, which was written out in triplicate before. With all
    the locking and subtle sequence number stuff, we really don't want to
    duplicate that kind of code.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • * pull the handling of current->total_link_count into
    __do_follow_link()
    * put the common "do ->put_link() if needed and path_put() the link"
    stuff into a helper (put_link(nd, link, cookie))
    * rename __do_follow_link() to follow_link(), while we are at it

    Signed-off-by: Al Viro

    Al Viro
     
  • The last remaining place (resolution of nested symlink) converted
    to the loop of the same kind we have in path_lookupat() and
    path_openat().

    Note that we still *do* have a recursion in pathname resolution;
    can't avoid it, really. However, it's strictly for nested symlinks
    now - i.e. ones in the middle of a pathname.

    link_path_walk() has lost the tail now - it always walks everything
    except the last component.

    do_follow_link() renamed to nested_symlink() and moved down.

    Signed-off-by: Al Viro

    Al Viro
     
  • Now that link_path_walk() is called without LOOKUP_PARENT
    only from do_follow_link(), we can simplify the checks in
    last component handling. First of all, checking if we'd
    arrived to a directory is not needed - the caller will check
    it anyway. And LOOKUP_FOLLOW is guaranteed to be there,
    since we only get to that place with nd->depth > 0.

    Signed-off-by: Al Viro

    Al Viro
     
  • Now the only caller of link_path_walk() that does *not* pass
    LOOKUP_PARENT is do_follow_link()

    Signed-off-by: Al Viro

    Al Viro
     
  • ... and note that we only need to do it for LAST_BIND symlinks

    Signed-off-by: Al Viro

    Al Viro
     
  • new helper: walk_component(). Handles everything except symlinks;
    returns negative on error, 0 on success and 1 on symlinks we decided
    to follow. Drops out of RCU mode on such symlinks.

    link_path_walk() and do_last() switched to using that.

    Signed-off-by: Al Viro

    Al Viro
     
  • We don't want to allow creation of private hardlinks by different application
    using the fd passed to them via SCM_RIGHTS. So limit the null relative name
    usage in linkat syscall to CAP_DAC_READ_SEARCH

    Signed-off-by: Aneesh Kumar K.V

    Aneesh Kumar K.V
     
  • * 'for-linus' of git://xenbits.xen.org/people/sstabellini/linux-pvhvm:
    xen: suspend: remove xen_hvm_suspend
    xen: suspend: pull pre/post suspend hooks out into suspend_info
    xen: suspend: move arch specific pre/post suspend hooks into generic hooks
    xen: suspend: refactor non-arch specific pre/post suspend hooks
    xen: suspend: add "arch" to pre/post suspend hooks
    xen: suspend: pass extra hypercall argument via suspend_info struct
    xen: suspend: refactor cancellation flag into a structure
    xen: suspend: use HYPERVISOR_suspend for PVHVM case instead of open coding
    xen: switch to new schedop hypercall by default.
    xen: use new schedop interface for suspend
    xen: do not respond to unknown xenstore control requests
    xen: fix compile issue if XEN is enabled but XEN_PVHVM is disabled
    xen: PV on HVM: support PV spinlocks and IPIs
    xen: make the ballon driver work for hvm domains
    xen-blkfront: handle Xen major numbers other than XENVBD
    xen: do not use xen_info on HVM, set pv_info name to "Xen HVM"
    xen: no need to delay xen_setup_shutdown_event for hvm guests anymore

    Linus Torvalds
     
  • …git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen

    * 'stable/ia64' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen: ia64 build broken due to "xen: switch to new schedop hypercall by default."

    * 'stable/blkfront-cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen: Union the blkif_request request specific fields

    * 'stable/cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen: annotate functions which only call into __init at start of day
    xen p2m: annotate variable which appears unused
    xen: events: mark cpu_evtchn_mask_p as __refdata

    Linus Torvalds
     
  • * 'stable/irq.cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen: events: remove dom0 specific xen_create_msi_irq
    xen: events: use xen_bind_pirq_msi_to_irq from xen_create_msi_irq
    xen: events: push set_irq_msi down into xen_create_msi_irq
    xen: events: update pirq_to_irq in xen_create_msi_irq
    xen: events: refactor xen_create_msi_irq slightly
    xen: events: separate MSI PIRQ allocation from PIRQ binding to IRQ
    xen: events: assume PHYSDEVOP_get_free_pirq exists
    xen: pci: collapse apic_register_gsi_xen_hvm and xen_hvm_register_pirq
    xen: events: return irq from xen_allocate_pirq_msi
    xen: events: drop XEN_ALLOC_IRQ flag to xen_allocate_pirq_msi
    xen: events: do not leak IRQ from xen_allocate_pirq_msi when no pirq available.
    xen: pci: only define xen_initdom_setup_msi_irqs if CONFIG_XEN_DOM0

    Linus Torvalds
     
  • …el.org/pub/scm/linux/kernel/git/konrad/xen

    * 'stable/irq.rework' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen/irq: Cleanup up the pirq_to_irq for DomU PV PCI passthrough guests as well.
    xen: Use IRQF_FORCE_RESUME
    xen/timer: Missing IRQF_NO_SUSPEND in timer code broke suspend.
    xen: Fix compile error introduced by "switch to new irq_chip functions"
    xen: Switch to new irq_chip functions
    xen: Remove stale irq_chip.end
    xen: events: do not free legacy IRQs
    xen: events: allocate GSIs and dynamic IRQs from separate IRQ ranges.
    xen: events: add xen_allocate_irq_{dynamic, gsi} and xen_free_irq
    xen:events: move find_unbound_irq inside CONFIG_PCI_MSI
    xen: handled remapped IRQs when enabling a pcifront PCI device.
    genirq: Add IRQF_FORCE_RESUME

    * 'stable/pcifront-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    pci/xen: When free-ing MSI-X/MSI irq->desc also use generic code.
    pci/xen: Cleanup: convert int** to int[]
    pci/xen: Use xen_allocate_pirq_msi instead of xen_allocate_pirq
    xen-pcifront: Sanity check the MSI/MSI-X values
    xen-pcifront: don't use flush_scheduled_work()

    Linus Torvalds
     
  • …l.org/pub/scm/linux/kernel/git/konrad/xen

    * 'stable/p2m-identity.v4.9.1' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen/m2p: Check whether the MFN has IDENTITY_FRAME bit set..
    xen/m2p: No need to catch exceptions when we know that there is no RAM
    xen/debug: WARN_ON when identity PFN has no _PAGE_IOMAP flag set.
    xen/debugfs: Add 'p2m' file for printing out the P2M layout.
    xen/setup: Set identity mapping for non-RAM E820 and E820 gaps.
    xen/mmu: WARN_ON when racing to swap middle leaf.
    xen/mmu: Set _PAGE_IOMAP if PFN is an identity PFN.
    xen/mmu: Add the notion of identity (1-1) mapping.
    xen: Mark all initial reserved pages for the balloon as INVALID_P2M_ENTRY.

    * 'stable/e820' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen:
    xen/e820: Don't mark balloon memory as E820_UNUSABLE when running as guest and fix overflow.
    xen/setup: Inhibit resource API from using System RAM E820 gaps as PCI mem gaps.

    Linus Torvalds
     

15 Mar, 2011

5 commits

  • Just need to make sure that AF_UNIX garbage collector won't
    confuse O_PATHed socket on filesystem for real AF_UNIX opened
    socket.

    Signed-off-by: Al Viro

    Al Viro
     
  • For readlinkat() we simply allow empty pathname; it will fail unless
    we have dfd equal to O_PATH-opened symlink, so we are outside of
    POSIX scope here. For fchownat() and fstatat() we allow AT_EMPTY_PATH;
    let the caller explicitly ask for such behaviour.

    Signed-off-by: Al Viro

    Al Viro
     
  • At that point we can't do almost nothing with them. They can be opened
    with O_PATH, we can manipulate such descriptors with dup(), etc. and
    we can see them in /proc/*/{fd,fdinfo}/*.

    We can't (and won't be able to) follow /proc/*/fd/* symlinks for those;
    there's simply not enough information for pathname resolution to go on
    from such point - to resolve a symlink we need to know which directory
    does it live in.

    We will be able to do useful things with them after the next commit, though -
    readlinkat() and fchownat() will be possible to use with dfd being an
    O_PATH-opened symlink and empty relative pathname. Combined with
    open_by_handle() it'll give us a way to do realink-by-handle and
    lchown-by-handle without messing with more redundant syscalls.

    Signed-off-by: Al Viro

    Al Viro
     
  • New flag for open(2) - O_PATH. Semantics:
    * pathname is resolved, but the file itself is _NOT_ opened
    as far as filesystem is concerned.
    * almost all operations on the resulting descriptors shall
    fail with -EBADF. Exceptions are:
    1) operations on descriptors themselves (i.e.
    close(), dup(), dup2(), dup3(), fcntl(fd, F_DUPFD),
    fcntl(fd, F_DUPFD_CLOEXEC, ...), fcntl(fd, F_GETFD),
    fcntl(fd, F_SETFD, ...))
    2) fcntl(fd, F_GETFL), for a common non-destructive way to
    check if descriptor is open
    3) "dfd" arguments of ...at(2) syscalls, i.e. the starting
    points of pathname resolution
    * closing such descriptor does *NOT* affect dnotify or
    posix locks.
    * permissions are checked as usual along the way to file;
    no permission checks are applied to the file itself. Of course,
    giving such thing to syscall will result in permission checks (at
    the moment it means checking that starting point of ....at() is
    a directory and caller has exec permissions on it).

    fget() and fget_light() return NULL on such descriptors; use of
    fget_raw() and fget_raw_light() is needed to get them. That protects
    existing code from dealing with those things.

    There are two things still missing (they come in the next commits):
    one is handling of symlinks (right now we refuse to open them that
    way; see the next commit for semantics related to those) and another
    is descriptor passing via SCM_RIGHTS datagrams.

    Signed-off-by: Al Viro

    Al Viro
     
  • File system UUID is made available to application
    via /proc//mountinfo

    Signed-off-by: Aneesh Kumar K.V
    Signed-off-by: Al Viro

    Aneesh Kumar K.V
     

07 Mar, 2011

1 commit

  • mlog_exit is used to record the exit status of a function.
    But because it is added in so many functions, if we enable it,
    the system logs get filled up quickly and cause too much I/O.
    So actually no one can open it for a production system or even
    for a test.

    This patch just try to remove it or change it. So:
    1. if all the error paths already use mlog_errno, it is just removed.
    Otherwise, it will be replaced by mlog_errno.
    2. if it is used to print some return value, it is replaced with
    mlog(0,...).
    mlog_exit_ptr is changed to mlog(0.
    All those mlog(0,...) will be replaced with trace events later.

    Signed-off-by: Tao Ma

    Tao Ma
     

23 Feb, 2011

3 commits


22 Feb, 2011

12 commits


21 Feb, 2011

4 commits

  • ocfs2_iget is used to get/create inode. Only iget5_locked
    will give us an inode = NULL. So move this check ahead of
    ocfs2_read_locked_inode so that we don't need to check
    inode before we read and unlock inode. This is also helpful
    for trace event(see the next patch).

    Signed-off-by: Tao Ma

    Tao Ma
     
  • As there are no such debug information in fs/ocfs2/ioctl.c,
    fs/ocfs2/locks.c and fs/ocfs2/sysfile.c, ML_INODE are also
    removed.

    Signed-off-by: Tao Ma

    Tao Ma
     
  • About one year ago, Wengang Wang tried some first steps
    to add tracepoints to ocfs2. Hiss original patch is here:
    http://oss.oracle.com/pipermail/ocfs2-devel/2009-November/005512.html

    But as Steven Rostedt indicated in his article
    http://lwn.net/Articles/383362/, we'd better have our trace
    files resides in fs/ocfs2, so I rewrited the patch using the
    method Steven mentioned in that article.

    Signed-off-by: Wengang Wang
    Signed-off-by: Tao Ma

    Wengang Wang
     
  • ENTRY is used to record the entry of a function.
    But because it is added in so many functions, if we enable it,
    the system logs get filled up quickly and cause too much I/O.
    So actually no one can open it for a production system or even
    for a test.

    So for mlog_entry_void, we just remove it.
    for mlog_entry(...), we replace it with mlog(0,...), and they
    will be replace by trace event later.

    Signed-off-by: Tao Ma

    Tao Ma