r339008 broke repquota for UFS. This rectifies that.
Refactor the function calls and tests so that, on UFS, the proper fields are filled out. PR: 233849 Reported by: Andre Albsmeier Reviewed by: mav, delphij MFC after: 1 month Sponsored by: iXsystems Inc Differential Revision: https://reviews.freebsd.org/D18785
This commit is contained in:
parent
10e3bebf9e
commit
148d31b83d
@ -119,6 +119,7 @@ quota_open(struct fstab *fs, int quotatype, int openflags)
|
||||
struct group *grp;
|
||||
struct stat st;
|
||||
int qcmd, serrno;
|
||||
int ufs;
|
||||
|
||||
if ((qf = calloc(1, sizeof(*qf))) == NULL)
|
||||
return (NULL);
|
||||
@ -129,15 +130,21 @@ quota_open(struct fstab *fs, int quotatype, int openflags)
|
||||
goto error;
|
||||
qf->dev = st.st_dev;
|
||||
qcmd = QCMD(Q_GETQUOTASIZE, quotatype);
|
||||
ufs = strcmp(fs->fs_vfstype, "ufs") == 0;
|
||||
/*
|
||||
* On UFS, hasquota() fills in qf->qfname. But we only care about
|
||||
* this for UFS. So we need to call hasquota() for UFS, first.
|
||||
*/
|
||||
if (ufs) {
|
||||
serrno = hasquota(fs, quotatype, qf->qfname,
|
||||
sizeof(qf->qfname));
|
||||
}
|
||||
if (quotactl(qf->fsname, qcmd, 0, &qf->wordsize) == 0)
|
||||
return (qf);
|
||||
/* We only check the quota file for ufs */
|
||||
if (strcmp(fs->fs_vfstype, "ufs")) {
|
||||
if (!ufs) {
|
||||
errno = 0;
|
||||
goto error;
|
||||
}
|
||||
serrno = hasquota(fs, quotatype, qf->qfname, sizeof(qf->qfname));
|
||||
if (serrno == 0) {
|
||||
} else if (serrno == 0) {
|
||||
errno = EOPNOTSUPP;
|
||||
goto error;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user