|
@@ -189,6 +189,36 @@ void ext4_itable_unused_set(struct super_block *sb,
|
|
bg->bg_itable_unused_hi = cpu_to_le16(count >> 16);
|
|
bg->bg_itable_unused_hi = cpu_to_le16(count >> 16);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+/* Just increment the non-pointer handle value */
|
|
|
|
+static handle_t *ext4_get_nojournal(void)
|
|
|
|
+{
|
|
|
|
+ handle_t *handle = current->journal_info;
|
|
|
|
+ unsigned long ref_cnt = (unsigned long)handle;
|
|
|
|
+
|
|
|
|
+ BUG_ON(ref_cnt >= EXT4_NOJOURNAL_MAX_REF_COUNT);
|
|
|
|
+
|
|
|
|
+ ref_cnt++;
|
|
|
|
+ handle = (handle_t *)ref_cnt;
|
|
|
|
+
|
|
|
|
+ current->journal_info = handle;
|
|
|
|
+ return handle;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/* Decrement the non-pointer handle value */
|
|
|
|
+static void ext4_put_nojournal(handle_t *handle)
|
|
|
|
+{
|
|
|
|
+ unsigned long ref_cnt = (unsigned long)handle;
|
|
|
|
+
|
|
|
|
+ BUG_ON(ref_cnt == 0);
|
|
|
|
+
|
|
|
|
+ ref_cnt--;
|
|
|
|
+ handle = (handle_t *)ref_cnt;
|
|
|
|
+
|
|
|
|
+ current->journal_info = handle;
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Wrappers for jbd2_journal_start/end.
|
|
* Wrappers for jbd2_journal_start/end.
|
|
*
|
|
*
|
|
@@ -215,11 +245,7 @@ handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks)
|
|
}
|
|
}
|
|
return jbd2_journal_start(journal, nblocks);
|
|
return jbd2_journal_start(journal, nblocks);
|
|
}
|
|
}
|
|
- /*
|
|
|
|
- * We're not journaling, return the appropriate indication.
|
|
|
|
- */
|
|
|
|
- current->journal_info = EXT4_NOJOURNAL_HANDLE;
|
|
|
|
- return current->journal_info;
|
|
|
|
|
|
+ return ext4_get_nojournal();
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -235,11 +261,7 @@ int __ext4_journal_stop(const char *where, handle_t *handle)
|
|
int rc;
|
|
int rc;
|
|
|
|
|
|
if (!ext4_handle_valid(handle)) {
|
|
if (!ext4_handle_valid(handle)) {
|
|
- /*
|
|
|
|
- * Do this here since we don't call jbd2_journal_stop() in
|
|
|
|
- * no-journal mode.
|
|
|
|
- */
|
|
|
|
- current->journal_info = NULL;
|
|
|
|
|
|
+ ext4_put_nojournal(handle);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
sb = handle->h_transaction->t_journal->j_private;
|
|
sb = handle->h_transaction->t_journal->j_private;
|