)]}'
{
  "commit": "cf7afbfeb8ceb0187348d0a1a0db61305e25f05f",
  "tree": "8b1c07c8ae6a5b3f6f050d3286b53b3d7d72c858",
  "parents": [
    "89bf67f1f080c947c92f8773482d9e57767ca292"
  ],
  "author": {
    "name": "Thomas Graf",
    "email": "tgraf@infradead.org",
    "time": "Mon Nov 22 01:31:54 2010 +0000"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@davemloft.net",
    "time": "Sat Nov 27 22:56:08 2010 -0800"
  },
  "message": "rtnl: make link af-specific updates atomic\n\nAs David pointed out correctly, updates to af-specific attributes\nare currently not atomic. If multiple changes are requested and\none of them fails, previous updates may have been applied already\nleaving the link behind in a undefined state.\n\nThis patch splits the function parse_link_af() into two functions\nvalidate_link_af() and set_link_at(). validate_link_af() is placed\nto validate_linkmsg() check for errors as early as possible before\nany changes to the link have been made. set_link_af() is called to\ncommit the changes later.\n\nThis method is not fail proof, while it is currently sufficient\nto make set_link_af() inerrable and thus 100% atomic, the\nvalidation function method will not be able to detect all error\nscenarios in the future, there will likely always be errors\ndepending on states which are f.e. not protected by rtnl_mutex\nand thus may change between validation and setting.\n\nAlso, instead of silently ignoring unknown address families and\nconfig blocks for address families which did not register a set\nfunction the errors EAFNOSUPPORT respectively EOPNOSUPPORT are\nreturned to avoid comitting 4 out of 5 update requests without\nnotifying the user.\n\nSigned-off-by: Thomas Graf \u003ctgraf@infradead.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "35be0bbcd7da03d4587098b871923d42e1618d6c",
      "old_mode": 33188,
      "old_path": "include/net/rtnetlink.h",
      "new_id": "4093ca78cf60f997e5c6a3e4eb845766ec56d6ef",
      "new_mode": 33188,
      "new_path": "include/net/rtnetlink.h"
    },
    {
      "type": "modify",
      "old_id": "bf69e5871b1a3a891a200bebe25b85d10b6a02f2",
      "old_mode": 33188,
      "old_path": "net/core/rtnetlink.c",
      "new_id": "750db57f3bb3e628b44a481c11eea954d21ce88d",
      "new_mode": 33188,
      "new_path": "net/core/rtnetlink.c"
    },
    {
      "type": "modify",
      "old_id": "71afc26c2df87996ce605d721f84cf3da47aaed2",
      "old_mode": 33188,
      "old_path": "net/ipv4/devinet.c",
      "new_id": "d9f71bae45c40ddf0231c12164dea85d32c2b883",
      "new_mode": 33188,
      "new_path": "net/ipv4/devinet.c"
    },
    {
      "type": "modify",
      "old_id": "4cf760598c2aa674bb9589b6d6d99c11d1c459fb",
      "old_mode": 33188,
      "old_path": "net/ipv6/addrconf.c",
      "new_id": "1023ad0d2b15e70797ed343cdfae0b5db41886b8",
      "new_mode": 33188,
      "new_path": "net/ipv6/addrconf.c"
    }
  ]
}
