patch-2.4.17 linux/fs/jbd/commit.c
Next file: linux/fs/jbd/journal.c
Previous file: linux/fs/intermezzo/psdev.c
Back to the patch index
Back to the overall index
- Lines: 63
- Date:
Fri Dec 21 16:40:32 2001
- Orig file:
linux-2.4.16/fs/jbd/commit.c
- Orig date:
Fri Nov 9 22:25:04 2001
diff -Naur -X /home/marcelo/lib/dontdiff linux-2.4.16/fs/jbd/commit.c linux/fs/jbd/commit.c
@@ -47,7 +47,8 @@
struct buffer_head *wbuf[64];
int bufs;
int flags;
- int blocknr;
+ int err;
+ unsigned long blocknr;
char *tagp = NULL;
journal_header_t *header;
journal_block_tag_t *tag = NULL;
@@ -352,6 +353,11 @@
jbd_debug(4, "JBD: get descriptor\n");
descriptor = journal_get_descriptor_buffer(journal);
+ if (!descriptor) {
+ __journal_abort_hard(journal);
+ continue;
+ }
+
bh = jh2bh(descriptor);
jbd_debug(4, "JBD: got buffer %ld (%p)\n",
bh->b_blocknr, bh->b_data);
@@ -375,7 +381,14 @@
/* Where is the buffer to be written? */
- blocknr = journal_next_log_block(journal);
+ err = journal_next_log_block(journal, &blocknr);
+ /* If the block mapping failed, just abandon the buffer
+ and repeat this loop: we'll fall into the
+ refile-on-abort condition above. */
+ if (err) {
+ __journal_abort_hard(journal);
+ continue;
+ }
/* Bump b_count to prevent truncate from stumbling over
the shadowed buffer! @@@ This can go if we ever get
@@ -554,16 +567,20 @@
jbd_debug(3, "JBD: commit phase 6\n");
+ if (is_journal_aborted(journal))
+ goto skip_commit;
+
/* Done it all: now write the commit record. We should have
* cleaned up our previous buffers by now, so if we are in abort
* mode we can now just skip the rest of the journal write
* entirely. */
- if (is_journal_aborted(journal))
- goto skip_commit;
-
descriptor = journal_get_descriptor_buffer(journal);
-
+ if (!descriptor) {
+ __journal_abort_hard(journal);
+ goto skip_commit;
+ }
+
/* AKPM: buglet - add `i' to tmp! */
for (i = 0; i < jh2bh(descriptor)->b_size; i += 512) {
journal_header_t *tmp =
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)