On Wed, Apr 18, 2018 at 05:56:31PM +0800, Anand Jain wrote:
> @@ -155,29 +155,26 @@ static int __btrfs_map_block(struct btrfs_fs_info 
> *fs_info,
>   *
>   * uuid_mutex (global lock)
>   * ------------------------
> - * protects the fs_uuids list that tracks all per-fs fs_devices, resulting 
> from
> + * Protects the fs_uuids list that tracks all per-fs fs_devices, resulting 
> from
>   * the SCAN_DEV ioctl registration or from mount either implicitly (the first
> - * device) or requested by the device= mount option
> - *
> - * the mutex can be very coarse and can cover long-running operations
> - *
> - * protects: updates to fs_devices counters like missing devices, rw devices,
> - * seeding, structure cloning, openning/closing devices at mount/umount time
> + * device) or requested by the device= mount option.
>   *
>   * global::fs_devs - add, remove, updates to the global list
              ^^^^^^^

My typo, this should be fs_uuids.

>   * fs_devices::device_list_mutex (per-fs, with RCU)
>   * ------------------------------------------------
> - * protects updates to fs_devices::devices, ie. adding and deleting
> + * Protects updates to fs_devices::devices, ie. adding and deleting, and its
> + * counters like missing devices, rw devices, seeding, structure cloning,
> + * openning/closing devices at mount/umount time.
>   *
> - * simple list traversal with read-only actions can be done with RCU 
> protection
> + * Simple list traversal with read-only actions can be done with RCU 
> protection.
>   *
> - * may be used to exclude some operations from running concurrently without 
> any
> - * modifications to the list (see write_all_supers)
> + * May be used to exclude some operations from running concurrently without 
> any
> + * modifications to the list (see write_all_supers).

The uuid_mutex usage is a bit muddy, so far I think that most uses are
not necessary so this is in line with this patchset. In some cases we
might need to add the device_list_mutex once uuid mutex is gone.

The clear usage of the uuid_mutex is when a new fs_devices is added to
the global fs_uuids, to prevent concurrent access by device scan and
mount. Another one is the seed fs manipulation, that on the higher level
works on the linked fs_devices. And the last one is the device renames
that happen after a device appears under a different name.

So far I haven't noticed any problems during tests of for-next with this
patchset, so I guess we'd have to try harder to trigger the potential
races. Thre's no device add/delete/replace/scan stress tests. The
seeding is not very well covered by tests, so I'll keep the branch in
for-next, but more tests are welcome.
--
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