04 Mar, 2011

1 commit

  • Netlink message processing in the kernel is synchronous these days,
    capabilities can be checked directly in security_netlink_recv() from
    the current process.

    Signed-off-by: Patrick McHardy
    Reviewed-by: James Morris
    [chrisw: update to include pohmelfs and uvesafb]
    Signed-off-by: Chris Wright
    Signed-off-by: David S. Miller

    Patrick McHardy
     

14 Jan, 2011

1 commit

  • This patch adds a 'version' field to the 'dm_ulog_request'
    structure.

    The 'version' field is taken from a portion of the unused
    'padding' field in the 'dm_ulog_request' structure. This
    was done to avoid changing the size of the structure and
    possibly disrupting backwards compatibility.

    The version number will help notify user-space daemons
    when a change has been made to the kernel/userspace
    log API.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Mike Snitzer
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     

30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

17 Feb, 2010

1 commit

  • This patch fixes two bugs that revolve around the miscalculation and
    misuse of the variable 'overhead_size'. 'overhead_size' is the size of
    the various header structures used during communication.

    The first bug is the use of 'sizeof' with the pointer of a structure
    instead of the structure itself - resulting in the wrong size being
    computed. This is then used in a check to see if the payload
    (data_size) would be to large for the preallocated structure. Since the
    bug produces a smaller value for the overhead, it was possible for the
    structure to be breached. (Although the current users of the code do
    not currently send enough data to trigger this bug.)

    The second bug is that the 'overhead_size' value is used to compute how
    much of the preallocated space should be cleared before populating it
    with fresh data. This should have simply been 'sizeof(struct cn_msg)'
    not overhead_size. The fact that 'overhead_size' was computed
    incorrectly made this problem "less bad" - leaving only a pointer's
    worth of space at the end uncleared. Thus, this bug was never producing
    a bad result, but still needs to be fixed - especially now that the
    value is computed correctly.

    Cc: stable@kernel.org
    Signed-off-by: Jonathan Brassow

    Jonathan Brassow
     

03 Oct, 2009

3 commits


05 Sep, 2009

1 commit

  • Device-mapper userspace logs (like the clustered log) are
    identified by a universally unique identifier (UUID). This
    identifier is used to associate requests from the kernel to
    a specific log in userspace. The UUID must be unique everywhere,
    since multiple machines may use this identifier when communicating
    about a particular log, as is the case for cluster logs.

    Sometimes, device-mapper/LVM may re-use a UUID. This is the
    case during pvmoves, when moving from one segment of an LV
    to another, or when resizing a mirror, etc. In these cases,
    a new log is created with the same UUID and loaded in the
    "inactive" slot. When a device-mapper "resume" is issued,
    the "live" table is deactivated and the new "inactive" table
    becomes "live". (The "inactive" table can also be removed
    via a device-mapper 'clear' command.)

    The above two issues were colliding. More than one log was being
    created with the same UUID, and there was no way to distinguish
    between them. So, sometimes the wrong log would be swapped
    out during the exchange.

    The solution is to create a locally unique identifier,
    'luid', to go along with the UUID. This new identifier is used
    to determine exactly which log is being referenced by the kernel
    when the log exchange is made. The identifier is not
    universally safe, but it does not need to be, since
    create/destroy/suspend/resume operations are bound to a specific
    machine; and these are the operations that make up the exchange.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     

16 Aug, 2009

1 commit

  • drivers/md/dm-log-userspace-transfer.c:110: warning: format '%lu' expects type 'long unsigned int', but argument 4 has type 'size_t'

    Previously posted and acked, but apparently lost.
    http://lkml.indiana.edu/hypermail/linux/kernel/0906.2/02074.html

    Signed-off-by: Randy Dunlap
    Cc: dm-devel@redhat.com
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     

22 Jun, 2009

1 commit

  • This patch contains a device-mapper mirror log module that forwards
    requests to userspace for processing.

    The structures used for communication between kernel and userspace are
    located in include/linux/dm-log-userspace.h. Due to the frequency,
    diversity, and 2-way communication nature of the exchanges between
    kernel and userspace, 'connector' was chosen as the interface for
    communication.

    The first log implementations written in userspace - "clustered-disk"
    and "clustered-core" - support clustered shared storage. A userspace
    daemon (in the LVM2 source code repository) uses openAIS/corosync to
    process requests in an ordered fashion with the rest of the nodes in the
    cluster so as to prevent log state corruption. Other implementations
    with no association to LVM or openAIS/corosync, are certainly possible.

    (Imagine if two machines are writing to the same region of a mirror.
    They would both mark the region dirty, but you need a cluster-aware
    entity that can handle properly marking the region clean when they are
    done. Otherwise, you might clear the region when the first machine is
    done, not the second.)

    Signed-off-by: Jonathan Brassow
    Cc: Evgeniy Polyakov
    Signed-off-by: Alasdair G Kergon

    Jonthan Brassow