{"ref":"refs/heads/illumos-taskq-port","commits":[{"author":{"name":"Prakash Surya","email":"24a77266642cd4a4ef2cfe7b1b51cf15e514d3c3@llnl.gov"},"url":"https://api.github.com/repos/Prakash-Surya/zfs/commits/e4171c3573d3084ea2f3e61eb100ab03d19c83e8","message":"Initialize tqent_flags to zero in taskq_dispatch\n\nThe tqent_flags field of an allocated taskq_ent structure was not\nexplicitly getting initialized to zero in the taskq_dispatch function.\nAs a result, if the garbage that filled that field in a newly allocated\nstructure happened to have the bit set corresponding to the\nTQENT_FLAG_PREALLOC flag, this would cause problems.\n\nIn the above scenario, the structure would get allocated in\ntaskq_dispatch and tq->tq_nalloc would be incremented just fine. The\nproblem arises in taskq_thread, as it would not be freed since the\nTQENT_FLAG_PREALLOC is set (even though the structure was never\npreallocated).\n\nIn the best case, this condition would get caught by an ASSERT in\ntaskq_destory as tq->freelist would deplete to a length of zero,\nbut tq->tq_nalloc would still be non zero. In the worst case, the ASSERT\nwould get compiled out and the function would spin, continuously\nallocating and then immediately freeing taskq_ent structures.","sha":"e4171c3573d3084ea2f3e61eb100ab03d19c83e8"},{"author":{"name":"Prakash Surya","email":"24a77266642cd4a4ef2cfe7b1b51cf15e514d3c3@llnl.gov"},"url":"https://api.github.com/repos/Prakash-Surya/zfs/commits/504b674858592e7bc897268d66285f699575c285","message":"ASSERT if a preallocated task is on the free list\n\nPreallocated tasks should never make it onto the free list of tasks.\nThus, if an element removed from the free list is found to have it's\nTQENT_FLAG_PREALLOC flag set, it is reported as an ASSERT.","sha":"504b674858592e7bc897268d66285f699575c285"}],"head":"504b674858592e7bc897268d66285f699575c285","size":2,"push_id":49689878}