17 Oct, 2007

1 commit

  • Changes NLS and DLM menus into a 'menuconfig' object so that it can be
    disabled at once without having to enter the menu first to disable the config
    option.

    Signed-off-by: Jan Engelhardt
    Cc: Steven Whitehouse
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Engelhardt
     

13 Oct, 2007

2 commits

  • * master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6: (75 commits)
    PM: merge device power-management source files
    sysfs: add copyrights
    kobject: update the copyrights
    kset: add some kerneldoc to help describe what these strange things are
    Driver core: rename ktype_edd and ktype_efivar
    Driver core: rename ktype_driver
    Driver core: rename ktype_device
    Driver core: rename ktype_class
    driver core: remove subsystem_init()
    sysfs: move sysfs file poll implementation to sysfs_open_dirent
    sysfs: implement sysfs_open_dirent
    sysfs: move sysfs_dirent->s_children into sysfs_dirent->s_dir
    sysfs: make sysfs_root a regular directory dirent
    sysfs: open code sysfs_attach_dentry()
    sysfs: make s_elem an anonymous union
    sysfs: make bin attr open get active reference of parent too
    sysfs: kill unnecessary NULL pointer check in sysfs_release()
    sysfs: kill unnecessary sysfs_get() in open paths
    sysfs: reposition sysfs_dirent->s_mode.
    sysfs: kill sysfs_update_file()
    ...

    Linus Torvalds
     
  • A kset should not have its name set directly, so dynamically set the
    name at runtime.

    This is needed to remove the static array in the kobject structure which
    will be changed in a future patch.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

10 Oct, 2007

4 commits

  • Introduce a per-lockspace rwsem that's held in read mode by dlm_recv
    threads while working in the dlm. This allows dlm_recv activity to be
    suspended when the lockspace transitions to, from and between recovery
    cycles.

    The specific bug prompting this change is one where an in-progress
    recovery cycle is aborted by a new recovery cycle. While dlm_recv was
    processing a recovery message, the recovery cycle was aborted and
    dlm_recoverd began cleaning up. dlm_recv decremented recover_locks_count
    on an rsb after dlm_recoverd had reset it to zero. This is fixed by
    suspending dlm_recv (taking write lock on the rwsem) before aborting the
    current recovery.

    The transitions to/from normal and recovery modes are simplified by using
    this new ability to block dlm_recv. The switch from normal to recovery
    mode means dlm_recv goes from processing locking messages, to saving them
    for later, and vice versa. Races are avoided by blocking dlm_recv when
    setting the flag that switches between modes.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • If the castaddr passed to the userland API is NULL then don't overwrite the
    existing castparam. This allows a different thread to cancel a lock request and
    the CANCEL AST gets delivered to the original thread.

    bz#306391 (for RHEL4) refers.

    Signed-Off-By: Patrick Caulfield
    Signed-off-by: Steven Whitehouse

    Patrick Caulfield
     
  • Under high recovery loads dlm_sendd can monopolise the CPU and cause soft lockups.

    This one extra and one moved cond_resched() make it yield a little more during
    such times keeping work moving.

    Signed-Off-By: Patrick Caulfield
    Signed-off-by: Steven Whitehouse

    Patrick Caulfield
     
  • This patch fixes the slight mess made in lowcomms closing by previous patches
    and fixes all sorts of DLM hangs.

    Signed-Off-By: Patrick Caulfield
    Signed-off-by: Steven Whitehouse

    Patrick Caulfield
     

14 Aug, 2007

6 commits

  • Fix a long standing bug where a blocking callback would be missed
    when there's a granted lock in PR mode and waiting locks in both
    PR and CW modes (and the PR lock was added to the waiting queue
    before the CW lock). The logic simply compared the numerical values
    of the modes to determine if a blocking callback was required, but in
    the one case of PR and CW, the lower valued CW mode blocks the higher
    valued PR mode. We just need to add a special check for this PR/CW
    case in the tests that decide when a blocking callback is needed.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • The last patch to clean out 'othercon' structures only fixed half the problem.
    The attached addresses the other situations too, and fixes bz#238490

    Signed-Off-By: Patrick Caulfield
    Signed-off-by: Steven Whitehouse

    Patrick Caulfield
     
  • There's a memory leak in fs/dlm/member.c::dlm_add_member().

    If "dlm_node_weight(ls->ls_name, nodeid)" returns < 0, then
    we'll return without freeing the memory allocated to the (at
    that point yet unused) 'memb'.
    This patch frees the allocated memory in that case and thus
    avoids the leak.

    Signed-off-by: Jesper Juhl
    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    Jesper Juhl
     
  • When we build a sockaddr_storage for an IP address, clear the unused parts as
    they could be used for node comparisons.

    I have seen this occasionally make sctp connections fail.

    Signed-Off-By: Patrick Caulfield
    Signed-off-by: Steven Whitehouse

    Patrick Caulfield
     
  • Fix regression in recent patch "[DLM] variable allocation" which
    attempts to dereference an "ls" struct when it's NULL.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • This patch clears the othercon pointer and frees the memory when a connnection
    is closed. This could cause a small memory leak when nodes leave the cluster.

    Signed-Off-By: Patrick Caulfield
    Signed-off-by: Steven Whitehouse

    Patrick Caulfield
     

20 Jul, 2007

2 commits

  • Slab destructors were no longer supported after Christoph's
    c59def9f222d44bb7e2f0a559f2906191a0862d7 change. They've been
    BUGs for both slab and slub, and slob never supported them
    either.

    This rips out support for the dtor pointer from kmem_cache_create()
    completely and fixes up every single callsite in the kernel (there were
    about 224, not including the slab allocator definitions themselves,
    or the documentation references).

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • Transform some calls to kmalloc/memset to a single kzalloc (or kcalloc).

    Here is a short excerpt of the semantic patch performing
    this transformation:

    @@
    type T2;
    expression x;
    identifier f,fld;
    expression E;
    expression E1,E2;
    expression e1,e2,e3,y;
    statement S;
    @@

    x =
    - kmalloc
    + kzalloc
    (E1,E2)
    ... when != \(x->fld=E;\|y=f(...,x,...);\|f(...,x,...);\|x=E;\|while(...) S\|for(e1;e2;e3) S\)
    - memset((T2)x,0,E1);

    @@
    expression E1,E2,E3;
    @@

    - kzalloc(E1 * E2,E3)
    + kcalloc(E1,E2,E3)

    [akpm@linux-foundation.org: get kcalloc args the right way around]
    Signed-off-by: Yoann Padioleau
    Cc: Richard Henderson
    Cc: Ivan Kokshaysky
    Acked-by: Russell King
    Cc: Bryan Wu
    Acked-by: Jiri Slaby
    Cc: Dave Airlie
    Acked-by: Roland Dreier
    Cc: Jiri Kosina
    Acked-by: Dmitry Torokhov
    Cc: Benjamin Herrenschmidt
    Acked-by: Mauro Carvalho Chehab
    Acked-by: Pierre Ossman
    Cc: Jeff Garzik
    Cc: "David S. Miller"
    Acked-by: Greg KH
    Cc: James Bottomley
    Cc: "Antonino A. Daplas"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Yoann Padioleau
     

11 Jul, 2007

3 commits

  • Convert the su_sem member of struct configfs_subsystem to a struct
    mutex, as that's what it is. Also convert all the users and update
    Documentation/configfs.txt and Documentation/configfs_example.c
    accordingly.

    [ Conflict in fs/dlm/config.c with commit
    3168b0780d06ace875696f8a648d04d6089654e5 manually resolved. --Mark ]

    Inspired-by: Satyam Sharma
    Signed-off-by: Joel Becker
    Signed-off-by: Mark Fasheh

    Joel Becker
     
  • Configfs being based upon sysfs code, config_group_find_obj() is probably
    so named because of the similar kset_find_obj() in sysfs. However,
    "kobject"s in sysfs become "config_item"s in configfs, so let's call it
    config_group_find_item() instead, for sake of uniformity, and make
    corresponding change in the users of this function.

    BTW a crucial difference between kset_find_obj and config_group_find_item
    is in locking expectations. kset_find_obj does its locking by itself, but
    config_group_find_item expects the *caller* to do the locking. The reason
    for this: kset's have their own locks, config_group's don't but instead
    rely on the subsystem mutex. And, subsystem needn't necessarily be around
    when config_group_find_item() is called.

    So let's state these locking semantics explicitly, and rectify the comment,
    otherwise bugs could continue to occur in future, as they did in the past
    (refer commit d82b8191e238 in gfs2-2.6-fixes.git).

    [ I also took the opportunity to fix some bad whitespace and
    double-empty lines. --Joel ]

    [ Conflict in fs/dlm/config.c with commit
    3168b0780d06ace875696f8a648d04d6089654e5 manually resolved. --Mark ]

    Signed-off-by: Satyam Sharma
    Cc: David Teigland
    Signed-off-by: Joel Becker
    Signed-off-by: Mark Fasheh

    Satyam Sharma
     
  • fs/dlm/config.c contains a useful generic macro called __CONFIGFS_ATTR
    that is similar to sysfs' __ATTR macro that makes defining attributes
    easy for any user of configfs. Separate it out into configfs.h so that
    other users (forthcoming in dynamic netconsole patchset) can use it too.

    Signed-off-by: Satyam Sharma
    Cc: David Teigland
    Signed-off-by: Joel Becker
    Signed-off-by: Mark Fasheh

    Satyam Sharma
     

09 Jul, 2007

21 commits

  • Add two more output fields (lkb_flags and rsb nodeid) to the new debugfs
    file that dumps one lock per line. Also, dump all locks instead of just
    mastered locks. Accordingly, use a suffix of _locks instead of _master.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • Cc: Steven Whitehouse
    Signed-off-by: Andrew Morton
    Signed-off-by: Steven Whitehouse

    akpm@linux-foundation.org
     
  • This patch fixes Red Hat bz#245892

    Opening a tcp connection from a cluster member to another cluster member
    targeting the dlm port it is enough to stop every dlm operation in the cluster.
    This means that GFS and rgmanager will hang.

    Signed-Off-By: Patrick Caulfield
    Signed-off-by: Steven Whitehouse

    Patrick Caulfield
     
  • Mask off the recently added DLM_LSFL_FS flag when setting the exflags.
    This way all the nodes in the lockspace aren't required to have the FS
    flag set, since we later check that exflags matches among all nodes.

    Signed-off-by: Patrick Caulfield
    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • Add a new flag, DLM_LSFL_FS, to be used when a file system creates a lockspace.
    This flag causes the dlm to use GFP_NOFS for allocations instead of GFP_KERNEL.
    (This updated version of the patch uses gfp_t for ls_allocation.)

    Signed-Off-By: Patrick Caulfield
    Signed-Off-By: David Teigland
    Signed-off-by: Steven Whitehouse

    Patrick Caulfield
     
  • This is a fix for the patch

    021d2ff3a08019260a1dc002793c92d6bf18afb6

    I left off a dlm_hold_rsb which causes the box to panic if you try to use
    debugfs. This patch fixes the problem. Sorry about that,

    Signed-off-by: Josef Bacik
    Signed-off-by: Steven Whitehouse

    Josef Bacik
     
  • This patch clears the user_data of active sockets as part of cleanup.
    This prevents any late-arriving data from trying to add jobs to the work
    queue while we are tidying up.

    Signed-Off-By: Patrick Caulfield
    Signed-Off-By: David Teigland
    Signed-off-by: Steven Whitehouse

    Patrick Caulfield
     
  • Display the initial value of the "protocol" config value in configfs.
    The default value has always been 0 in the past anyway, so it's always
    appeared to be correct.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • Add a new debugfs file that dumps a compact list of mastered locks.
    This will be used by a userland daemon to collect state for deadlock
    detection.

    Also, for the existing function that prints all lock state, lock the rsb
    before going through the lock lists since they can be changing in the
    course of normal dlm activity.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • Add a function that can be used through libdlm by a system daemon to cancel
    another process's deadlocked lock. A completion ast with EDEADLK is returned
    to the process waiting for the lock.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • Various fixes related to the new timeout feature:
    - add_timeout() missed setting TIMEWARN flag on lkb's when the
    TIMEOUT flag was already set
    - clear_proc_locks should remove a dead process's locks from the
    timeout list
    - the end-of-life calculation for user locks needs to consider that
    ETIMEDOUT is equivalent to -DLM_ECANCEL
    - make initial default timewarn_cs config value visible in configfs
    - change bit position of TIMEOUT_CANCEL flag so it's not copied to
    a remote master node
    - set timestamp on remote lkb's so a lock dump will display the time
    they've been waiting

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • A one liner fix which got missed from the earlier patches.

    Signed-off-by: Steven Whitehouse
    Cc: Fabio Massimo Di Nitto
    Cc: David Teigland

    Steven Whitehouse
     
  • In the rush to get the previous patch set sent, a compilation bug I fixed
    shortly before sending somehow got clobbered, probably by a missed quilt
    refresh or something.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • Joining the lockspace should wait for the initial round of inter-node
    config checks to complete before returning. This way, if there's a
    configuration mismatch between the joining node and the existing nodes,
    the join can fail and return an error to the application.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • Fix the error path when exiting new_lockspace(). It was kfree'ing the
    lockspace struct at the end, but that's only valid if it exits before
    kobject_register occured. After kobject_register we have to let the
    kobject do the freeing.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • When conversion deadlock is detected, cancel the conversion and return
    EDEADLK to the application. This is a new default behavior where before
    the dlm would allow the deadlock to exist indefinately.

    The DLM_LKF_NODLCKWT flag can now be used in a conversion to prevent the
    dlm from performing conversion deadlock detection/cancelation on it.
    The DLM_LKF_CONVDEADLK flag can continue to be used as before to tell the
    dlm to demote the granted mode of the lock being converted if it gets into
    a conversion deadlock.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • Change the user/kernel device interface used by libdlm:
    - Add ability for userspace to check the version of the interface. libdlm
    can now adapt to different versions of the kernel interface.
    - Increase the size of the flags passed in a lock request so all possible
    flags can be used from userspace.
    - Add an opaque "xid" value for each lock. This "transaction id" will be
    used later to associate locks with each other during deadlock detection.
    - Add a "timeout" value for each lock. This is used along with the
    DLM_LKF_TIMEOUT flag.

    Also, remove a fragment of unused code in device_read().

    This patch requires updating libdlm which is backward compatible with
    older kernels.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • New features: lock timeouts and time warnings. If the DLM_LKF_TIMEOUT
    flag is set, then the request/conversion will be canceled after waiting
    the specified number of centiseconds (specified per lock). This feature
    is only available for locks requested through libdlm (can be enabled for
    kernel dlm users if there's a use for it.)

    If the new DLM_LSFL_TIMEWARN flag is set when creating the lockspace, then
    a warning message will be sent to userspace (using genetlink) after a
    request/conversion has been waiting for a given number of centiseconds
    (configurable per node). The time warnings will be used in the future
    to do deadlock detection in userspace.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • Don't let dlm_scand run during recovery since it may try to do a resource
    directory removal while the directory nodes are changing.

    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    David Teigland
     
  • This problem was originally reported against GFS6.1, but the same issue exists
    in upstream DLM. This patch keeps the rsb iterator assigning under the rsbtbl
    list lock. Each time we process an rsb we grab a reference to it to make sure
    it is not freed out from underneath us, and then put it when we get the next rsb
    in the list or move onto another list.

    Signed-off-by: Josef Bacik
    Signed-off-by: Steven Whitehouse

    Josef Bacik
     
  • Fix two races in fs/dlm/config.c:

    (1) Grab the configfs subsystem semaphore before calling
    config_group_find_obj() in get_space(). This solves a potential race
    between get_space() and concurrent mkdir(2) or rmdir(2).

    (2) Grab a reference on the found config_item _while_ holding the configfs
    subsystem semaphore in get_comm(), and not after it. This solves a
    potential race between get_comm() and concurrent rmdir(2).

    Signed-off-by: Satyam Sharma
    Signed-off-by: David Teigland
    Signed-off-by: Steven Whitehouse

    Satyam Sharma
     

08 Jul, 2007

1 commit

  • The dependency of DLM on SYSFS got lost in
    commit 6ed7257b46709e87d79ac2b6b819b7e0c9184998 resulting in the
    following compile error with CONFIG_DLM=y, CONFIG_SYSFS=n:

    ...
    LD .tmp_vmlinux1
    fs/built-in.o: In function `dlm_lockspace_init':
    /home/bunk/linux/kernel-2.6/linux-2.6.22-rc6-mm1/fs/dlm/lockspace.c:231: undefined reference to `kernel_subsys'
    fs/built-in.o: In function `configfs_init':
    /home/bunk/linux/kernel-2.6/linux-2.6.22-rc6-mm1/fs/configfs/mount.c:143: undefined reference to `kernel_subsys'
    make[1]: *** [.tmp_vmlinux1] Error 1

    Signed-off-by: Adrian Bunk
    Signed-off-by: Linus Torvalds

    Adrian Bunk