diff options
Diffstat (limited to 'quotaio_meta.c')
-rw-r--r-- | quotaio_meta.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/quotaio_meta.c b/quotaio_meta.c index e52b4f4..ad6ff7a 100644 --- a/quotaio_meta.c +++ b/quotaio_meta.c @@ -8,6 +8,7 @@ #include <string.h> #include <stdlib.h> +#include <errno.h> #include <sys/types.h> @@ -55,7 +56,18 @@ static int meta_commit_dquot(struct dquot *dquot, int flags) static int meta_scan_dquots(struct quota_handle *h, int (*process_dquot)(struct dquot *dquot, char *dqname)) { - return generic_scan_dquots(h, process_dquot, vfs_get_dquot); + struct if_nextdqblk kdqblk; + int ret; + + ret = quotactl(QCMD(Q_GETNEXTQUOTA, h->qh_type), h->qh_quotadev, 0, + (void *)&kdqblk); + /* + * Fall back to scanning using passwd if Q_GETNEXTQUOTA is not + * supported + */ + if (ret < 0 && (errno == ENOSYS || errno == EINVAL)) + return generic_scan_dquots(h, process_dquot, vfs_get_dquot); + return vfs_scan_dquots(h, process_dquot); } struct quotafile_ops quotafile_ops_meta = { |