11 Oct, 2007

40 commits

  • Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • Now to convert the ackvec code to ktime_t so that we can get rid of
    dccp_timestamp and the epoch thing in dccp_sock.

    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • First user will be the DCCP transport networking protocol.

    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • The code was too complicated, if p > 0 in ccid3_hc_tx_no_feedback_timer the
    timestamp was being obtained to be passed to ccid3_hc_tx_update_x, where only
    if p > 0 the timestamp was needed, so just leave it to ccid3_hc_tx_update_x to
    obtain the timestamp if needed.

    This will help in the upcoming changesets where we'll convert t_ld to ktime_t.
    We'll eventually try to reuse ktime_get_real() calls again.

    Signed-off-by: Arnaldo Carvalho de Melo
    Signed-off-by: David S. Miller

    Arnaldo Carvalho de Melo
     
  • This patch introduces autotuning to the sctp buffer management code
    similar to the TCP. The buffer space can be grown if the advertised
    receive window still has room. This might happen if small message
    sizes are used, which is common in telecom environmens.
    New tunables are introduced that provide limits to buffer growth
    and memory pressure is entered if to much buffer spaces is used.

    Signed-off-by: Neil Horman
    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Neil Horman
     
  • Several get/set functions can be handled by a passing the ethtool_op
    function pointer directly to a generic function. This permits deletion
    of a fair bit of redundant code.

    Signed-off-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Jeff Garzik
     
  • Signed-off-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Jeff Garzik
     
  • Signed-off-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Jeff Garzik
     
  • Signed-off-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Jeff Garzik
     
  • Based upon initial work by Keiichi Kii .

    This patch introduces support for dynamic reconfiguration (adding, removing
    and/or modifying parameters of netconsole targets at runtime) using a
    userspace interface exported via configfs. Documentation is also updated
    accordingly.

    Issues and brief design overview:

    (1) Kernel-initiated creation / destruction of kernel objects is not
    possible with configfs -- the lifetimes of the "config items" is managed
    exclusively from userspace. But netconsole must support boot/module
    params too, and these are parsed in kernel and hence netpolls must be
    setup from the kernel. Joel Becker suggested to separately manage the
    lifetimes of the two kinds of netconsole_target objects -- those created
    via configfs mkdir(2) from userspace and those specified from the
    boot/module option string. This adds complexity and some redundancy here
    and also means that boot/module param-created targets are not exposed
    through the configfs namespace (and hence cannot be updated / destroyed
    dynamically). However, this saves us from locking / refcounting
    complexities that would need to be introduced in configfs to support
    kernel-initiated item creation / destroy there.

    (2) In configfs, item creation takes place in the call chain of the
    mkdir(2) syscall in the driver subsystem. If we used an ioctl(2) to
    create / destroy objects from userspace, the special userspace program is
    able to fill out the structure to be passed into the ioctl and hence
    specify attributes such as local interface that are required at the time
    we set up the netpoll. For configfs, this information is not available at
    the time of mkdir(2). So, we keep all newly-created targets (via
    configfs) disabled by default. The user is expected to set various
    attributes appropriately (including the local network interface if
    required) and then write(2) "1" to the "enabled" attribute. Thus,
    netpoll_setup() is then called on the set parameters in the context of
    _this_ write(2) on the "enabled" attribute itself. This design enables
    the user to reconfigure existing netconsole targets at runtime to be
    attached to newly-come-up interfaces that may not have existed when
    netconsole was loaded or when the targets were actually created. All this
    effectively enables us to get rid of custom ioctls.

    (3) Ultra-paranoid configfs attribute show() and store() operations, with
    sanity and input range checking, using only safe string primitives, and
    compliant with the recommendations in Documentation/filesystems/sysfs.txt.

    (4) A new function netpoll_print_options() is created in the netpoll API,
    that just prints out the configured parameters for a netpoll structure.
    netpoll_parse_options() is modified to use that and it is also exported to
    be used from netconsole.

    Signed-off-by: Satyam Sharma
    Acked-by: Keiichi Kii
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • Based upon initial work by Keiichi Kii .

    This patch introduces support for multiple targets, independent of
    CONFIG_NETCONSOLE_DYNAMIC -- this is useful even in the default case and
    (including the infrastructure introduced in previous patches) doesn't really
    add too many bytes to module text. All the complexity (and size) comes with
    the dynamic reconfigurability / userspace interface patch, and so it's
    plausible users may want to keep this enabled but that disabled (say to avoid
    a dependency on CONFIG_CONFIGFS_FS too).

    Also update documentation to mention the use of ";" separator to specify
    multiple logging targets in the boot/module option string.

    Brief overview:

    We maintain a target_list (and corresponding lock). Get rid of the static
    "default_target" and introduce allocation and release functions for our
    netconsole_target objects (but keeping sure to preserve previous behaviour
    such as default values). During init_netconsole(), ";" is used as the
    separator to identify multiple target specifications in the boot/module option
    string. The target specifications are parsed and netpolls setup. During
    exit, the target_list is torn down and all items released.

    Signed-off-by: Satyam Sharma
    Signed-off-by: Keiichi Kii
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • Based upon initial work by Keiichi Kii .

    To update fields of underlying netpoll structure at runtime on corresponding
    NETDEV_CHANGEADDR or NETDEV_CHANGENAME notifications.

    ioctl(SIOCSIFHWADDR or SIOCSIFNAME) could be used to change the hardware/MAC
    address or name of the local interface that our netpoll is attached to.
    Whenever this happens, netdev notifier chain is called out with the
    NETDEV_CHANGEADDR or NETDEV_CHANGENAME event message. We respond to that and
    update the local_mac or dev_name field of the struct netpoll. This makes
    sense anyway, but is especially required for dynamic netconsole because the
    netpoll structure's internal members become user visible files when either
    sysfs or configfs are used. So this helps us to keep up with the MAC
    address/name changes and keep values in struct netpoll uptodate.

    [ Note that ioctl(SIOCSIFADDR) to change IP address of interface at
    runtime is not handled (to update local_ip of netpoll) on purpose --
    some setups may set the local_ip to a private address, not necessary
    the actual IP address of the sender host, as presently allowed. ]

    Signed-off-by: Satyam Sharma
    Signed-off-by: Keiichi Kii
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • Based upon initial work by Keiichi Kii .

    Introduce a wrapper structure over netpoll to represent logging targets
    configured in netconsole. This will get extended with other members in
    further patches.

    This is done independent of the (to-be-introduced) NETCONSOLE_DYNAMIC config
    option so that we're able to drastically cut down on the #ifdef complexity of
    final netconsole.c. Also, struct netconsole_target would be required for
    multiple targets support also, and not just dynamic reconfigurability.

    Signed-off-by: Satyam Sharma
    Signed-off-by: Keiichi Kii
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • Based upon initial work by Keiichi Kii .

    Add some useful general-purpose tips. Also suggest solution for the frequent
    problem of console loglevel set too low numerically (i.e. for high priority
    messages only) on the sender.

    Signed-off-by: Satyam Sharma
    Acked-by: Keiichi Kii
    Acked-by: Matt Mackall
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • Based upon initial work by Keiichi Kii .

    Avoid unnecessarily disabling interrupts and calling netpoll_send_udp() if the
    corresponding local interface is not up.

    Signed-off-by: Satyam Sharma
    Acked-by: Keiichi Kii
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • Based upon initial work by Keiichi Kii .

    Presently, boot/module parameters are set up quite differently for the case of
    built-in netconsole (__setup() -> obsolete_checksetup() ->
    netpoll_parse_options() -> strlen(config) == 0 in init_netconsole()) vs
    modular netconsole (module_param_string() -> string copied to the config
    variable -> strlen(config) != 0 init_netconsole() -> netpoll_parse_options()).

    This patch makes both of them similar by doing exactly the equivalent of a
    module_param_string() in option_setup() also -- just copying the param string
    passed from the kernel command line into "config" variable. So,
    strlen(config) != 0 in both cases, and netpoll_parse_options() is always
    called from init_netconsole(), thus making the setup logic for both cases
    similar.

    Now, option_setup() is only ever called / used for the built-in case, so we
    put it inside a #ifndef MODULE, otherwise gcc will complain about
    option_setup() being "defined but not used". Also, the "configured" variable
    is redundant with this patch and hence removed.

    Signed-off-by: Satyam Sharma
    Signed-off-by: Keiichi Kii
    Acked-by: Matt Mackall
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • Based upon initial work by Keiichi Kii .

    The (!np.dev) check in write_msg() is bogus (always false), because: np.dev is
    set by netpoll_setup(), which is called by init_netconsole() before
    register_console(), so write_msg() cannot be triggered unless netpoll_setup()
    successfully set np.dev. Also np.dev cannot go away from under us, because
    netpoll_setup() grabs us reference on it. So let's remove the bogus check.

    Signed-off-by: Satyam Sharma
    Acked-by: Keiichi Kii
    Acked-by: Matt Mackall
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • Based upon initial work by Keiichi Kii .

    (1) Remove unwanted headers.
    (2) Mark __init and __exit as appropriate.
    (3) Various trivial codingstyle and prettification stuff.

    Signed-off-by: Satyam Sharma
    Signed-off-by: Keiichi Kii
    Acked-by: Matt Mackall
    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Satyam Sharma
     
  • This patch converts the messy macro for MASK_PFX to inline function
    and expands TKEY_GET_MASK in the one place it is used.

    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Stephen Hemminger
     
  • Try this out:
    * replace macro's with inlines
    * get rid of places doing multiple evaluations of NODE_PARENT

    [akpm@linux-foundation.org: rcu_dereference wants an lval]

    Signed-off-by: Andrew Morton
    Signed-off-by: David S. Miller

    Stephen Hemminger
     
  • This stale info came from the original idea, which proved to be
    unnecessarily complex, sacked_out > 0 is easy to do and that when
    it's going to be needed anyway (it _can_ be valid also when
    sacked_out == 0 but there's not going to be a guarantee about it
    for now).

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • Previously code had IsReno/IsFack defined as macros that were
    local to tcp_input.c though sack_ok field has user elsewhere too
    for the same purpose. This changes them to static inlines as
    preferred according the current coding style and unifies the
    access to sack_ok across multiple files. Magic bitops of sack_ok
    for FACK and DSACK are also abstracted to functions with
    appropriate names.

    Note:
    - One sack_ok = 1 remains but that's self explanary, i.e., it
    enables sack
    - Couple of !IsReno cases are changed to tcp_is_sack
    - There were no users for IsDSack => I dropped it

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • BUG_ON is an overkill. In fact, I was mislead by BUG_TRAP
    severity (equals to WARN_ON) which is much lower than BUG_ON's
    (that panics).

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • Previously TCP had a transitional state during which reno
    counted segments that are already below the current window into
    sacked_out, which is now prevented. In addition, re-try now
    the unconditional S+L skb catching.

    This approach conservatively calls just remove_sack and leaves
    reset_sack() calls alone. The best solution to the whole problem
    would be to first calculate the new sacked_out fully (this patch
    does not move reno_sack_reset calls from original sites and thus
    does not implement this). However, that would require very
    invasive change to fastretrans_alert (perhaps even slicing it to
    two halves). Alternatively, all callers of tcp_packets_in_flight
    (i.e., users that depend on sacked_out) should be postponed
    until the new sacked_out has been calculated but it isn't any
    simpler alternative.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • This happens rather infrequently and is only possible during
    FRTO. We must not allow TCP to slip to Open state because
    tcp_fastretrans_alert might then not be called on it's time
    when FRTO has exited. This become a problem when left_out
    got removed and was replaced by just sacked_out.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • tcp_verify_left_out is useful for verifying S+L condition, so
    add it back to couple of places in where the code was not
    calling to tcp_sync_left_out but used own ad-hoc solution
    (before the tcp_sync_left_out got removed).

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • Left_out was dropped a while ago, thus leaving verifying
    consistency of the "left out" as only task for the function in
    question. Thus make it's name more appropriate.

    In addition, it is intentionally converted to #define instead
    of static inline because the location of the invariant failure
    is the most important thing to have if this ever triggers. I
    think it would have been helpful e.g. in this case where the
    location of the failure point had to be based on some quesswork:
    http://lkml.org/lkml/2007/5/2/464
    ...Luckily the guesswork seems to have proved to be correct.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • tp->left_out got removed but nothing came to replace it back
    then (users just did addition by themselves), so add function
    for users now.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • It is easily calculable when needed and user are not that many
    after all.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • There is no need for such check in pkts_acked because the
    callback is not invoked unless at least one segment got fully
    ACKed (i.e., the snd_una moved past skb's end_seq) by the
    cumulative ACK's snd_una advancement.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • No other users exist for tcp_ecn.h. Very few things remain in
    tcp.h, for most TCP ECN functions callers reside within a
    single .c file and can be placed there.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • In addition, added a reference about the purpose of the loop.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen
     
  • F-RTO does not touch SACKED_ACKED bits at all, so there is no
    need to recount them in tcp_enter_frto_loss. After removal of
    the else branch, nested ifs can be combined.

    This must also reset sacked_out when SACK is not in use as TCP
    could have received some duplicate ACKs prior RTO. To achieve
    that in a sane manner, tcp_reset_reno_sack was re-placed by the
    previous patch.

    Signed-off-by: Ilpo Järvinen
    Signed-off-by: David S. Miller

    Ilpo Järvinen