2222#include <linux/vmalloc.h>
2323#include <linux/bio.h>
2424#include <linux/blkdev.h>
25+ #include <linux/quotaops.h>
2526#ifdef CONFIG_F2FS_FS_ENCRYPTION
2627#include <linux/fscrypt_supp.h>
2728#else
@@ -88,6 +89,8 @@ extern char *fault_name[FAULT_MAX];
8889#define F2FS_MOUNT_FAULT_INJECTION 0x00010000
8990#define F2FS_MOUNT_ADAPTIVE 0x00020000
9091#define F2FS_MOUNT_LFS 0x00040000
92+ #define F2FS_MOUNT_USRQUOTA 0x00080000
93+ #define F2FS_MOUNT_GRPQUOTA 0x00100000
9194
9295#define clear_opt (sbi , option ) ((sbi)->mount_opt.opt &= ~F2FS_MOUNT_##option)
9396#define set_opt (sbi , option ) ((sbi)->mount_opt.opt |= F2FS_MOUNT_##option)
@@ -521,6 +524,12 @@ struct f2fs_inode_info {
521524 nid_t i_xattr_nid ; /* node id that contains xattrs */
522525 loff_t last_disk_size ; /* lastly written file size */
523526
527+ #ifdef CONFIG_QUOTA
528+ struct dquot * i_dquot [MAXQUOTAS ];
529+
530+ /* quota space reservation, managed internally by quota code */
531+ qsize_t i_reserved_quota ;
532+ #endif
524533 struct list_head dirty_list ; /* dirty list for dirs and files */
525534 struct list_head gdirty_list ; /* linked in global dirty list */
526535 struct list_head inmem_pages ; /* inmemory pages managed by f2fs */
@@ -1376,17 +1385,23 @@ static inline bool f2fs_has_xattr_block(unsigned int ofs)
13761385 return ofs == XATTR_NODE_OFFSET ;
13771386}
13781387
1379- static inline void f2fs_i_blocks_write (struct inode * , block_t , bool );
1380- static inline bool inc_valid_block_count (struct f2fs_sb_info * sbi ,
1388+ static inline void f2fs_i_blocks_write (struct inode * , block_t , bool , bool );
1389+ static inline int inc_valid_block_count (struct f2fs_sb_info * sbi ,
13811390 struct inode * inode , blkcnt_t * count )
13821391{
1383- blkcnt_t diff ;
1392+ blkcnt_t diff = 0 , release = 0 ;
13841393 block_t avail_user_block_count ;
1394+ int ret ;
1395+
1396+ ret = dquot_reserve_block (inode , * count );
1397+ if (ret )
1398+ return ret ;
13851399
13861400#ifdef CONFIG_F2FS_FAULT_INJECTION
13871401 if (time_to_inject (sbi , FAULT_BLOCK )) {
13881402 f2fs_show_injection_info (FAULT_BLOCK );
1389- return false;
1403+ release = * count ;
1404+ goto enospc ;
13901405 }
13911406#endif
13921407 /*
@@ -1401,17 +1416,24 @@ static inline bool inc_valid_block_count(struct f2fs_sb_info *sbi,
14011416 if (unlikely (sbi -> total_valid_block_count > avail_user_block_count )) {
14021417 diff = sbi -> total_valid_block_count - avail_user_block_count ;
14031418 * count -= diff ;
1419+ release = diff ;
14041420 sbi -> total_valid_block_count = avail_user_block_count ;
14051421 if (!* count ) {
14061422 spin_unlock (& sbi -> stat_lock );
14071423 percpu_counter_sub (& sbi -> alloc_valid_block_count , diff );
1408- return false ;
1424+ goto enospc ;
14091425 }
14101426 }
14111427 spin_unlock (& sbi -> stat_lock );
14121428
1413- f2fs_i_blocks_write (inode , * count , true);
1414- return true;
1429+ if (release )
1430+ dquot_release_reservation_block (inode , release );
1431+ f2fs_i_blocks_write (inode , * count , true, true);
1432+ return 0 ;
1433+
1434+ enospc :
1435+ dquot_release_reservation_block (inode , release );
1436+ return - ENOSPC ;
14151437}
14161438
14171439static inline void dec_valid_block_count (struct f2fs_sb_info * sbi ,
@@ -1425,7 +1447,7 @@ static inline void dec_valid_block_count(struct f2fs_sb_info *sbi,
14251447 f2fs_bug_on (sbi , inode -> i_blocks < sectors );
14261448 sbi -> total_valid_block_count -= (block_t )count ;
14271449 spin_unlock (& sbi -> stat_lock );
1428- f2fs_i_blocks_write (inode , count , false);
1450+ f2fs_i_blocks_write (inode , count , false, true );
14291451}
14301452
14311453static inline void inc_page_count (struct f2fs_sb_info * sbi , int count_type )
@@ -1554,40 +1576,52 @@ static inline block_t __start_sum_addr(struct f2fs_sb_info *sbi)
15541576 return le32_to_cpu (F2FS_CKPT (sbi )-> cp_pack_start_sum );
15551577}
15561578
1557- static inline bool inc_valid_node_count (struct f2fs_sb_info * sbi ,
1579+ static inline int inc_valid_node_count (struct f2fs_sb_info * sbi ,
15581580 struct inode * inode , bool is_inode )
15591581{
15601582 block_t valid_block_count ;
15611583 unsigned int valid_node_count ;
1584+ bool quota = inode && !is_inode ;
1585+
1586+ if (quota ) {
1587+ int ret = dquot_reserve_block (inode , 1 );
1588+ if (ret )
1589+ return ret ;
1590+ }
15621591
15631592 spin_lock (& sbi -> stat_lock );
15641593
15651594 valid_block_count = sbi -> total_valid_block_count + 1 ;
15661595 if (unlikely (valid_block_count + sbi -> reserved_blocks >
15671596 sbi -> user_block_count )) {
15681597 spin_unlock (& sbi -> stat_lock );
1569- return false ;
1598+ goto enospc ;
15701599 }
15711600
15721601 valid_node_count = sbi -> total_valid_node_count + 1 ;
15731602 if (unlikely (valid_node_count > sbi -> total_node_count )) {
15741603 spin_unlock (& sbi -> stat_lock );
1575- return false ;
1604+ goto enospc ;
15761605 }
15771606
1607+ sbi -> total_valid_node_count ++ ;
1608+ sbi -> total_valid_block_count ++ ;
1609+ spin_unlock (& sbi -> stat_lock );
1610+
15781611 if (inode ) {
15791612 if (is_inode )
15801613 f2fs_mark_inode_dirty_sync (inode , true);
15811614 else
1582- f2fs_i_blocks_write (inode , 1 , true);
1615+ f2fs_i_blocks_write (inode , 1 , true, true );
15831616 }
15841617
1585- sbi -> total_valid_node_count ++ ;
1586- sbi -> total_valid_block_count ++ ;
1587- spin_unlock (& sbi -> stat_lock );
1588-
15891618 percpu_counter_inc (& sbi -> alloc_valid_block_count );
1590- return true;
1619+ return 0 ;
1620+
1621+ enospc :
1622+ if (quota )
1623+ dquot_release_reservation_block (inode , 1 );
1624+ return - ENOSPC ;
15911625}
15921626
15931627static inline void dec_valid_node_count (struct f2fs_sb_info * sbi ,
@@ -1599,12 +1633,13 @@ static inline void dec_valid_node_count(struct f2fs_sb_info *sbi,
15991633 f2fs_bug_on (sbi , !sbi -> total_valid_node_count );
16001634 f2fs_bug_on (sbi , !is_inode && !inode -> i_blocks );
16011635
1602- if (!is_inode )
1603- f2fs_i_blocks_write (inode , 1 , false);
16041636 sbi -> total_valid_node_count -- ;
16051637 sbi -> total_valid_block_count -- ;
16061638
16071639 spin_unlock (& sbi -> stat_lock );
1640+
1641+ if (!is_inode )
1642+ f2fs_i_blocks_write (inode , 1 , false, true);
16081643}
16091644
16101645static inline unsigned int valid_node_count (struct f2fs_sb_info * sbi )
@@ -1879,14 +1914,21 @@ static inline void f2fs_i_links_write(struct inode *inode, bool inc)
18791914}
18801915
18811916static inline void f2fs_i_blocks_write (struct inode * inode ,
1882- block_t diff , bool add )
1917+ block_t diff , bool add , bool claim )
18831918{
18841919 bool clean = !is_inode_flag_set (inode , FI_DIRTY_INODE );
18851920 bool recover = is_inode_flag_set (inode , FI_AUTO_RECOVER );
1886- blkcnt_t sectors = diff << F2FS_LOG_SECTORS_PER_BLOCK ;
18871921
1888- inode -> i_blocks = add ? inode -> i_blocks + sectors :
1889- inode -> i_blocks - sectors ;
1922+ /* add = 1, claim = 1 should be dquot_reserve_block in pair */
1923+ if (add ) {
1924+ if (claim )
1925+ dquot_claim_block (inode , diff );
1926+ else
1927+ dquot_alloc_block_nofail (inode , diff );
1928+ } else {
1929+ dquot_free_block (inode , diff );
1930+ }
1931+
18901932 f2fs_mark_inode_dirty_sync (inode , true);
18911933 if (clean || recover )
18921934 set_inode_flag (inode , FI_AUTO_RECOVER );
0 commit comments