Skip to content

Commit 07974d2

Browse files
author
Andreas Gruenbacher
committed
gfs2: Rename rs_{free -> requested} and rd_{reserved -> requested}
We keep track of what we've so far been referring to as reservations in rd_rstree: the nodes in that tree indicate where in a resource group we'd like to allocate the next couple of blocks for a particular inode. Local processes take those as hints, but they may still "steal" blocks from those extents, so when actually allocating a block, we must double check in the bitmap whether that block is actually still free. Likewise, other cluster nodes may "steal" such blocks as well. One of the following patches introduces resource group glock sharing, i.e., sharing of an exclusively locked resource group glock among local processes to speed up allocations. To make that work, we'll need to keep track of how many blocks we've actually reserved for each inode, so we end up with two different kinds of reservations. Distinguish these two kinds by referring to blocks which are reserved but may still be "stolen" as "requested". This rename also makes it more obvious that rs_requested and rd_requested are strongly related. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
1 parent 0ec9b9e commit 07974d2

3 files changed

Lines changed: 33 additions & 33 deletions

File tree

fs/gfs2/incore.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ struct gfs2_rgrpd {
106106
u32 rd_data; /* num of data blocks in rgrp */
107107
u32 rd_bitbytes; /* number of bytes in data bitmaps */
108108
u32 rd_free;
109-
u32 rd_reserved; /* number of blocks reserved */
109+
u32 rd_requested; /* number of blocks in rd_rstree */
110110
u32 rd_free_clone;
111111
u32 rd_dinodes;
112112
u64 rd_igeneration;
@@ -290,8 +290,8 @@ struct gfs2_qadata { /* quota allocation data */
290290
struct gfs2_blkreserv {
291291
struct rb_node rs_node; /* node within rd_rstree */
292292
struct gfs2_rgrpd *rs_rgd;
293-
u64 rs_start; /* start of reservation */
294-
u32 rs_free; /* how many blocks are still free */
293+
u64 rs_start;
294+
u32 rs_requested;
295295
};
296296

297297
/*

fs/gfs2/rgrp.c

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ static inline u64 gfs2_bit_search(const __le64 *ptr, u64 mask, u8 state)
203203
*/
204204
static inline int rs_cmp(u64 start, u32 len, struct gfs2_blkreserv *rs)
205205
{
206-
if (start >= rs->rs_start + rs->rs_free)
206+
if (start >= rs->rs_start + rs->rs_requested)
207207
return 1;
208208
if (rs->rs_start >= start + len)
209209
return -1;
@@ -625,7 +625,7 @@ static void dump_rs(struct seq_file *seq, const struct gfs2_blkreserv *rs,
625625
fs_id_buf,
626626
(unsigned long long)ip->i_no_addr,
627627
(unsigned long long)rs->rs_start,
628-
rs->rs_free);
628+
rs->rs_requested);
629629
}
630630

631631
/**
@@ -645,17 +645,17 @@ static void __rs_deltree(struct gfs2_blkreserv *rs)
645645
rb_erase(&rs->rs_node, &rgd->rd_rstree);
646646
RB_CLEAR_NODE(&rs->rs_node);
647647

648-
if (rs->rs_free) {
649-
/* return reserved blocks to the rgrp */
650-
BUG_ON(rs->rs_rgd->rd_reserved < rs->rs_free);
651-
rs->rs_rgd->rd_reserved -= rs->rs_free;
648+
if (rs->rs_requested) {
649+
/* return requested blocks to the rgrp */
650+
BUG_ON(rs->rs_rgd->rd_requested < rs->rs_requested);
651+
rs->rs_rgd->rd_requested -= rs->rs_requested;
652652

653653
/* The rgrp extent failure point is likely not to increase;
654654
it will only do so if the freed blocks are somehow
655655
contiguous with a span of free blocks that follows. Still,
656656
it will force the number to be recalculated later. */
657-
rgd->rd_extfail_pt += rs->rs_free;
658-
rs->rs_free = 0;
657+
rgd->rd_extfail_pt += rs->rs_requested;
658+
rs->rs_requested = 0;
659659
}
660660
}
661661

@@ -672,7 +672,7 @@ void gfs2_rs_deltree(struct gfs2_blkreserv *rs)
672672
if (rgd) {
673673
spin_lock(&rgd->rd_rsspin);
674674
__rs_deltree(rs);
675-
BUG_ON(rs->rs_free);
675+
BUG_ON(rs->rs_requested);
676676
spin_unlock(&rgd->rd_rsspin);
677677
}
678678
}
@@ -1504,7 +1504,7 @@ static void rs_insert(struct gfs2_inode *ip)
15041504
rb_entry(*newn, struct gfs2_blkreserv, rs_node);
15051505

15061506
parent = *newn;
1507-
rc = rs_cmp(rs->rs_start, rs->rs_free, cur);
1507+
rc = rs_cmp(rs->rs_start, rs->rs_requested, cur);
15081508
if (rc > 0)
15091509
newn = &((*newn)->rb_right);
15101510
else if (rc < 0)
@@ -1520,7 +1520,7 @@ static void rs_insert(struct gfs2_inode *ip)
15201520
rb_insert_color(&rs->rs_node, &rgd->rd_rstree);
15211521

15221522
/* Do our rgrp accounting for the reservation */
1523-
rgd->rd_reserved += rs->rs_free; /* blocks reserved */
1523+
rgd->rd_requested += rs->rs_requested; /* blocks requested */
15241524
spin_unlock(&rgd->rd_rsspin);
15251525
trace_gfs2_rs(rs, TRACE_RS_INSERT);
15261526
}
@@ -1541,9 +1541,9 @@ static inline u32 rgd_free(struct gfs2_rgrpd *rgd, struct gfs2_blkreserv *rs)
15411541
{
15421542
u32 tot_reserved, tot_free;
15431543

1544-
if (WARN_ON_ONCE(rgd->rd_reserved < rs->rs_free))
1544+
if (WARN_ON_ONCE(rgd->rd_requested < rs->rs_requested))
15451545
return 0;
1546-
tot_reserved = rgd->rd_reserved - rs->rs_free;
1546+
tot_reserved = rgd->rd_requested - rs->rs_requested;
15471547

15481548
if (rgd->rd_free_clone < tot_reserved)
15491549
tot_reserved = 0;
@@ -1578,7 +1578,7 @@ static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip,
15781578
extlen = max_t(u32, atomic_read(&ip->i_sizehint), ap->target);
15791579
extlen = clamp(extlen, (u32)RGRP_RSRV_MINBLKS, free_blocks);
15801580
}
1581-
if ((rgd->rd_free_clone < rgd->rd_reserved) || (free_blocks < extlen))
1581+
if ((rgd->rd_free_clone < rgd->rd_requested) || (free_blocks < extlen))
15821582
return;
15831583

15841584
/* Find bitmap block that contains bits for goal block */
@@ -1593,7 +1593,7 @@ static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip,
15931593
ret = gfs2_rbm_find(&rbm, GFS2_BLKST_FREE, &extlen, &ip->i_res, true);
15941594
if (ret == 0) {
15951595
rs->rs_start = gfs2_rbm_to_block(&rbm);
1596-
rs->rs_free = extlen;
1596+
rs->rs_requested = extlen;
15971597
rs_insert(ip);
15981598
} else {
15991599
if (goal == rgd->rd_last_alloc + rgd->rd_data0)
@@ -1637,7 +1637,7 @@ static u64 gfs2_next_unreserved_block(struct gfs2_rgrpd *rgd, u64 block,
16371637

16381638
if (n) {
16391639
while (rs_cmp(block, length, rs) == 0 && rs != ignore_rs) {
1640-
block = rs->rs_start + rs->rs_free;
1640+
block = rs->rs_start + rs->rs_requested;
16411641
n = n->rb_right;
16421642
if (n == NULL)
16431643
break;
@@ -2263,7 +2263,7 @@ void gfs2_rgrp_dump(struct seq_file *seq, struct gfs2_rgrpd *rgd,
22632263
fs_id_buf,
22642264
(unsigned long long)rgd->rd_addr, rgd->rd_flags,
22652265
rgd->rd_free, rgd->rd_free_clone, rgd->rd_dinodes,
2266-
rgd->rd_reserved, rgd->rd_extfail_pt);
2266+
rgd->rd_requested, rgd->rd_extfail_pt);
22672267
if (rgd->rd_sbd->sd_args.ar_rgrplvb) {
22682268
struct gfs2_rgrp_lvb *rgl = rgd->rd_rgl;
22692269

@@ -2318,12 +2318,12 @@ static void gfs2_adjust_reservation(struct gfs2_inode *ip,
23182318
unsigned int rlen;
23192319

23202320
rs->rs_start += len;
2321-
rlen = min(rs->rs_free, len);
2322-
rs->rs_free -= rlen;
2323-
rgd->rd_reserved -= rlen;
2321+
rlen = min(rs->rs_requested, len);
2322+
rs->rs_requested -= rlen;
2323+
rgd->rd_requested -= rlen;
23242324
trace_gfs2_rs(rs, TRACE_RS_CLAIM);
23252325
if (rs->rs_start < rgd->rd_data0 + rgd->rd_data &&
2326-
rs->rs_free)
2326+
rs->rs_requested)
23272327
goto out;
23282328
/* We used up our block reservation, so we should
23292329
reserve more blocks next time. */

fs/gfs2/trace_gfs2.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ TRACE_EVENT(gfs2_block_alloc,
560560
__field( u8, block_state )
561561
__field( u64, rd_addr )
562562
__field( u32, rd_free_clone )
563-
__field( u32, rd_reserved )
563+
__field( u32, rd_requested )
564564
),
565565

566566
TP_fast_assign(
@@ -571,7 +571,7 @@ TRACE_EVENT(gfs2_block_alloc,
571571
__entry->block_state = block_state;
572572
__entry->rd_addr = rgd->rd_addr;
573573
__entry->rd_free_clone = rgd->rd_free_clone;
574-
__entry->rd_reserved = rgd->rd_reserved;
574+
__entry->rd_requested = rgd->rd_requested;
575575
),
576576

577577
TP_printk("%u,%u bmap %llu alloc %llu/%lu %s rg:%llu rf:%u rr:%lu",
@@ -581,7 +581,7 @@ TRACE_EVENT(gfs2_block_alloc,
581581
(unsigned long)__entry->len,
582582
block_state_name(__entry->block_state),
583583
(unsigned long long)__entry->rd_addr,
584-
__entry->rd_free_clone, (unsigned long)__entry->rd_reserved)
584+
__entry->rd_free_clone, (unsigned long)__entry->rd_requested)
585585
);
586586

587587
/* Keep track of multi-block reservations as they are allocated/freed */
@@ -595,22 +595,22 @@ TRACE_EVENT(gfs2_rs,
595595
__field( dev_t, dev )
596596
__field( u64, rd_addr )
597597
__field( u32, rd_free_clone )
598-
__field( u32, rd_reserved )
598+
__field( u32, rd_requested )
599599
__field( u64, inum )
600600
__field( u64, start )
601-
__field( u32, free )
601+
__field( u32, requested )
602602
__field( u8, func )
603603
),
604604

605605
TP_fast_assign(
606606
__entry->dev = rs->rs_rgd->rd_sbd->sd_vfs->s_dev;
607607
__entry->rd_addr = rs->rs_rgd->rd_addr;
608608
__entry->rd_free_clone = rs->rs_rgd->rd_free_clone;
609-
__entry->rd_reserved = rs->rs_rgd->rd_reserved;
609+
__entry->rd_requested = rs->rs_rgd->rd_requested;
610610
__entry->inum = container_of(rs, struct gfs2_inode,
611611
i_res)->i_no_addr;
612612
__entry->start = rs->rs_start;
613-
__entry->free = rs->rs_free;
613+
__entry->requested = rs->rs_requested;
614614
__entry->func = func;
615615
),
616616

@@ -620,8 +620,8 @@ TRACE_EVENT(gfs2_rs,
620620
(unsigned long long)__entry->start,
621621
(unsigned long long)__entry->rd_addr,
622622
(unsigned long)__entry->rd_free_clone,
623-
(unsigned long)__entry->rd_reserved,
624-
rs_func_name(__entry->func), (unsigned long)__entry->free)
623+
(unsigned long)__entry->rd_requested,
624+
rs_func_name(__entry->func), (unsigned long)__entry->requested)
625625
);
626626

627627
#endif /* _TRACE_GFS2_H */

0 commit comments

Comments
 (0)