From ce177b185be5559643e1989fe81a591b2fed50a9 Mon Sep 17 00:00:00 2001 From: adilger Date: Thu, 23 May 2002 22:10:36 +0000 Subject: [PATCH] Save and restore the journal context between preprw and commitrw at the OST. --- lustre/ost/ost_handler.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c index 6c9e27d..b12ad7d 100644 --- a/lustre/ost/ost_handler.c +++ b/lustre/ost/ost_handler.c @@ -357,10 +357,21 @@ static int ost_commit_page(struct obd_conn *conn, struct page *page) static int ost_brw_write_cb(struct ptlrpc_bulk_page *bulk) { + void *journal_save; int rc; ENTRY; + /* Restore the filesystem journal context when we do the commit. + * This is needed for ext3 and reiserfs, but can't really hurt + * other filesystems. + */ + journal_save = current->journal_info; + current->journal_info = bulk->b_desc->b_journal_info; + CERROR("journal_info: saved %p->%p, restored %p\n", current, + journal_save, bulk->b_desc->b_journal_info); rc = ost_commit_page(&bulk->b_desc->b_conn, bulk->b_page); + current->journal_info = journal_save; + CERROR("journal_info: restored %p->%p\n", current, journal_save); if (rc) CERROR("ost_commit_page failed: %d\n", rc); @@ -432,6 +443,10 @@ static int ost_brw_write(struct ost_obd *obddev, struct ptlrpc_request *req) desc->b_portal = OSC_BULK_PORTAL; memcpy(&(desc->b_conn), &conn, sizeof(conn)); + /* Save journal context for commit callbacks */ + CERROR("journal_info: saved %p->%p\n", current, current->journal_info); + desc->b_journal_info = current->journal_info; + for (i = 0, lnb = local_nb; i < niocount; i++, lnb++) { struct ptlrpc_service *srv = req->rq_obd->u.ost.ost_service; struct ptlrpc_bulk_page *bulk; @@ -455,6 +470,7 @@ static int ost_brw_write(struct ost_obd *obddev, struct ptlrpc_request *req) } rc = ptlrpc_register_bulk(desc); + current->journal_info = NULL; /* kind of scary */ if (rc) GOTO(fail_bulk, rc); -- 1.8.3.1