]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - include/linux/quotaops.h
dquot: cleanup dquot drop routine
[mirror_ubuntu-bionic-kernel.git] / include / linux / quotaops.h
index e563a20cff4ff8c352329c4f6e3c47072256469f..a5ebd1abccd8d9b068682fd25fe0419e5cf05e19 100644 (file)
@@ -24,7 +24,7 @@ void inode_claim_rsv_space(struct inode *inode, qsize_t number);
 void inode_sub_rsv_space(struct inode *inode, qsize_t number);
 
 int dquot_initialize(struct inode *inode, int type);
-int dquot_drop(struct inode *inode);
+void dquot_drop(struct inode *inode);
 struct dquot *dqget(struct super_block *sb, unsigned int id, int type);
 void dqput(struct dquot *dquot);
 int dquot_scan_active(struct super_block *sb,
@@ -33,17 +33,15 @@ int dquot_scan_active(struct super_block *sb,
 struct dquot *dquot_alloc(struct super_block *sb, int type);
 void dquot_destroy(struct dquot *dquot);
 
-int dquot_alloc_space(struct inode *inode, qsize_t number, int prealloc);
-int dquot_alloc_inode(const struct inode *inode, qsize_t number);
+int __dquot_alloc_space(struct inode *inode, qsize_t number,
+               int warn, int reserve);
+void __dquot_free_space(struct inode *inode, qsize_t number, int reserve);
 
-int dquot_reserve_space(struct inode *inode, qsize_t number, int prealloc);
-int dquot_claim_space(struct inode *inode, qsize_t number);
-void dquot_release_reserved_space(struct inode *inode, qsize_t number);
+int dquot_alloc_inode(const struct inode *inode);
 
-int dquot_free_space(struct inode *inode, qsize_t number);
-int dquot_free_inode(const struct inode *inode, qsize_t number);
+int dquot_claim_space_nodirty(struct inode *inode, qsize_t number);
+void dquot_free_inode(const struct inode *inode);
 
-int dquot_transfer(struct inode *inode, struct iattr *iattr);
 int dquot_commit(struct dquot *dquot);
 int dquot_acquire(struct dquot *dquot);
 int dquot_release(struct dquot *dquot);
@@ -66,8 +64,7 @@ int vfs_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii);
 int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di);
 int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di);
 
-void vfs_dq_drop(struct inode *inode);
-int vfs_dq_transfer(struct inode *inode, struct iattr *iattr);
+int dquot_transfer(struct inode *inode, struct iattr *iattr);
 int vfs_dq_quota_on_remount(struct super_block *sb);
 
 static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type)
@@ -149,117 +146,6 @@ static inline void vfs_dq_init(struct inode *inode)
                inode->i_sb->dq_op->initialize(inode, -1);
 }
 
-/* The following allocation/freeing/transfer functions *must* be called inside
- * a transaction (deadlocks possible otherwise) */
-static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr)
-{
-       if (sb_any_quota_active(inode->i_sb)) {
-               /* Used space is updated in alloc_space() */
-               if (inode->i_sb->dq_op->alloc_space(inode, nr, 1) == NO_QUOTA)
-                       return 1;
-       }
-       else
-               inode_add_bytes(inode, nr);
-       return 0;
-}
-
-static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr)
-{
-       int ret;
-        if (!(ret =  vfs_dq_prealloc_space_nodirty(inode, nr)))
-               mark_inode_dirty(inode);
-       return ret;
-}
-
-static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr)
-{
-       if (sb_any_quota_active(inode->i_sb)) {
-               /* Used space is updated in alloc_space() */
-               if (inode->i_sb->dq_op->alloc_space(inode, nr, 0) == NO_QUOTA)
-                       return 1;
-       }
-       else
-               inode_add_bytes(inode, nr);
-       return 0;
-}
-
-static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
-{
-       int ret;
-       if (!(ret = vfs_dq_alloc_space_nodirty(inode, nr)))
-               mark_inode_dirty(inode);
-       return ret;
-}
-
-static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr)
-{
-       if (sb_any_quota_active(inode->i_sb)) {
-               /* Used space is updated in alloc_space() */
-               if (inode->i_sb->dq_op->reserve_space(inode, nr, 0) == NO_QUOTA)
-                       return 1;
-       }
-       else
-               inode_add_rsv_space(inode, nr);
-       return 0;
-}
-
-static inline int vfs_dq_alloc_inode(struct inode *inode)
-{
-       if (sb_any_quota_active(inode->i_sb)) {
-               vfs_dq_init(inode);
-               if (inode->i_sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA)
-                       return 1;
-       }
-       return 0;
-}
-
-/*
- * Convert in-memory reserved quotas to real consumed quotas
- */
-static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr)
-{
-       if (sb_any_quota_active(inode->i_sb)) {
-               if (inode->i_sb->dq_op->claim_space(inode, nr) == NO_QUOTA)
-                       return 1;
-       } else
-               inode_claim_rsv_space(inode, nr);
-
-       mark_inode_dirty(inode);
-       return 0;
-}
-
-/*
- * Release reserved (in-memory) quotas
- */
-static inline
-void vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr)
-{
-       if (sb_any_quota_active(inode->i_sb))
-               inode->i_sb->dq_op->release_rsv(inode, nr);
-       else
-               inode_sub_rsv_space(inode, nr);
-}
-
-static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
-{
-       if (sb_any_quota_active(inode->i_sb))
-               inode->i_sb->dq_op->free_space(inode, nr);
-       else
-               inode_sub_bytes(inode, nr);
-}
-
-static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
-{
-       vfs_dq_free_space_nodirty(inode, nr);
-       mark_inode_dirty(inode);
-}
-
-static inline void vfs_dq_free_inode(struct inode *inode)
-{
-       if (sb_any_quota_active(inode->i_sb))
-               inode->i_sb->dq_op->free_inode(inode, 1);
-}
-
 /* Cannot be called inside a transaction */
 static inline int vfs_dq_off(struct super_block *sb, int remount)
 {
@@ -323,16 +209,16 @@ static inline void vfs_dq_init(struct inode *inode)
 {
 }
 
-static inline void vfs_dq_drop(struct inode *inode)
+static inline void dquot_drop(struct inode *inode)
 {
 }
 
-static inline int vfs_dq_alloc_inode(struct inode *inode)
+static inline int dquot_alloc_inode(const struct inode *inode)
 {
        return 0;
 }
 
-static inline void vfs_dq_free_inode(struct inode *inode)
+static inline void dquot_free_inode(const struct inode *inode)
 {
 }
 
@@ -346,110 +232,114 @@ static inline int vfs_dq_quota_on_remount(struct super_block *sb)
        return 0;
 }
 
-static inline int vfs_dq_transfer(struct inode *inode, struct iattr *iattr)
+static inline int dquot_transfer(struct inode *inode, struct iattr *iattr)
 {
        return 0;
 }
 
-static inline int vfs_dq_prealloc_space_nodirty(struct inode *inode, qsize_t nr)
+static inline int __dquot_alloc_space(struct inode *inode, qsize_t number,
+               int warn, int reserve)
 {
-       inode_add_bytes(inode, nr);
+       if (!reserve)
+               inode_add_bytes(inode, number);
        return 0;
 }
 
-static inline int vfs_dq_prealloc_space(struct inode *inode, qsize_t nr)
+static inline void __dquot_free_space(struct inode *inode, qsize_t number,
+               int reserve)
 {
-       vfs_dq_prealloc_space_nodirty(inode, nr);
-       mark_inode_dirty(inode);
-       return 0;
+       if (!reserve)
+               inode_sub_bytes(inode, number);
 }
 
-static inline int vfs_dq_alloc_space_nodirty(struct inode *inode, qsize_t nr)
+static inline int dquot_claim_space_nodirty(struct inode *inode, qsize_t number)
 {
-       inode_add_bytes(inode, nr);
+       inode_add_bytes(inode, number);
        return 0;
 }
 
-static inline int vfs_dq_alloc_space(struct inode *inode, qsize_t nr)
+#endif /* CONFIG_QUOTA */
+
+static inline int dquot_alloc_space_nodirty(struct inode *inode, qsize_t nr)
 {
-       vfs_dq_alloc_space_nodirty(inode, nr);
-       mark_inode_dirty(inode);
-       return 0;
+       return __dquot_alloc_space(inode, nr, 1, 0);
 }
 
-static inline int vfs_dq_reserve_space(struct inode *inode, qsize_t nr)
+static inline int dquot_alloc_space(struct inode *inode, qsize_t nr)
 {
-       return 0;
+       int ret;
+
+       ret = dquot_alloc_space_nodirty(inode, nr);
+       if (!ret)
+               mark_inode_dirty(inode);
+       return ret;
 }
 
-static inline int vfs_dq_claim_space(struct inode *inode, qsize_t nr)
+static inline int dquot_alloc_block_nodirty(struct inode *inode, qsize_t nr)
 {
-       return vfs_dq_alloc_space(inode, nr);
+       return dquot_alloc_space_nodirty(inode, nr << inode->i_blkbits);
 }
 
-static inline
-int vfs_dq_release_reservation_space(struct inode *inode, qsize_t nr)
+static inline int dquot_alloc_block(struct inode *inode, qsize_t nr)
 {
-       return 0;
+       return dquot_alloc_space(inode, nr << inode->i_blkbits);
 }
 
-static inline void vfs_dq_free_space_nodirty(struct inode *inode, qsize_t nr)
+static inline int dquot_prealloc_block_nodirty(struct inode *inode, qsize_t nr)
 {
-       inode_sub_bytes(inode, nr);
+       return __dquot_alloc_space(inode, nr << inode->i_blkbits, 0, 0);
 }
 
-static inline void vfs_dq_free_space(struct inode *inode, qsize_t nr)
+static inline int dquot_prealloc_block(struct inode *inode, qsize_t nr)
 {
-       vfs_dq_free_space_nodirty(inode, nr);
-       mark_inode_dirty(inode);
-}      
-
-#endif /* CONFIG_QUOTA */
+       int ret;
 
-static inline int vfs_dq_prealloc_block_nodirty(struct inode *inode, qsize_t nr)
-{
-       return vfs_dq_prealloc_space_nodirty(inode, nr << inode->i_blkbits);
+       ret = dquot_prealloc_block_nodirty(inode, nr);
+       if (!ret)
+               mark_inode_dirty(inode);
+       return ret;
 }
 
-static inline int vfs_dq_prealloc_block(struct inode *inode, qsize_t nr)
+static inline int dquot_reserve_block(struct inode *inode, qsize_t nr)
 {
-       return vfs_dq_prealloc_space(inode, nr << inode->i_blkbits);
+       return __dquot_alloc_space(inode, nr << inode->i_blkbits, 1, 1);
 }
 
-static inline int vfs_dq_alloc_block_nodirty(struct inode *inode, qsize_t nr)
+static inline int dquot_claim_block(struct inode *inode, qsize_t nr)
 {
-       return vfs_dq_alloc_space_nodirty(inode, nr << inode->i_blkbits);
-}
+       int ret;
 
-static inline int vfs_dq_alloc_block(struct inode *inode, qsize_t nr)
-{
-       return vfs_dq_alloc_space(inode, nr << inode->i_blkbits);
+       ret = dquot_claim_space_nodirty(inode, nr << inode->i_blkbits);
+       if (!ret)
+               mark_inode_dirty(inode);
+       return ret;
 }
 
-static inline int vfs_dq_reserve_block(struct inode *inode, qsize_t nr)
+static inline void dquot_free_space_nodirty(struct inode *inode, qsize_t nr)
 {
-       return vfs_dq_reserve_space(inode, nr << inode->i_blkbits);
+       __dquot_free_space(inode, nr, 0);
 }
 
-static inline int vfs_dq_claim_block(struct inode *inode, qsize_t nr)
+static inline void dquot_free_space(struct inode *inode, qsize_t nr)
 {
-       return vfs_dq_claim_space(inode, nr << inode->i_blkbits);
+       dquot_free_space_nodirty(inode, nr);
+       mark_inode_dirty(inode);
 }
 
-static inline
-void vfs_dq_release_reservation_block(struct inode *inode, qsize_t nr)
+static inline void dquot_free_block_nodirty(struct inode *inode, qsize_t nr)
 {
-       vfs_dq_release_reservation_space(inode, nr << inode->i_blkbits);
+       dquot_free_space_nodirty(inode, nr << inode->i_blkbits);
 }
 
-static inline void vfs_dq_free_block_nodirty(struct inode *inode, qsize_t nr)
+static inline void dquot_free_block(struct inode *inode, qsize_t nr)
 {
-       vfs_dq_free_space_nodirty(inode, nr << inode->i_blkbits);
+       dquot_free_space(inode, nr << inode->i_blkbits);
 }
 
-static inline void vfs_dq_free_block(struct inode *inode, qsize_t nr)
+static inline void dquot_release_reservation_block(struct inode *inode,
+               qsize_t nr)
 {
-       vfs_dq_free_space(inode, nr << inode->i_blkbits);
+       __dquot_free_space(inode, nr << inode->i_blkbits, 1);
 }
 
 #endif /* _LINUX_QUOTAOPS_ */