)]}'
{
  "commit": "4665079cbb2a3e17de82f2ab2940b9f97f37d65e",
  "tree": "8e51e9b9e6155eaeccf28783620a07b20a067d8d",
  "parents": [
    "d62a38d1ab350f787e4941e42a3d3e97971e38f5"
  ],
  "author": {
    "name": "Pavel Emelyanov",
    "email": "xemul@openvz.org",
    "time": "Mon Oct 08 20:38:39 2007 -0700"
  },
  "committer": {
    "name": "David S. Miller",
    "email": "davem@sunset.davemloft.net",
    "time": "Wed Oct 10 16:54:58 2007 -0700"
  },
  "message": "[NETNS]: Move some code into __init section when CONFIG_NET_NS\u003dn\n\nWith the net namespaces many code leaved the __init section,\nthus making the kernel occupy more memory than it did before.\nSince we have a config option that prohibits the namespace\ncreation, the functions that initialize/finalize some netns\nstuff are simply not needed and can be freed after the boot.\n\nCurrently, this is almost not noticeable, since few calls\nare no longer in __init, but when the namespaces will be\nmerged it will be possible to free more code. I propose to\nuse the __net_init, __net_exit and __net_initdata \"attributes\"\nfor functions/variables that are not used if the CONFIG_NET_NS\nis not set to save more space in memory.\n\nThe exiting functions cannot just reside in the __exit section,\nas noticed by David, since the init section will have\nreferences on it and the compilation will fail due to modpost\nchecks. These references can exist, since the init namespace\nnever dies and the exit callbacks are never called. So I\nintroduce the __exit_refok attribute just like it is already\ndone with the __init_refok.\n\nSigned-off-by: Pavel Emelyanov \u003cxemul@openvz.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d6997aec45ddaec150f8dfa5e54812eb80f2faab",
      "old_mode": 33188,
      "old_path": "drivers/net/loopback.c",
      "new_id": "be25aa33971cd5f51a2fbff62dcd807420f623fd",
      "new_mode": 33188,
      "new_path": "drivers/net/loopback.c"
    },
    {
      "type": "modify",
      "old_id": "85cc8e8bb8621392a0d49dd736a72cfd5a241c80",
      "old_mode": 33188,
      "old_path": "fs/proc/proc_net.c",
      "new_id": "2e91fb756e9ad27be30488bd88a5e5ac8856bf34",
      "new_mode": 33188,
      "new_path": "fs/proc/proc_net.c"
    },
    {
      "type": "modify",
      "old_id": "74b1f43bf9825b260be74c1bf71be116f9bd40fc",
      "old_mode": 33188,
      "old_path": "include/linux/init.h",
      "new_id": "f8d9d0b5cffcad16fecacaafaca541a338aec951",
      "new_mode": 33188,
      "new_path": "include/linux/init.h"
    },
    {
      "type": "modify",
      "old_id": "934c840b5941f7885f1aeb27eed4e82925f4f1e5",
      "old_mode": 33188,
      "old_path": "include/net/net_namespace.h",
      "new_id": "93aa87d328040b71877a31ee400e7adebd3e2073",
      "new_mode": 33188,
      "new_path": "include/net/net_namespace.h"
    },
    {
      "type": "modify",
      "old_id": "1aa07047826e275110743a5a5b4d7feb09692416",
      "old_mode": 33188,
      "old_path": "net/core/dev.c",
      "new_id": "e7e728aea9f3c315279612231f5b6ad64f6162e2",
      "new_mode": 33188,
      "new_path": "net/core/dev.c"
    },
    {
      "type": "modify",
      "old_id": "896b0ca5aed7c63b19ddc007ad402832bf66a8f6",
      "old_mode": 33188,
      "old_path": "net/core/dev_mcast.c",
      "new_id": "15241cf48af8a8b835a502978e1777c6c2d8ab12",
      "new_mode": 33188,
      "new_path": "net/core/dev_mcast.c"
    },
    {
      "type": "modify",
      "old_id": "46eb5ea1fbd7f253f777e14f25948bcdfe32b63d",
      "old_mode": 33188,
      "old_path": "net/netlink/af_netlink.c",
      "new_id": "3ef32825da714889079b06f796abb74aef677902",
      "new_mode": 33188,
      "new_path": "net/netlink/af_netlink.c"
    },
    {
      "type": "modify",
      "old_id": "6c145d6e89dec73d2b595a9895825a70c9bd6efe",
      "old_mode": 33188,
      "old_path": "scripts/mod/modpost.c",
      "new_id": "0a4051fbd34e24116cd55c4e758605ea683348a8",
      "new_mode": 33188,
      "new_path": "scripts/mod/modpost.c"
    }
  ]
}
