{"action":"closed","issue":{"url":"https://api.github.com/repos/akiradeveloper/dm-writeboost/issues/108","repository_url":"https://api.github.com/repos/akiradeveloper/dm-writeboost","labels_url":"https://api.github.com/repos/akiradeveloper/dm-writeboost/issues/108/labels{/name}","comments_url":"https://api.github.com/repos/akiradeveloper/dm-writeboost/issues/108/comments","events_url":"https://api.github.com/repos/akiradeveloper/dm-writeboost/issues/108/events","html_url":"https://github.com/akiradeveloper/dm-writeboost/issues/108","id":157391424,"number":108,"title":"wait after writeback failure in adaptive moment","user":{"login":"akiradeveloper","id":785824,"avatar_url":"https://avatars.githubusercontent.com/u/785824?v=3","gravatar_id":"","url":"https://api.github.com/users/akiradeveloper","html_url":"https://github.com/akiradeveloper","followers_url":"https://api.github.com/users/akiradeveloper/followers","following_url":"https://api.github.com/users/akiradeveloper/following{/other_user}","gists_url":"https://api.github.com/users/akiradeveloper/gists{/gist_id}","starred_url":"https://api.github.com/users/akiradeveloper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akiradeveloper/subscriptions","organizations_url":"https://api.github.com/users/akiradeveloper/orgs","repos_url":"https://api.github.com/users/akiradeveloper/repos","events_url":"https://api.github.com/users/akiradeveloper/events{/privacy}","received_events_url":"https://api.github.com/users/akiradeveloper/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/akiradeveloper/dm-writeboost/labels/enhancement","name":"enhancement","color":"84b6eb"}],"state":"closed","locked":false,"assignee":{"login":"akiradeveloper","id":785824,"avatar_url":"https://avatars.githubusercontent.com/u/785824?v=3","gravatar_id":"","url":"https://api.github.com/users/akiradeveloper","html_url":"https://github.com/akiradeveloper","followers_url":"https://api.github.com/users/akiradeveloper/followers","following_url":"https://api.github.com/users/akiradeveloper/following{/other_user}","gists_url":"https://api.github.com/users/akiradeveloper/gists{/gist_id}","starred_url":"https://api.github.com/users/akiradeveloper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akiradeveloper/subscriptions","organizations_url":"https://api.github.com/users/akiradeveloper/orgs","repos_url":"https://api.github.com/users/akiradeveloper/repos","events_url":"https://api.github.com/users/akiradeveloper/events{/privacy}","received_events_url":"https://api.github.com/users/akiradeveloper/received_events","type":"User","site_admin":false},"assignees":[{"login":"akiradeveloper","id":785824,"avatar_url":"https://avatars.githubusercontent.com/u/785824?v=3","gravatar_id":"","url":"https://api.github.com/users/akiradeveloper","html_url":"https://github.com/akiradeveloper","followers_url":"https://api.github.com/users/akiradeveloper/followers","following_url":"https://api.github.com/users/akiradeveloper/following{/other_user}","gists_url":"https://api.github.com/users/akiradeveloper/gists{/gist_id}","starred_url":"https://api.github.com/users/akiradeveloper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akiradeveloper/subscriptions","organizations_url":"https://api.github.com/users/akiradeveloper/orgs","repos_url":"https://api.github.com/users/akiradeveloper/repos","events_url":"https://api.github.com/users/akiradeveloper/events{/privacy}","received_events_url":"https://api.github.com/users/akiradeveloper/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/akiradeveloper/dm-writeboost/milestones/7","html_url":"https://github.com/akiradeveloper/dm-writeboost/milestones/2.2.1","labels_url":"https://api.github.com/repos/akiradeveloper/dm-writeboost/milestones/7/labels","id":1794544,"number":7,"title":"2.2.1","description":null,"creator":{"login":"akiradeveloper","id":785824,"avatar_url":"https://avatars.githubusercontent.com/u/785824?v=3","gravatar_id":"","url":"https://api.github.com/users/akiradeveloper","html_url":"https://github.com/akiradeveloper","followers_url":"https://api.github.com/users/akiradeveloper/followers","following_url":"https://api.github.com/users/akiradeveloper/following{/other_user}","gists_url":"https://api.github.com/users/akiradeveloper/gists{/gist_id}","starred_url":"https://api.github.com/users/akiradeveloper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akiradeveloper/subscriptions","organizations_url":"https://api.github.com/users/akiradeveloper/orgs","repos_url":"https://api.github.com/users/akiradeveloper/repos","events_url":"https://api.github.com/users/akiradeveloper/events{/privacy}","received_events_url":"https://api.github.com/users/akiradeveloper/received_events","type":"User","site_admin":false},"open_issues":0,"closed_issues":6,"state":"open","created_at":"2016-05-29T15:26:45Z","updated_at":"2016-07-18T08:58:21Z","due_on":null,"closed_at":null},"comments":1,"created_at":"2016-05-29T15:31:25Z","updated_at":"2016-07-18T08:58:20Z","closed_at":"2016-07-18T08:58:20Z","body":"```c\r\nstatic void do_writeback_segs(struct wb_device *wb)\r\n{\r\n\tsize_t k;\r\n\tstruct writeback_segment *writeback_seg;\r\n\r\n\twhile (!try_writeback_segs(wb)) {}\r\n```\r\n\r\nWhen write-backing segments failed, writeboost retries until all segments are successfully written in the backing store.\r\n\r\nBut, let's consider the reason why the writeback IO failed. The most typical reason other than mechanical  failure is the backing store is too busy and drop some IO portions.\r\n\r\nWaiting some moment so the backing store gets available rather than retrying soon after failure is a good idea. But how long is the moment? The very typical manner for such problem is adaptive wait time: starts from 1 and then 2, 4, 8 ... Extending the wait time on every failure makes us avoid reproducing the bad situation in the backing store every retries.\r\n\r\nAlso, I will make this change the other part in `flush_proc`\r\n\r\n```c\r\nvoid flush_proc(struct work_struct *work)\r\n{\r\n\t... \r\n\twhile (wb_io(&io_req, 1, &region, NULL, false)) {}\r\n```\r\n\r\nNOTE: this isn't a bug fix and IO failure is very very seldom: still the most frequent reason is the backing store is mechanically broken."}}
{"actor":{"display_login":"akiradeveloper"}}