struct page { struct inode *inode; unsigned long offset; struct page *next_hash; atomic_t count; unsigned flags; /* atomic flags, some possibly updated asynchronously */ ... /* d'autres champs */ };Dans cette structure, le champs flags est un ensemble de bits définis ci-après :
/* Page flag bit values */ #define PG_locked 0 #define PG_error 1 #define PG_referenced 2 #define PG_uptodate 3 #define PG_free_after 4 #define PG_decr_after 5Puis le programmeur a défini des macros pour tester commodément ces bits à l'aide de la fonction test_bit définie par ailleurs :
/* Make it prettier to test the above... */ #define PageLocked(page) \ (test_bit(PG_locked, &(page)->flags)) #define PageError(page) \ (test_bit(PG_error, &(page)->flags)) #define PageReferenced(page) \ (test_bit(PG_referenced, &(page)->flags)) #define PageUptodate(page) \ (test_bit(PG_uptodate, &(page)->flags)) #define PageFreeAfter(page) \ (test_bit(PG_free_after, &(page)->flags)) #define PageDecrAfter(page) \ (test_bit(PG_decr_after, &(page)->flags))