diff options
author | Roland McGrath <roland@gnu.org> | 2000-02-04 03:21:18 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2000-02-04 03:21:18 +0000 |
commit | 8880a73970b23f10c720011cb910c0e0e1e02975 (patch) | |
tree | d1ce76577a1ace5312fc0576a93d4d8db1e89323 /pfinet/linux-src/include/linux/quotaops.h | |
parent | 8399aa4ab7b849da57f4c59039f091526c9e2f98 (diff) | |
parent | 9fd51e9b0ad33a89a83fdbbb66bd20d85f7893fb (diff) | |
download | hurd-8880a73970b23f10c720011cb910c0e0e1e02975.tar.gz hurd-8880a73970b23f10c720011cb910c0e0e1e02975.tar.bz2 hurd-8880a73970b23f10c720011cb910c0e0e1e02975.zip |
Merge from vendor branch Linux:
Import of Linux 2.2.12 subset (ipv4 stack and related)
Diffstat (limited to 'pfinet/linux-src/include/linux/quotaops.h')
-rw-r--r-- | pfinet/linux-src/include/linux/quotaops.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/pfinet/linux-src/include/linux/quotaops.h b/pfinet/linux-src/include/linux/quotaops.h new file mode 100644 index 00000000..8de13430 --- /dev/null +++ b/pfinet/linux-src/include/linux/quotaops.h @@ -0,0 +1,135 @@ +/* + * Definitions for diskquota-operations. When diskquota is configured these + * macros expand to the right source-code. + * + * Author: Marco van Wieringen <mvw@planets.elm.net> + * + * Version: $Id: quotaops.h,v 1.2 1998/01/15 16:22:26 ecd Exp $ + * + */ +#ifndef _LINUX_QUOTAOPS_ +#define _LINUX_QUOTAOPS_ + +#include <linux/config.h> + +#if defined(CONFIG_QUOTA) + +/* + * declaration of quota_function calls in kernel. + */ +extern void dquot_initialize(struct inode *inode, short type); +extern void dquot_drop(struct inode *inode); +extern void invalidate_dquots(kdev_t dev, short type); +extern int quota_off(kdev_t dev, short type); +extern int sync_dquots(kdev_t dev, short type); + +extern int dquot_alloc_block(const struct inode *inode, unsigned long number, + uid_t initiator, char warn); +extern int dquot_alloc_inode(const struct inode *inode, unsigned long number, + uid_t initiator); + +extern void dquot_free_block(const struct inode *inode, unsigned long number); +extern void dquot_free_inode(const struct inode *inode, unsigned long number); + +extern int dquot_transfer(struct dentry *dentry, struct iattr *iattr, + uid_t initiator); + +/* + * Operations supported for diskquotas. + */ +extern __inline__ void DQUOT_INIT(struct inode *inode) +{ + if (inode->i_sb && inode->i_sb->dq_op) + inode->i_sb->dq_op->initialize(inode, -1); +} + +extern __inline__ void DQUOT_DROP(struct inode *inode) +{ + if (IS_QUOTAINIT(inode)) { + if (inode->i_sb && inode->i_sb->dq_op) + inode->i_sb->dq_op->drop(inode); + } +} + +extern __inline__ int DQUOT_PREALLOC_BLOCK(struct super_block *sb, const struct inode *inode, int nr) +{ + if (sb->dq_op) { + if (sb->dq_op->alloc_block(inode, fs_to_dq_blocks(nr, sb->s_blocksize), + current->fsuid, 0) == NO_QUOTA) + return 1; + } + return 0; +} + +extern __inline__ int DQUOT_ALLOC_BLOCK(struct super_block *sb, const struct inode *inode, int nr) +{ + if (sb->dq_op) { + if (sb->dq_op->alloc_block(inode, fs_to_dq_blocks(nr, sb->s_blocksize), + current->fsuid, 1) == NO_QUOTA) + return 1; + } + return 0; +} + +extern __inline__ int DQUOT_ALLOC_INODE(struct super_block *sb, struct inode *inode) +{ + if (sb->dq_op) { + sb->dq_op->initialize (inode, -1); + if (sb->dq_op->alloc_inode (inode, 1, current->fsuid)) + return 1; + } + inode->i_flags |= S_QUOTA; + return 0; +} + +extern __inline__ void DQUOT_FREE_BLOCK(struct super_block *sb, const struct inode *inode, int nr) +{ + if (sb->dq_op) + sb->dq_op->free_block(inode, fs_to_dq_blocks(nr, sb->s_blocksize)); +} + +extern __inline__ void DQUOT_FREE_INODE(struct super_block *sb, struct inode *inode) +{ + if (sb->dq_op) + sb->dq_op->free_inode(inode, 1); +} + +extern __inline__ int DQUOT_TRANSFER(struct dentry *dentry, struct iattr *iattr) +{ + int error = -EDQUOT; + + if (dentry->d_inode->i_sb->dq_op) { + if (IS_QUOTAINIT(dentry->d_inode) == 0) + dentry->d_inode->i_sb->dq_op->initialize(dentry->d_inode, -1); + error = dentry->d_inode->i_sb->dq_op->transfer(dentry, iattr, current->fsuid); + } else { + error = notify_change(dentry, iattr); + } + return error; +} + +#define DQUOT_SYNC(dev) sync_dquots(dev, -1) +#define DQUOT_OFF(dev) quota_off(dev, -1) + +#else + +/* + * NO-OP when quota not configured. + */ +#define DQUOT_INIT(inode) do { } while(0) +#define DQUOT_DROP(inode) do { } while(0) +#define DQUOT_PREALLOC_BLOCK(sb, inode, nr) (0) +#define DQUOT_ALLOC_BLOCK(sb, inode, nr) (0) +#define DQUOT_ALLOC_INODE(sb, inode) (0) +#define DQUOT_FREE_BLOCK(sb, inode, nr) do { } while(0) +#define DQUOT_FREE_INODE(sb, inode) do { } while(0) +#define DQUOT_SYNC(dev) do { } while(0) +#define DQUOT_OFF(dev) do { } while(0) + +/* + * Special case expands to a simple notify_change. + */ +#define DQUOT_TRANSFER(dentry, iattr) notify_change(dentry, iattr) + +#endif /* CONFIG_QUOTA */ +#endif /* _LINUX_QUOTAOPS_ */ |