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))