)]}'
{
  "commit": "a44f13edf0ebb4e41942d0f16ca80489dcf6659d",
  "tree": "42bcbee56a62851e969292033efd600cced80ca5",
  "parents": [
    "1a387d3be2b30c90f20d49a3497a8fc0693a9d18"
  ],
  "author": {
    "name": "Dave Chinner",
    "email": "dchinner@redhat.com",
    "time": "Tue Aug 24 11:40:03 2010 +1000"
  },
  "committer": {
    "name": "Dave Chinner",
    "email": "david@fromorbit.com",
    "time": "Tue Aug 24 11:40:03 2010 +1000"
  },
  "message": "xfs: Reduce log force overhead for delayed logging\n\nDelayed logging adds some serialisation to the log force process to\nensure that it does not deference a bad commit context structure\nwhen determining if a CIL push is necessary or not. It does this by\ngrabing the CIL context lock exclusively, then dropping it before\npushing the CIL if necessary. This causes serialisation of all log\nforces and pushes regardless of whether a force is necessary or not.\nAs a result fsync heavy workloads (like dbench) can be significantly\nslower with delayed logging than without.\n\nTo avoid this penalty, copy the current sequence from the context to\nthe CIL structure when they are swapped. This allows us to do\nunlocked checks on the current sequence without having to worry\nabout dereferencing context structures that may have already been\nfreed. Hence we can remove the CIL context locking in the forcing\ncode and only call into the push code if the current context matches\nthe sequence we need to force.\n\nBy passing the sequence into the push code, we can check the\nsequence again once we have the CIL lock held exclusive and abort if\nthe sequence has already been pushed. This avoids a lock round-trip\nand unnecessary CIL pushes when we have racing push calls.\n\nThe result is that the regression in dbench performance goes away -\nthis change improves dbench performance on a ramdisk from ~2100MB/s\nto ~2500MB/s. This compares favourably to not using delayed logging\nwhich retuns ~2500MB/s for the same workload.\n\nSigned-off-by: Dave Chinner \u003cdchinner@redhat.com\u003e\nReviewed-by: Christoph Hellwig \u003chch@lst.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "925d572bf0f405e9a94be11b74549c5f760b3ec4",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_log.c",
      "new_id": "33f718f92a4849df234880dfe190069791d7bcb6",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_log.c"
    },
    {
      "type": "modify",
      "old_id": "ef8e7d9f445d535e5b9b74a378e05b37bd294449",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_log_cil.c",
      "new_id": "9768f2437bb3a233187be06bc1ff8cde65987961",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_log_cil.c"
    },
    {
      "type": "modify",
      "old_id": "8c072618965caf80476a562e7e38cae026089f88",
      "old_mode": 33188,
      "old_path": "fs/xfs/xfs_log_priv.h",
      "new_id": "ced52b98b322e3eb1be0e0c7dfc70f6096d0cd80",
      "new_mode": 33188,
      "new_path": "fs/xfs/xfs_log_priv.h"
    }
  ]
}
