22
22
#include <linux/vmalloc.h>
23
23
#include <linux/bio.h>
24
24
#include <linux/blkdev.h>
25
+ #include <linux/quotaops.h>
25
26
#ifdef CONFIG_F2FS_FS_ENCRYPTION
26
27
#include <linux/fscrypt_supp.h>
27
28
#else
@@ -88,6 +89,8 @@ extern char *fault_name[FAULT_MAX];
88
89
#define F2FS_MOUNT_FAULT_INJECTION 0x00010000
89
90
#define F2FS_MOUNT_ADAPTIVE 0x00020000
90
91
#define F2FS_MOUNT_LFS 0x00040000
92
+ #define F2FS_MOUNT_USRQUOTA 0x00080000
93
+ #define F2FS_MOUNT_GRPQUOTA 0x00100000
91
94
92
95
#define clear_opt (sbi , option ) ((sbi)->mount_opt.opt &= ~F2FS_MOUNT_##option)
93
96
#define set_opt (sbi , option ) ((sbi)->mount_opt.opt |= F2FS_MOUNT_##option)
@@ -521,6 +524,12 @@ struct f2fs_inode_info {
521
524
nid_t i_xattr_nid ; /* node id that contains xattrs */
522
525
loff_t last_disk_size ; /* lastly written file size */
523
526
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
524
533
struct list_head dirty_list ; /* dirty list for dirs and files */
525
534
struct list_head gdirty_list ; /* linked in global dirty list */
526
535
struct list_head inmem_pages ; /* inmemory pages managed by f2fs */
@@ -1376,17 +1385,23 @@ static inline bool f2fs_has_xattr_block(unsigned int ofs)
1376
1385
return ofs == XATTR_NODE_OFFSET ;
1377
1386
}
1378
1387
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 ,
1381
1390
struct inode * inode , blkcnt_t * count )
1382
1391
{
1383
- blkcnt_t diff ;
1392
+ blkcnt_t diff = 0 , release = 0 ;
1384
1393
block_t avail_user_block_count ;
1394
+ int ret ;
1395
+
1396
+ ret = dquot_reserve_block (inode , * count );
1397
+ if (ret )
1398
+ return ret ;
1385
1399
1386
1400
#ifdef CONFIG_F2FS_FAULT_INJECTION
1387
1401
if (time_to_inject (sbi , FAULT_BLOCK )) {
1388
1402
f2fs_show_injection_info (FAULT_BLOCK );
1389
- return false;
1403
+ release = * count ;
1404
+ goto enospc ;
1390
1405
}
1391
1406
#endif
1392
1407
/*
@@ -1401,17 +1416,24 @@ static inline bool inc_valid_block_count(struct f2fs_sb_info *sbi,
1401
1416
if (unlikely (sbi -> total_valid_block_count > avail_user_block_count )) {
1402
1417
diff = sbi -> total_valid_block_count - avail_user_block_count ;
1403
1418
* count -= diff ;
1419
+ release = diff ;
1404
1420
sbi -> total_valid_block_count = avail_user_block_count ;
1405
1421
if (!* count ) {
1406
1422
spin_unlock (& sbi -> stat_lock );
1407
1423
percpu_counter_sub (& sbi -> alloc_valid_block_count , diff );
1408
- return false ;
1424
+ goto enospc ;
1409
1425
}
1410
1426
}
1411
1427
spin_unlock (& sbi -> stat_lock );
1412
1428
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 ;
1415
1437
}
1416
1438
1417
1439
static 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,
1425
1447
f2fs_bug_on (sbi , inode -> i_blocks < sectors );
1426
1448
sbi -> total_valid_block_count -= (block_t )count ;
1427
1449
spin_unlock (& sbi -> stat_lock );
1428
- f2fs_i_blocks_write (inode , count , false);
1450
+ f2fs_i_blocks_write (inode , count , false, true );
1429
1451
}
1430
1452
1431
1453
static 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)
1554
1576
return le32_to_cpu (F2FS_CKPT (sbi )-> cp_pack_start_sum );
1555
1577
}
1556
1578
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 ,
1558
1580
struct inode * inode , bool is_inode )
1559
1581
{
1560
1582
block_t valid_block_count ;
1561
1583
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
+ }
1562
1591
1563
1592
spin_lock (& sbi -> stat_lock );
1564
1593
1565
1594
valid_block_count = sbi -> total_valid_block_count + 1 ;
1566
1595
if (unlikely (valid_block_count + sbi -> reserved_blocks >
1567
1596
sbi -> user_block_count )) {
1568
1597
spin_unlock (& sbi -> stat_lock );
1569
- return false ;
1598
+ goto enospc ;
1570
1599
}
1571
1600
1572
1601
valid_node_count = sbi -> total_valid_node_count + 1 ;
1573
1602
if (unlikely (valid_node_count > sbi -> total_node_count )) {
1574
1603
spin_unlock (& sbi -> stat_lock );
1575
- return false ;
1604
+ goto enospc ;
1576
1605
}
1577
1606
1607
+ sbi -> total_valid_node_count ++ ;
1608
+ sbi -> total_valid_block_count ++ ;
1609
+ spin_unlock (& sbi -> stat_lock );
1610
+
1578
1611
if (inode ) {
1579
1612
if (is_inode )
1580
1613
f2fs_mark_inode_dirty_sync (inode , true);
1581
1614
else
1582
- f2fs_i_blocks_write (inode , 1 , true);
1615
+ f2fs_i_blocks_write (inode , 1 , true, true );
1583
1616
}
1584
1617
1585
- sbi -> total_valid_node_count ++ ;
1586
- sbi -> total_valid_block_count ++ ;
1587
- spin_unlock (& sbi -> stat_lock );
1588
-
1589
1618
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 ;
1591
1625
}
1592
1626
1593
1627
static 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,
1599
1633
f2fs_bug_on (sbi , !sbi -> total_valid_node_count );
1600
1634
f2fs_bug_on (sbi , !is_inode && !inode -> i_blocks );
1601
1635
1602
- if (!is_inode )
1603
- f2fs_i_blocks_write (inode , 1 , false);
1604
1636
sbi -> total_valid_node_count -- ;
1605
1637
sbi -> total_valid_block_count -- ;
1606
1638
1607
1639
spin_unlock (& sbi -> stat_lock );
1640
+
1641
+ if (!is_inode )
1642
+ f2fs_i_blocks_write (inode , 1 , false, true);
1608
1643
}
1609
1644
1610
1645
static 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)
1879
1914
}
1880
1915
1881
1916
static inline void f2fs_i_blocks_write (struct inode * inode ,
1882
- block_t diff , bool add )
1917
+ block_t diff , bool add , bool claim )
1883
1918
{
1884
1919
bool clean = !is_inode_flag_set (inode , FI_DIRTY_INODE );
1885
1920
bool recover = is_inode_flag_set (inode , FI_AUTO_RECOVER );
1886
- blkcnt_t sectors = diff << F2FS_LOG_SECTORS_PER_BLOCK ;
1887
1921
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
+
1890
1932
f2fs_mark_inode_dirty_sync (inode , true);
1891
1933
if (clean || recover )
1892
1934
set_inode_flag (inode , FI_AUTO_RECOVER );
0 commit comments