On Tue, 28 Jan 2014 09:55:58 -0500, Josef Bacik wrote:
> 
> On 01/14/2014 07:31 AM, Miao Xie wrote:
>> There was a problem in the old code:
>> If we failed to log the csum, we would free all the ordered extents in the 
>> log list
>> including those ordered extents that were logged successfully, it would make 
>> the
>> log committer not to wait for the completion of the ordered extents.
>>
>> This patch doesn't insert the ordered extents that is about to be logged into
>> a global list, instead, we insert them into a local list. If we log the 
>> ordered
>> extents successfully, we splice them with the global list, or we will throw 
>> them
>> away, then do full sync. It can also reduce the lock contention and the 
>> traverse
>> time of list.
>>
> If we fail to log the csums we'll return an error and commit the transaction 
> so it doesn't matter that we free all the ordered extents, everything will be 
> waited on properly.  Thanks,


No. Maybe my explanation is not clear. Please consider the following case:

Task1 (sync file1)              Task2 (sync file2)
btrfs_sync_file()
                                btrfs_sync_file()
  start_log_trans()
                                  start_log_trans()
  btrfs_get_logged_extents()
  btrfs_log_changed_extents()
                                  btrfs_get_logged_extents()
                                  btrfs_log_changed_extents() failed
                                  btrfs_free_logged_extents()
                                    this function will free all logged extents
                                    including the ones that are inserted by 
task1
  btrfs_end_log_trans()
  btrfs_sync_log()
    btrfs_wait_logged_extents()
      but no extents to be
      waited
  sync end
                                  btrfs_wait_ordered_extents()
                                    but this operation just wait for file2's
                                    extents that is in the specified range.
                                  btrfs_commit_transaction()
                                    the committer also doesn't wait for the 
extents
                                    of file1

Thanks
Miao
  
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to