On Mon, 2006-06-12 at 21:56 +0300, Timo Sirainen wrote:
On Jun 12, 2006, at 9:48 PM, Dumitru Negara wrote:
So I looked through repquota's sources and it looks like XFS has
its own Q_XGETQSTAT quota command which needs to be used with it. I think I'm not going to bother figuring out how it's supposed to be used.
Patches welcome.OK, let's do it again :) ... with ext3 partition. ..
Well, I think my answer is still the same. Someone who actually knows
how the filesystem quota stuff is supposed to work could fix it. I
don't see it important enough to waste spending time on.
It's the switch to quota v2 that's messing this up- all the dqb_* struct elements moved from uint32 to uint64. To make it possible to compile things on both old and new Linux systems, I use the defines manually:
#ifndef _LINUX_QUOTA_VERSION struct fake_dq_struct { u_int64_t dqb_bhardlimit; /* absolute limit on disk quota blocks alloc */ u_int64_t dqb_bsoftlimit; /* preferred limit on disk quota blocks */ u_int64_t dqb_curspace; /* current quota block count */ u_int64_t dqb_ihardlimit; /* maximum # allocated inodes */ u_int64_t dqb_isoftlimit; /* preferred inode limit */ u_int64_t dqb_curinodes; /* current # allocated inodes */ u_int64_t dqb_btime; /* time limit for excessive disk use */ u_int64_t dqb_itime; /* time limit for excessive files */ u_int32_t dqb_valid; /* bitmask of QIF_* constants */ };
struct fake_dq_struct fake_dq;
#endif struct dqblk dq;
Then I get the quotas using:
#ifndef _LINUX_QUOTA_VERSION r = quotactl(0x80000700, q_special, uid, (caddr_t)&fake_dq); if (r != -1) { /* use fake_dq... */ return; } #endif r = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), q_special,uid,(caddr_t)&dq); if (r != -1) { /* use dq ... */ return; }
/* failure */
(where q_special is the block special path)
I don't have any XFS volumes, so hopefully someone who does can sew this together with XFS's method and resolve the mess that is quota on UNIX.
As an alternate: what about using get_quota_command= or something that would print out the correct quota using the system's own quota command?
-- Internet Connection High Quality Web Hosting http://www.internetconnection.net/