aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ocfs2/alloc.c')
-rw-r--r--fs/ocfs2/alloc.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/fs/ocfs2/alloc.c b/fs/ocfs2/alloc.c
index 69d67ab069bb..84a7bd4db5da 100644
--- a/fs/ocfs2/alloc.c
+++ b/fs/ocfs2/alloc.c
@@ -28,6 +28,7 @@
28#include <linux/slab.h> 28#include <linux/slab.h>
29#include <linux/highmem.h> 29#include <linux/highmem.h>
30#include <linux/swap.h> 30#include <linux/swap.h>
31#include <linux/quotaops.h>
31 32
32#define MLOG_MASK_PREFIX ML_DISK_ALLOC 33#define MLOG_MASK_PREFIX ML_DISK_ALLOC
33#include <cluster/masklog.h> 34#include <cluster/masklog.h>
@@ -5322,7 +5323,7 @@ int ocfs2_remove_btree_range(struct inode *inode,
5322 } 5323 }
5323 } 5324 }
5324 5325
5325 handle = ocfs2_start_trans(osb, OCFS2_REMOVE_EXTENT_CREDITS); 5326 handle = ocfs2_start_trans(osb, ocfs2_remove_extent_credits(osb->sb));
5326 if (IS_ERR(handle)) { 5327 if (IS_ERR(handle)) {
5327 ret = PTR_ERR(handle); 5328 ret = PTR_ERR(handle);
5328 mlog_errno(ret); 5329 mlog_errno(ret);
@@ -6552,6 +6553,8 @@ static int ocfs2_do_truncate(struct ocfs2_super *osb,
6552 goto bail; 6553 goto bail;
6553 } 6554 }
6554 6555
6556 vfs_dq_free_space_nodirty(inode,
6557 ocfs2_clusters_to_bytes(osb->sb, clusters_to_del));
6555 spin_lock(&OCFS2_I(inode)->ip_lock); 6558 spin_lock(&OCFS2_I(inode)->ip_lock);
6556 OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters) - 6559 OCFS2_I(inode)->ip_clusters = le32_to_cpu(fe->i_clusters) -
6557 clusters_to_del; 6560 clusters_to_del;
@@ -6860,6 +6863,7 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
6860 struct page **pages = NULL; 6863 struct page **pages = NULL;
6861 loff_t end = osb->s_clustersize; 6864 loff_t end = osb->s_clustersize;
6862 struct ocfs2_extent_tree et; 6865 struct ocfs2_extent_tree et;
6866 int did_quota = 0;
6863 6867
6864 has_data = i_size_read(inode) ? 1 : 0; 6868 has_data = i_size_read(inode) ? 1 : 0;
6865 6869
@@ -6879,7 +6883,8 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
6879 } 6883 }
6880 } 6884 }
6881 6885
6882 handle = ocfs2_start_trans(osb, OCFS2_INLINE_TO_EXTENTS_CREDITS); 6886 handle = ocfs2_start_trans(osb,
6887 ocfs2_inline_to_extents_credits(osb->sb));
6883 if (IS_ERR(handle)) { 6888 if (IS_ERR(handle)) {
6884 ret = PTR_ERR(handle); 6889 ret = PTR_ERR(handle);
6885 mlog_errno(ret); 6890 mlog_errno(ret);
@@ -6898,6 +6903,13 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
6898 unsigned int page_end; 6903 unsigned int page_end;
6899 u64 phys; 6904 u64 phys;
6900 6905
6906 if (vfs_dq_alloc_space_nodirty(inode,
6907 ocfs2_clusters_to_bytes(osb->sb, 1))) {
6908 ret = -EDQUOT;
6909 goto out_commit;
6910 }
6911 did_quota = 1;
6912
6901 ret = ocfs2_claim_clusters(osb, handle, data_ac, 1, &bit_off, 6913 ret = ocfs2_claim_clusters(osb, handle, data_ac, 1, &bit_off,
6902 &num); 6914 &num);
6903 if (ret) { 6915 if (ret) {
@@ -6971,6 +6983,10 @@ int ocfs2_convert_inline_data_to_extents(struct inode *inode,
6971 } 6983 }
6972 6984
6973out_commit: 6985out_commit:
6986 if (ret < 0 && did_quota)
6987 vfs_dq_free_space_nodirty(inode,
6988 ocfs2_clusters_to_bytes(osb->sb, 1));
6989
6974 ocfs2_commit_trans(osb, handle); 6990 ocfs2_commit_trans(osb, handle);
6975 6991
6976out_unlock: 6992out_unlock: