X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/e5568f75972dfc723778653c11cb6b4dc825716a..743b15655a24ee3fe9f458f383003e011db0558f:/bsd/vfs/vfs_journal.h diff --git a/bsd/vfs/vfs_journal.h b/bsd/vfs/vfs_journal.h index 05606b1ba..b03209b9a 100644 --- a/bsd/vfs/vfs_journal.h +++ b/bsd/vfs/vfs_journal.h @@ -30,11 +30,12 @@ #define _SYS_VFS_JOURNAL_H_ #include +#include #ifdef __APPLE_API_UNSTABLE #include -#include +#include typedef struct block_info { off_t bnum; // block # on the file system device @@ -94,7 +95,7 @@ typedef struct journal_header { * In memory structure about the journal. */ typedef struct journal { - struct lock__bsd__ jlock; + lck_mtx_t jlock; // protects the struct journal data struct vnode *jdev; // vnode of the device where the journal lives off_t jdev_offset; // byte offset to the start of the journal @@ -118,11 +119,11 @@ typedef struct journal { transaction *tr_freeme; // transaction structs that need to be free'd - volatile off_t active_start; // the active start that we only keep in memory - simple_lock_data_t old_start_lock; // guard access - volatile off_t old_start[16]; // this is how we do lazy start update + volatile off_t active_start; // the active start that we only keep in memory + lck_mtx_t old_start_lock; // protects the old_start + volatile off_t old_start[16]; // this is how we do lazy start update - int last_flush_err; // last error from flushing the cache + int last_flush_err; // last error from flushing the cache } journal; /* internal-only journal flags (top 16 bits) */ @@ -134,10 +135,16 @@ typedef struct journal { /* journal_open/create options are always in the low-16 bits */ #define JOURNAL_OPTION_FLAGS_MASK 0x0000ffff +__BEGIN_DECLS /* * Prototypes. */ +/* + * Call journal_init() to initialize the journaling code (sets up lock attributes) + */ +void journal_init(void); + /* * Call journal_create() to create a new journal. You only * call this once, typically at file system creation time. @@ -195,12 +202,25 @@ journal *journal_open(struct vnode *jvp, void (*flush)(void *arg), void *arg); +/* + * Test whether the journal is clean or not. This is intended + * to be used when you're mounting read-only. If the journal + * is not clean for some reason then you should not mount the + * volume as your data structures may be in an unknown state. + */ +int journal_is_clean(struct vnode *jvp, + off_t offset, + off_t journal_size, + struct vnode *fsvp, + size_t min_fs_block_size); + + /* * Call journal_close() just before your file system is unmounted. * It flushes any outstanding transactions and makes sure the * journal is in a consistent state. */ -void journal_close(journal *journal); +void journal_close(journal *journalp); /* * flags for journal_create/open. only can use @@ -238,6 +258,9 @@ int journal_end_transaction(journal *jnl); int journal_active(journal *jnl); int journal_flush(journal *jnl); +void *journal_owner(journal *jnl); // compare against current_thread() + +__END_DECLS #endif /* __APPLE_API_UNSTABLE */ #endif /* !_SYS_VFS_JOURNAL_H_ */