.. | .. |
---|
101 | 101 | GET_SEGNO_FROM_SEG0(sbi, blk_addr))) |
---|
102 | 102 | #define BLKS_PER_SEC(sbi) \ |
---|
103 | 103 | ((sbi)->segs_per_sec * (sbi)->blocks_per_seg) |
---|
| 104 | +#define CAP_BLKS_PER_SEC(sbi) \ |
---|
| 105 | + ((sbi)->segs_per_sec * (sbi)->blocks_per_seg - \ |
---|
| 106 | + (sbi)->unusable_blocks_per_sec) |
---|
| 107 | +#define CAP_SEGS_PER_SEC(sbi) \ |
---|
| 108 | + ((sbi)->segs_per_sec - ((sbi)->unusable_blocks_per_sec >>\ |
---|
| 109 | + (sbi)->log_blocks_per_seg)) |
---|
104 | 110 | #define GET_SEC_FROM_SEG(sbi, segno) \ |
---|
105 | 111 | (((segno) == -1) ? -1: (segno) / (sbi)->segs_per_sec) |
---|
106 | 112 | #define GET_SEG_FROM_SEC(sbi, secno) \ |
---|
.. | .. |
---|
295 | 301 | struct mutex seglist_lock; /* lock for segment bitmaps */ |
---|
296 | 302 | int nr_dirty[NR_DIRTY_TYPE]; /* # of dirty segments */ |
---|
297 | 303 | unsigned long *victim_secmap; /* background GC victims */ |
---|
| 304 | + unsigned long *pinned_secmap; /* pinned victims from foreground GC */ |
---|
| 305 | + unsigned int pinned_secmap_cnt; /* count of victims which has pinned data */ |
---|
| 306 | + bool enable_pin_section; /* enable pinning section */ |
---|
298 | 307 | }; |
---|
299 | 308 | |
---|
300 | 309 | /* victim selection function for cleaning and SSR */ |
---|