diff options
Diffstat (limited to 'xlators/performance/write-behind/src/write-behind.c')
| -rw-r--r-- | xlators/performance/write-behind/src/write-behind.c | 21 | 
1 files changed, 9 insertions, 12 deletions
diff --git a/xlators/performance/write-behind/src/write-behind.c b/xlators/performance/write-behind/src/write-behind.c index f90abad38da..98b2f4639d3 100644 --- a/xlators/performance/write-behind/src/write-behind.c +++ b/xlators/performance/write-behind/src/write-behind.c @@ -1744,15 +1744,9 @@ wb_do_winds(wb_inode_t *wb_inode, list_head_t *tasks)  void  wb_process_queue(wb_inode_t *wb_inode)  { -    list_head_t tasks = { -        0, -    }; -    list_head_t lies = { -        0, -    }; -    list_head_t liabilities = { -        0, -    }; +    list_head_t tasks; +    list_head_t lies; +    list_head_t liabilities;      int wind_failure = 0;      INIT_LIST_HEAD(&tasks); @@ -1773,15 +1767,18 @@ wb_process_queue(wb_inode_t *wb_inode)          }          UNLOCK(&wb_inode->lock); -        wb_do_unwinds(wb_inode, &lies); +        if (!list_empty(&lies)) +            wb_do_unwinds(wb_inode, &lies); -        wb_do_winds(wb_inode, &tasks); +        if (!list_empty(&tasks)) +            wb_do_winds(wb_inode, &tasks);          /* If there is an error in wb_fulfill before winding write           * requests, we would miss invocation of wb_process_queue           * from wb_fulfill_cbk. So, retry processing again.           */ -        wind_failure = wb_fulfill(wb_inode, &liabilities); +        if (!list_empty(&liabilities)) +            wind_failure = wb_fulfill(wb_inode, &liabilities);      } while (wind_failure);      return;  | 
