)]}'
{
  "commit": "0f4b1c7e89e699f588807a914ec6e6396c851a72",
  "tree": "8b882f85f03089283f6d222bf8c7d5616a102ecd",
  "parents": [
    "501dcccdb7a2335cde07d4acb56e636182d62944"
  ],
  "author": {
    "name": "Zach Brown",
    "email": "zach.brown@oracle.com",
    "time": "Fri Jun 04 14:41:41 2010 -0700"
  },
  "committer": {
    "name": "Andy Grover",
    "email": "andy.grover@oracle.com",
    "time": "Wed Sep 08 18:15:27 2010 -0700"
  },
  "message": "rds: fix rds_send_xmit() serialization\n\nrds_send_xmit() was changed to hold an interrupt masking spinlock instead of a\nmutex so that it could be called from the IB receive tasklet path.  This broke\nthe TCP transport because its xmit method can block and masks and unmasks\ninterrupts.\n\nThis patch serializes callers to rds_send_xmit() with a simple bit instead of\nthe current spinlock or previous mutex.  This enables rds_send_xmit() to be\ncalled from any context and to call functions which block.  Getting rid of the\nc_send_lock exposes the bare c_lock acquisitions which are changed to block\ninterrupts.\n\nA waitqueue is added so that rds_conn_shutdown() can wait for callers to leave\nrds_send_xmit() before tearing down partial send state.  This lets us get rid\nof c_senders.\n\nrds_send_xmit() is changed to check the conn state after acquiring the\nRDS_IN_XMIT bit to resolve races with the shutdown path.  Previously both\nworked with the conn state and then the lock in the same order, allowing them\nto race and execute the paths concurrently.\n\nrds_send_reset() isn\u0027t racing with rds_send_xmit() now that rds_conn_shutdown()\nproperly ensures that rds_send_xmit() can\u0027t start once the conn state has been\nchanged.  We can remove its previous use of the spinlock.\n\nFinally, c_send_generation is redundant.  Callers can race to test the c_flags\nbit by simply retrying instead of racing to test the c_send_generation atomic.\n\nSigned-off-by: Zach Brown \u003czach.brown@oracle.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5bb0eec5ada3ee8e3c6bab3bf73298e6a0067584",
      "old_mode": 33188,
      "old_path": "net/rds/connection.c",
      "new_id": "89871db77f8fbc0dfe0d58ce3677b26677dfbac1",
      "new_mode": 33188,
      "new_path": "net/rds/connection.c"
    },
    {
      "type": "modify",
      "old_id": "3f91e794eae931ebfd03b111c70d403ad63d3dbb",
      "old_mode": 33188,
      "old_path": "net/rds/ib_send.c",
      "new_id": "e88cb4af009b8b7eff61829fc2312dfce569a3a7",
      "new_mode": 33188,
      "new_path": "net/rds/ib_send.c"
    },
    {
      "type": "modify",
      "old_id": "270ded76fd53115c294773d4d57b46f030cc4afe",
      "old_mode": 33188,
      "old_path": "net/rds/rds.h",
      "new_id": "4510344ce8ca3a527fa6ea46c790ff78b1fd050f",
      "new_mode": 33188,
      "new_path": "net/rds/rds.h"
    },
    {
      "type": "modify",
      "old_id": "b9e41afef32343acfda3cc2d05b2044a65358a0a",
      "old_mode": 33188,
      "old_path": "net/rds/send.c",
      "new_id": "81471b25373bef8df7d506b6cb6aed7b640e8776",
      "new_mode": 33188,
      "new_path": "net/rds/send.c"
    },
    {
      "type": "modify",
      "old_id": "7a8ca7a1d983ff58240e2ccd11c1c457cfa1b3e9",
      "old_mode": 33188,
      "old_path": "net/rds/threads.c",
      "new_id": "2bab9bf07b91e48536c9202ae98c8b0e225996f2",
      "new_mode": 33188,
      "new_path": "net/rds/threads.c"
    }
  ]
}
