Perhaps something like an fsctl() would be a good approach.
Quotactl() is very close. Things like quotactl() could be
folded into an fsctl(). Changing between r/w and r/o would
be really easy. Freezing/unfreezing would too which is needed
for LVM-based snapshots and in certain replication scenarios.
I hasten to add: resizing an online volume is another
likely use of fsctl().
For some things I'm doing I overload quotactl() to do
fsctl() operations.
Regards,
-gww