2012-05-22 19:40:25

by Mike Frysinger

[permalink] [raw]
Subject: [PATCH] libquota: add a quotactl prototype

The commit 0df8a27bbaf51b55c0e8c3a533ef4c2ff9d79c9f removed the system
quota.h include, but in doing so, added the problem:
mkquota.c:55:2: warning: implicit declaration of function 'quotactl'

Since we're maintaining a copy of quota.h, add a proper func prototype.

Signed-off-by: Mike Frysinger <[email protected]>
---
lib/quota/quota.h | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/lib/quota/quota.h b/lib/quota/quota.h
index a943ec6..3eaec1d 100644
--- a/lib/quota/quota.h
+++ b/lib/quota/quota.h
@@ -152,4 +152,9 @@ enum {
};
#define QUOTA_NL_A_MAX (__QUOTA_NL_A_MAX - 1)

+#ifdef HAVE_QUOTACTL
+extern int quotactl(int __cmd, const char *__special, int __id,
+ caddr_t __addr);
+#endif
+
#endif /* _QUOTA_ */
--
1.7.8.6



2012-05-28 14:20:35

by Theodore Ts'o

[permalink] [raw]
Subject: Re: libquota: add a quotactl prototype

On Tue, May 22, 2012 at 09:41:29AM -0000, Mike Frysinger wrote:
> The commit 0df8a27bbaf51b55c0e8c3a533ef4c2ff9d79c9f removed the system
> quota.h include, but in doing so, added the problem:
> mkquota.c:55:2: warning: implicit declaration of function 'quotactl'
>
> Since we're maintaining a copy of quota.h, add a proper func prototype.
>
> Signed-off-by: Mike Frysinger <[email protected]>

Thanks, applied.

- Ted

2012-05-28 14:45:05

by Theodore Ts'o

[permalink] [raw]
Subject: Re: libquota: add a quotactl prototype

On Mon, May 28, 2012 at 10:20:32AM -0400, Ted Ts'o wrote:
> On Tue, May 22, 2012 at 09:41:29AM -0000, Mike Frysinger wrote:
> > The commit 0df8a27bbaf51b55c0e8c3a533ef4c2ff9d79c9f removed the system
> > quota.h include, but in doing so, added the problem:
> > mkquota.c:55:2: warning: implicit declaration of function 'quotactl'
> >
> > Since we're maintaining a copy of quota.h, add a proper func prototype.
> >
> > Signed-off-by: Mike Frysinger <[email protected]>
>
> Thanks, applied.

Your patch turned out to be problematic, since caddr_t isn't always
being defined by the header files (only if USE_BSD is defined). As it
turns out, there's no real need to use the quotactl() system call at
all in e2fsprogs, so I've applied this patch instead.

I believe that there's more opportunities to simplify and cleanup
libquota, which is why I'm glad we never exported it as an external
library. In fact, I'm seriously considering renaming it
"libinternal", and then moving things like profile.c and other utility
functions currently being informally shared between e2fsck and mke2fs
(either via .o or code duplication) into libinternal.

- Ted

commit 3b802e43d9276a13cbc75144087cbf017672ca6c
Author: Theodore Ts'o <[email protected]>
Date: Mon May 28 10:38:06 2012 -0400

libquota: remove quota_is_on() which was the last user of quotactl()

The quotactl() system call was being used without the use of a
function prototype. On closer examination, it turns out the one user
of that system call was the quota_is_on() function, which is not used
by e2fsprogs at all. Since libquota is an e2fsprogs-internal library,
and not one that we plan to export any time soon, the simplest thing
to do is to simply remove quota_is_on(), which in turn allows us to
remove all of the infrastructure around using the Linux-specific
quotactl() system call.

Signed-off-by: "Theodore Ts'o" <[email protected]>

diff --git a/configure b/configure
index ae599cd..b741112 100755
--- a/configure
+++ b/configure
@@ -10917,7 +10917,7 @@ if test "$ac_res" != no; then :
fi

fi
-for ac_func in __secure_getenv backtrace blkid_probe_get_topology chflags fallocate fallocate64 fchown fdatasync fstat64 ftruncate64 getdtablesize getmntinfo getpwuid_r getrlimit getrusage jrand48 llseek lseek64 mallinfo mbstowcs memalign mmap msync nanosleep open64 pathconf posix_fadvise posix_memalign prctl quotactl setmntent setresgid setresuid srandom strcasecmp strdup strnlen strptime strtoull sync_file_range sysconf usleep utime valloc
+for ac_func in __secure_getenv backtrace blkid_probe_get_topology chflags fallocate fallocate64 fchown fdatasync fstat64 ftruncate64 getdtablesize getmntinfo getpwuid_r getrlimit getrusage jrand48 llseek lseek64 mallinfo mbstowcs memalign mmap msync nanosleep open64 pathconf posix_fadvise posix_memalign prctl setmntent setresgid setresuid srandom strcasecmp strdup strnlen strptime strtoull sync_file_range sysconf usleep utime valloc
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
diff --git a/configure.in b/configure.in
index 83a6a1d..aa4c777 100644
--- a/configure.in
+++ b/configure.in
@@ -1003,7 +1003,6 @@ AC_CHECK_FUNCS(m4_flatten([
posix_fadvise
posix_memalign
prctl
- quotactl
setmntent
setresgid
setresuid
diff --git a/lib/config.h.in b/lib/config.h.in
index 18539c6..90e9743 100644
--- a/lib/config.h.in
+++ b/lib/config.h.in
@@ -290,9 +290,6 @@
/* Define to 1 if you have the `putenv' function. */
#undef HAVE_PUTENV

-/* Define to 1 if you have the `quotactl' function. */
-#undef HAVE_QUOTACTL
-
/* Define to 1 if dirent has d_reclen */
#undef HAVE_RECLEN_DIRENT

diff --git a/lib/quota/mkquota.c b/lib/quota/mkquota.c
index 13994ad..973c35e 100644
--- a/lib/quota/mkquota.c
+++ b/lib/quota/mkquota.c
@@ -46,18 +46,6 @@ static void print_inode(struct ext2_inode *inode)
return;
}

-int quota_is_on(ext2_filsys fs, int type)
-{
- char tmp[1024];
- qid_t id = (type == USRQUOTA) ? getuid() : getgid();
-
-#ifdef HAVE_QUOTACTL
- if (!quotactl(QCMD(Q_V2_GETQUOTA, type), fs->device_name, id, tmp))
- return 1;
-#endif
- return 0;
-}
-
/*
* Returns 0 if not able to find the quota file, otherwise returns its
* inode number.
diff --git a/lib/quota/mkquota.h b/lib/quota/mkquota.h
index ed6fabd..70107ba 100644
--- a/lib/quota/mkquota.h
+++ b/lib/quota/mkquota.h
@@ -56,7 +56,6 @@ errcode_t quota_compute_usage(quota_ctx_t qctx);
void quota_release_context(quota_ctx_t *qctx);

errcode_t quota_remove_inode(ext2_filsys fs, int qtype);
-int quota_is_on(ext2_filsys fs, int type);
int quota_file_exists(ext2_filsys fs, int qtype, int fmt);
void quota_set_sb_inum(ext2_filsys fs, ext2_ino_t ino, int qtype);
errcode_t quota_compare_and_update(quota_ctx_t qctx, int qtype,
diff --git a/lib/quota/quota.h b/lib/quota/quota.h
index a943ec6..0fb4714 100644
--- a/lib/quota/quota.h
+++ b/lib/quota/quota.h
@@ -72,25 +72,6 @@ typedef int64_t qsize_t; /* Type in which we store size limitations */
#define kb2qb(x) ((x) >> (QUOTABLOCK_BITS-10))
#define toqb(x) (((x) + QUOTABLOCK_SIZE - 1) >> QUOTABLOCK_BITS)

-/*
- * Command definitions for the 'quotactl' system call.
- * The commands are broken into a main command defined below
- * and a subcommand that is used to convey the type of
- * quota that is being manipulated (see above).
- */
-#define SUBCMDMASK 0x00ff
-#define SUBCMDSHIFT 8
-#define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
-
-#define Q_SYNC 0x800001 /* sync disk copy of a filesystems quotas */
-#define Q_QUOTAON 0x800002 /* turn quotas on */
-#define Q_QUOTAOFF 0x800003 /* turn quotas off */
-#define Q_GETFMT 0x800004 /* get quota format used on given filesystem */
-#define Q_GETINFO 0x800005 /* get information about quota files */
-#define Q_SETINFO 0x800006 /* set information about quota files */
-#define Q_GETQUOTA 0x800007 /* get user quota structure */
-#define Q_SETQUOTA 0x800008 /* set user quota structure */
-
/* Quota format type IDs */
#define QFMT_VFS_OLD 1
#define QFMT_VFS_V0 2
@@ -103,22 +84,6 @@ typedef int64_t qsize_t; /* Type in which we store size limitations */
#define QIF_DQBLKSIZE (1 << QIF_DQBLKSIZE_BITS)

/*
- * Structure used for setting quota information about file via quotactl
- * Following flags are used to specify which fields are valid
- */
-#define IIF_BGRACE 1
-#define IIF_IGRACE 2
-#define IIF_FLAGS 4
-#define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
-
-struct if_dqinfo {
- __u64 dqi_bgrace;
- __u64 dqi_igrace;
- __u32 dqi_flags;
- __u32 dqi_valid;
-};

2012-05-28 15:31:34

by Andreas Dilger

[permalink] [raw]
Subject: Re: libquota: add a quotactl prototype

On 2012-05-28, at 8:20, Ted Ts'o <[email protected]> wrote:

> On Tue, May 22, 2012 at 09:41:29AM -0000, Mike Frysinger wrote:
>> The commit 0df8a27bbaf51b55c0e8c3a533ef4c2ff9d79c9f removed the system
>> quota.h include, but in doing so, added the problem:
>> mkquota.c:55:2: warning: implicit declaration of function 'quotactl'
>>
>> Since we're maintaining a copy of quota.h, add a proper func prototype.
>>
>> Signed-off-by: Mike Frysinger <[email protected]>
>
> Thanks, applied.

This patch caused a compile failure on my FC 13 system, when I had no problem before, because caddr_t was not defined...

Cheers, Andreas

2012-05-29 00:35:59

by Mike Frysinger

[permalink] [raw]
Subject: Re: libquota: add a quotactl prototype

On Monday 28 May 2012 11:31:42 Andreas Dilger wrote:
> On 2012-05-28, at 8:20, Ted Ts'o <[email protected]> wrote:
> > On Tue, May 22, 2012 at 09:41:29AM -0000, Mike Frysinger wrote:
> >> The commit 0df8a27bbaf51b55c0e8c3a533ef4c2ff9d79c9f removed the system
> >> quota.h include, but in doing so, added the problem:
> >> mkquota.c:55:2: warning: implicit declaration of function 'quotactl'
> >>
> >> Since we're maintaining a copy of quota.h, add a proper func prototype.
> >>
> >> Signed-off-by: Mike Frysinger <[email protected]>
> >
> > Thanks, applied.
>
> This patch caused a compile failure on my FC 13 system, when I had no
> problem before, because caddr_t was not defined...

your definition of "no problem" is different from mine. Ted's latest patch
works fine for me though -- punt the call completely.
-mike


Attachments:
signature.asc (836.00 B)
This is a digitally signed message part.