)]}'
{
  "commit": "62f383003c22cd34920d0412465eddcb1223da0d",
  "tree": "ca5091110dbf19df3f8031a590cd11229e6081e1",
  "parents": [
    "98a9416af08385f8497e9c1595113a81aefa5d49"
  ],
  "author": {
    "name": "Mike Christie",
    "email": "michaelc@cs.wisc.edu",
    "time": "Thu Aug 31 18:09:27 2006 -0400"
  },
  "committer": {
    "name": "James Bottomley",
    "email": "jejb@mulgrave.il.steeleye.com",
    "time": "Sat Sep 02 13:37:14 2006 -0500"
  },
  "message": "[SCSI] iscsi_tcp: fix padding, data digests, and IO at weird offsets\n\niscsi_tcp calculates padding by using the expected transfer length. This\nhas the problem where if we have immediate data \u003d no and initial R2T \u003d\nyes, and the transfer length ended up needing padding then we send:\n\n1. header\n2. padding which should have gone after data\n3. data\n\nBesides this bug, we also assume the target will always ask for nice\ntransfer lengths and the first burst length will always be a nice value.\nAs far as I can tell form the RFC this is not a requirement. It would be\nsilly to do this, but if someone did it we will end doing bad things.\n\nFinally the last bug in that bit of code is in our handling of the\nrecalculation of data digests when we do not send a whole iscsi_buf in\none try. The bug here is that we call crypto_digest_final on a\niscsi_sendpage error, then when we send the rest of the iscsi_buf, we\ndoiscsi_data_digest_init and this causes the previous data digest to be\nlost.\n\nAnd to make matters worse, some of these bugs are replicated over and\nover and over again for immediate data, solicited data and unsolicited\ndata. So the attached patch made over the iscsi git tree (see\nkernel.org/git for details) which I updated today to include the patches\nI said I merged, consolidates the sending of data, padding and digests\nand calculation of data digests and fixes the above bugs.\n\nSigned-off-by: Mike Christie \u003cmichaelc@cs.wisc.edu\u003e\nSigned-off-by: James Bottomley \u003cJames.Bottomley@SteelEye.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d6927f1a6b65de26eece4e099bb07525c7345d3b",
      "old_mode": 33188,
      "old_path": "drivers/scsi/iscsi_tcp.c",
      "new_id": "290c1d76cd409e752d1f74faeeea87beb1189b8b",
      "new_mode": 33188,
      "new_path": "drivers/scsi/iscsi_tcp.c"
    },
    {
      "type": "modify",
      "old_id": "aace8f70dfd761deca96c31b65b48dc5e0c43f77",
      "old_mode": 33188,
      "old_path": "drivers/scsi/iscsi_tcp.h",
      "new_id": "7e40e94d9fdc48f3d59d959e5d7b208bdcb282ed",
      "new_mode": 33188,
      "new_path": "drivers/scsi/iscsi_tcp.h"
    },
    {
      "type": "modify",
      "old_id": "9584cbc082fee79e4c65353ba1bd431e0332041f",
      "old_mode": 33188,
      "old_path": "drivers/scsi/libiscsi.c",
      "new_id": "fb65311c81ddf289d2ec29492b2ba48d83d4e023",
      "new_mode": 33188,
      "new_path": "drivers/scsi/libiscsi.c"
    }
  ]
}
