)]}'
{
  "commit": "0a82a6239beecc95db6e05fe43ee62d16b381d38",
  "tree": "524f6417ae8128f5b1da322872e860bd4af5840d",
  "parents": [
    "b2f46fd8ef3dff2ab30f31126833f78b7480283a"
  ],
  "author": {
    "name": "Dan Williams",
    "email": "dan.j.williams@intel.com",
    "time": "Tue Jul 14 12:20:37 2009 -0700"
  },
  "committer": {
    "name": "Dan Williams",
    "email": "dan.j.williams@intel.com",
    "time": "Sat Aug 29 19:09:27 2009 -0700"
  },
  "message": "async_tx: add support for asynchronous RAID6 recovery operations\n\n async_raid6_2data_recov() recovers two data disk failures\n\n async_raid6_datap_recov() recovers a data disk and the P disk\n\nThese routines are a port of the synchronous versions found in\ndrivers/md/raid6recov.c.  The primary difference is breaking out the xor\noperations into separate calls to async_xor.  Two helper routines are\nintroduced to perform scalar multiplication where needed.\nasync_sum_product() multiplies two sources by scalar coefficients and\nthen sums (xor) the result.  async_mult() simply multiplies a single\nsource by a scalar.\n\nThis implemention also includes, in contrast to the original\nsynchronous-only code, special case handling for the 4-disk and 5-disk\narray cases.  In these situations the default N-disk algorithm will\npresent 0-source or 1-source operations to dma devices.  To cover for\ndma devices where the minimum source count is 2 we implement 4-disk and\n5-disk handling in the recovery code.\n\n[ Impact: asynchronous raid6 recovery routines for 2data and datap cases ]\n\nCc: Yuri Tikhonov \u003cyur@emcraft.com\u003e\nCc: Ilya Yanok \u003cyanok@emcraft.com\u003e\nCc: H. Peter Anvin \u003chpa@zytor.com\u003e\nCc: David Woodhouse \u003cDavid.Woodhouse@intel.com\u003e\nReviewed-by: Andre Noll \u003cmaan@systemlinux.org\u003e\nAcked-by: Maciej Sosnowski \u003cmaciej.sosnowski@intel.com\u003e\nSigned-off-by: Dan Williams \u003cdan.j.williams@intel.com\u003e\n\n\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0e48e054d69ae9ca10f522bfbb18495947761e66",
      "old_mode": 33188,
      "old_path": "Documentation/crypto/async-tx-api.txt",
      "new_id": "ba046b8fa92fb4a34a360fe54e6b997c019feb43",
      "new_mode": 33188,
      "new_path": "Documentation/crypto/async-tx-api.txt"
    },
    {
      "type": "modify",
      "old_id": "cb6d7314f1987eb56d89faaa69a84249eb05889c",
      "old_mode": 33188,
      "old_path": "crypto/async_tx/Kconfig",
      "new_id": "e5aeb2b79e6f956998b8bd0b2bc3bc882ab5067c",
      "new_mode": 33188,
      "new_path": "crypto/async_tx/Kconfig"
    },
    {
      "type": "modify",
      "old_id": "1b992658825999b5de47696f9bdec38d13485784",
      "old_mode": 33188,
      "old_path": "crypto/async_tx/Makefile",
      "new_id": "9a1a76811b807621aa2c245c0944b2241d2a82d6",
      "new_mode": 33188,
      "new_path": "crypto/async_tx/Makefile"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0c14d48c989666af1b43e8a84cd06de6761d6398",
      "new_mode": 33188,
      "new_path": "crypto/async_tx/async_raid6_recov.c"
    },
    {
      "type": "modify",
      "old_id": "e6ce5f004f984f5cf4b2fcfaae0d674679401ee5",
      "old_mode": 33188,
      "old_path": "include/linux/async_tx.h",
      "new_id": "866e61c4e2e0781489d3b9187549fc19d4a1f312",
      "new_mode": 33188,
      "new_path": "include/linux/async_tx.h"
    }
  ]
}
