X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flustre_quota.h;h=c1941d767aa3e1d2ffa6d14e57ca3c8a2ce205cd;hb=43c01b9d94e783295edc2d1432ed3af0076a0e51;hp=1e128589d53c570607a908f79ae48e4c37880977;hpb=aa9f441514640d7253ae59e35b0b0804c9ce792e;p=fs%2Flustre-release.git diff --git a/lustre/include/lustre_quota.h b/lustre/include/lustre_quota.h index 1e12858..c1941d7 100644 --- a/lustre/include/lustre_quota.h +++ b/lustre/include/lustre_quota.h @@ -226,17 +226,6 @@ int lustre_quota_convert(struct lustre_quota_info *lqi, int type); typedef int (*dqacq_handler_t) (struct obd_device * obd, struct qunit_data * qd, int opc); -/* -#ifdef HAVE_VFS_DQ_OFF -#define LL_DQUOT_OFF(sb, remount) vfs_dq_off(sb, remount) -#else -#define LL_DQUOT_OFF(sb, remount) DQUOT_OFF(sb) -#endif -*/ - -#define LL_DQUOT_OFF(sb) DQUOT_OFF(sb) - - /* user quota is turned on on filter */ #define LQC_USRQUOTA_FLAG (1 << 0) /* group quota is turned on on filter */ @@ -397,39 +386,25 @@ struct lustre_qunit_size { #define LQS_KEY_ID(key) (key & 0xffffffff) #define LQS_KEY_GRP(key) (key >> 32) -static inline void __lqs_getref(struct lustre_qunit_size *lqs) +static inline void lqs_getref(struct lustre_qunit_size *lqs) { int count = cfs_atomic_inc_return(&lqs->lqs_refcount); - if (count == 2) /* quota_create_lqs */ - cfs_atomic_inc(&lqs->lqs_ctxt->lqc_lqs); CDEBUG(D_INFO, "lqs=%p refcount %d\n", lqs, count); } -static inline void lqs_getref(struct lustre_qunit_size *lqs) +static inline void lqs_putref(struct lustre_qunit_size *lqs) { - __lqs_getref(lqs); -} + int count = cfs_atomic_read(&lqs->lqs_refcount); -static inline void __lqs_putref(struct lustre_qunit_size *lqs) -{ - LASSERT(cfs_atomic_read(&lqs->lqs_refcount) > 0); + LASSERT(count > 0); + CDEBUG(D_INFO, "lqs=%p refcount %d\n", lqs, count - 1); - if (cfs_atomic_dec_return(&lqs->lqs_refcount) == 1) + if (cfs_atomic_dec_and_test(&lqs->lqs_refcount)) { if (cfs_atomic_dec_and_test(&lqs->lqs_ctxt->lqc_lqs)) cfs_waitq_signal(&lqs->lqs_ctxt->lqc_lqs_waitq); - CDEBUG(D_INFO, "lqs=%p refcount %d\n", - lqs, cfs_atomic_read(&lqs->lqs_refcount)); -} - -static inline void lqs_putref(struct lustre_qunit_size *lqs) -{ - __lqs_putref(lqs); -} - -static inline void lqs_initref(struct lustre_qunit_size *lqs) -{ - cfs_atomic_set(&lqs->lqs_refcount, 0); + OBD_FREE_PTR(lqs); + } } #else @@ -822,6 +797,48 @@ extern quota_interface_t lmv_quota_interface; "admin_quotafile_v2.grp" /** group admin quotafile */\ } +/* + * Definitions of structures for vfsv0 quota format + * Source linux/fs/quota/quotaio_v2.h + * + * The following definitions are normally found in private kernel headers. + * However, some sites build Lustre against kernel development headers rather + * than than full kernel source, so we provide them here for compatibility. + */ +#ifdef __KERNEL__ +# if !defined(HAVE_QUOTAIO_H) && !defined(HAVE_FS_QUOTA_QUOTAIO_H) && \ + !defined(HAVE_FS_QUOTAIO_H) + +#include +#include + +#define V2_INITQMAGICS {\ + 0xd9c01f11, /* USRQUOTA */\ + 0xd9c01927 /* GRPQUOTA */\ +} + +/* Header with type and version specific information */ +struct v2_disk_dqinfo { + __le32 dqi_bgrace; /* Time before block soft limit becomes hard limit */ + __le32 dqi_igrace; /* Time before inode soft limit becomes hard limit */ + __le32 dqi_flags; /* Flags for quotafile (DQF_*) */ + __le32 dqi_blocks; /* Number of blocks in file */ + __le32 dqi_free_blk; /* Number of first free block in the list */ + __le32 dqi_free_entry; /* Number of block with at least one free entry */ +}; + +/* First generic header */ +struct v2_disk_dqheader { + __le32 dqh_magic; /* Magic number identifying file */ + __le32 dqh_version; /* File version */ +}; +#define V2_DQINFOOFF sizeof(struct v2_disk_dqheader) /* Offset of info header in file */ +#define QT_TREEOFF 1 /* Offset of tree in file in blocks */ +#define V2_DQTREEOFF QT_TREEOFF + +# endif /* !defined(HAVE_QUOTAIO_V1_H) ... */ +#endif /* __KERNEL__ */ + /** @} quota */ #endif /* _LUSTRE_QUOTA_H */