rtems_filesystem_operations_table::lock_h/unlock_h questions
Sebastian Huber
sebastian.huber at embedded-brains.de
Tue Dec 20 06:21:33 UTC 2016
On 19/12/16 22:37, Stella Laurenzo wrote:
> Following up on this question on behalf of Radu, I can infer the
> following "rules" for locking:
>
> * External locking is applied only to operations which span
> individual calls into the file system and must remain consistent.
> This seems to be done in only a handful of cases (which make sense
> but I can't attest to whether they are the only ones that should
> have external locking applied). These are all results of
> calling rtems_filesystem_instance_lock():
> o path evaluation in libcsupport/src/sup_fs_eval_path.c. I have
> not audited the correctness of this code but it seems to (be
> trying to) acquire locks as it traverses across each file
> system boundary.
> o fchdir() while performing an access check that spans two fs calls
> o fchown() for similar reasons
> o rtems_filesyste_location_free() when calling into the
> ops->freenod_h entry point.
> * The filesystem access lock can be acquired recursively.
> * Individual rtems_filesystem_operations_table entry points should
> guard their own internal state via locking as appropriate.
>
> I inferred the last point from looking at other drivers and the libio
> entry points, which make no effort to externally acquire the
> filesystem lock unless if they need it for their own consistency
> requirements. I'm left to conclude that the RFS implementation is just
> missing internal locking and should have it.
>
> Does anyone have context on this issue that would indicate otherwise?
>
The filesystem operations (rtems_filesystem_operations_table) should use
the file system instance lock and locking is done by the filesystem
layer via the lock_h/unlock_h operations. The filesystem node operations
(rtems_filesystem_file_handlers_r) are not automatically locked by the
filesystem layer, see for example msdos_file_write() which
obtains/releases the fs_info->vol_sema (= one and only lock for a FAT
filesystem instance in RTEMS).
An updated filesystem handbook would be quite nice.
--
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the users
mailing list