)]}'
{
  "commit": "3d249d4ca7d0ed6629a135ea1ea21c72286c0d80",
  "tree": "e89c8b6bbf4f8d0e4a3428304c26305eca76e4b8",
  "parents": [
    "5d70b88cd41ef0f2ac0caaab4fd492dd686feee6"
  ],
  "author": {
    "name": "Jiri Pirko",
    "email": "jpirko@redhat.com",
    "time": "Fri Nov 11 22:16:48 2011 +0000"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Sun Nov 13 16:10:10 2011 -0500"
  },
  "message": "net: introduce ethernet teaming device\n\nThis patch introduces new network device called team. It supposes to be\nvery fast, simple, userspace-driven alternative to existing bonding\ndriver.\n\nUserspace library called libteam with couple of demo apps is available\nhere:\nhttps://github.com/jpirko/libteam\nNote it\u0027s still in its dipers atm.\n\nteam\u003c-\u003elibteam use generic netlink for communication. That and rtnl\nsuppose to be the only way to configure team device, no sysfs etc.\n\nPython binding of libteam was recently introduced.\nDaemon providing arpmon/miimon active-backup functionality will be\nintroduced shortly. All what\u0027s necessary is already implemented in\nkernel team driver.\n\nv7-\u003ev8:\n\t- check ndo_ndo_vlan_rx_[add/kill]_vid functions before calling\n\t  them.\n\t- use dev_kfree_skb_any() instead of dev_kfree_skb()\n\nv6-\u003ev7:\n\t- transmit and receive functions are not checked in hot paths.\n\t  That also resolves memory leak on transmit when no port is\n\t  present\n\nv5-\u003ev6:\n\t- changed couple of _rcu calls to non _rcu ones in non-readers\n\nv4-\u003ev5:\n\t- team_change_mtu() uses team-\u003elock while travesing though port\n\t  list\n\t- mac address changes are moved completely to jurisdiction of\n\t  userspace daemon. This way the daemon can do FOM1, FOM2 and\n\t  possibly other weird things with mac addresses.\n\t  Only round-robin mode sets up all ports to bond\u0027s address then\n\t  enslaved.\n\t- Extended Kconfig text\n\nv3-\u003ev4:\n\t- remove redundant synchronize_rcu from __team_change_mode()\n\t- revert \"set and clear of mode_ops happens per pointer, not per\n\t  byte\"\n\t- extend comment of function __team_change_mode()\n\nv2-\u003ev3:\n\t- team_change_mtu() uses rcu version of list traversal to unwind\n\t- set and clear of mode_ops happens per pointer, not per byte\n\t- port hashlist changed to be embedded into team structure\n\t- error branch in team_port_enter() does cleanup now\n\t- fixed rtln-\u003ertnl\n\nv1-\u003ev2:\n\t- modes are made as modules. Makes team more modular and\n\t  extendable.\n\t- several commenters\u0027 nitpicks found on v1 were fixed\n\t- several other bugs were fixed.\n\t- note I ignored Eric\u0027s comment about roundrobin port selector\n\t  as Eric\u0027s way may be easily implemented as another mode (mode\n\t  \"random\") in future.\n\nSigned-off-by: Jiri Pirko \u003cjpirko@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5a013686b9ea1fd45902340b551f9524f091b857",
      "new_mode": 33188,
      "new_path": "Documentation/networking/team.txt"
    },
    {
      "type": "modify",
      "old_id": "4808256446f298437ea00cd5a229376806d868b9",
      "old_mode": 33188,
      "old_path": "MAINTAINERS",
      "new_id": "8d941692c3947ccb168e83cad558f47edf8ef577",
      "new_mode": 33188,
      "new_path": "MAINTAINERS"
    },
    {
      "type": "modify",
      "old_id": "583f66cd5bbd63dc199468b87b96baf32582bcb1",
      "old_mode": 33188,
      "old_path": "drivers/net/Kconfig",
      "new_id": "b3020bea39e42b6c943f8846e4c5fb033d0048fa",
      "new_mode": 33188,
      "new_path": "drivers/net/Kconfig"
    },
    {
      "type": "modify",
      "old_id": "fa877cd2b1393cfd09d107355dc5c4f4526008dc",
      "old_mode": 33188,
      "old_path": "drivers/net/Makefile",
      "new_id": "4e4ebfe1aa535367b15b3e480c657215b163a5d2",
      "new_mode": 33188,
      "new_path": "drivers/net/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "248a144033cacd3df323d8014e259fd730ce8dfc",
      "new_mode": 33188,
      "new_path": "drivers/net/team/Kconfig"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "85f2028a87afb9d6442e8db74e6be156fbc632b7",
      "new_mode": 33188,
      "new_path": "drivers/net/team/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "60672bb0996034653de521c4301eb043ef804cde",
      "new_mode": 33188,
      "new_path": "drivers/net/team/team.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6fe920c440b34a9b9d15916d62b75e59536c4a7f",
      "new_mode": 33188,
      "new_path": "drivers/net/team/team_mode_activebackup.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a0e8f806331af591e2faa3e3d8926f58b5acb392",
      "new_mode": 33188,
      "new_path": "drivers/net/team/team_mode_roundrobin.c"
    },
    {
      "type": "modify",
      "old_id": "619b5657af77b232541a56a6e3cd06d7f2693210",
      "old_mode": 33188,
      "old_path": "include/linux/Kbuild",
      "new_id": "0b091b32267da47cb540280223f91f19e0d9d76c",
      "new_mode": 33188,
      "new_path": "include/linux/Kbuild"
    },
    {
      "type": "modify",
      "old_id": "db20bd4fd16b9189534a0cc15aa6335925cd3ace",
      "old_mode": 33188,
      "old_path": "include/linux/if.h",
      "new_id": "06b6ef60c821a43be68135d8fb4055c2425ff441",
      "new_mode": 33188,
      "new_path": "include/linux/if.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "14f6388f5460de727063311f533a0449a68d89fd",
      "new_mode": 33188,
      "new_path": "include/linux/if_team.h"
    }
  ]
}
