> There are a few problems in the Linux quota code which make it
> impossible to perform quota updates transactionally when using a
> journaled filesystem.
> Basically we have the following problems:
> * The underlying filesystem does not know which files are the quota
> files, so cannot tell when to apply journaling consistency
> guarantees to data writes
> * "chown" is not transactional: the filesystem is given no
> opportunity to wrap the quota transfer and the owner-attribute
> notify-change call into a single transaction.
In my quota fix this has changed a bit as now filesystem's notify_change()
is calling dquot_transfer() (it was needed due to some races and I think it's
also more consistent with how other quota calls work). So this problem
should exist no more.
> All of these could be fixed very easily (at least for ext3) if it were
> possible for ext3 to install its own version of the superblock->dq_ops
> quota operations (which would just be simple wrappers around the
> existing quota calls). However, the current sys_quotactl installs the
> default quota_ops into the superblock on quota_on without any chance
> for the filesystem to override it.
> The addition of an "init_quota" method to the super_operations struct,
> with quota_on calling this and defaulting to installing the default
> quota_ops if the method is NULL, ought to be sufficient to let ext3
> get quotas right in all cases as far as I can see.
Actually I was proposing something similar in my reaction on dquot hang in
ext3... The only difference was that I proposed to install dq_ops in
foo_read_super() so that it will be more consistent with how other callbacks
work. And in my fix of quota I removed testing of dq_ops being NULL so
operations can be set during all life (mount time) of filesystem.