[LU-4901] Remove triple buffer update from llog_osd_write_blob() Created: 13/Apr/14  Updated: 04/Jun/14  Resolved: 04/Jun/14

Status: Closed
Project: Lustre
Component/s: None
Affects Version/s: Lustre 2.6.0
Fix Version/s: None

Type: Improvement Priority: Blocker
Reporter: Mikhail Pershin Assignee: Mikhail Pershin
Resolution: Duplicate Votes: 0
Labels: None

Issue Links:
Related
is related to LU-4528 osd_trans_exec_op()) ASSERTION( oti->... Resolved
is related to LU-4183 MDS crash when running fsx with NFS e... Resolved
Rank (Obsolete): 13537

 Description   

The llog_osd_write_blob() have two ways to update llog record, the first one is just normal record write with header, buffer and tail at once, the second is actually three separate writes for header, buffer and tail. The latest produces number of troubles because one of three writes may fail causing partially written buffer and corrupted llog. There is special undo procedure to clean things up after that. All of these demands twice more credits for normal operations and for undo case which is critical in case of wide striping.

Meanwhile this particular triple write case is used only by MGS and can be avoided by preparing correct llog record before calling llog_write(). That would require additional memory allocations to prepare write buffer.



 Comments   
Comment by Andreas Dilger [ 17/Apr/14 ]

While you are in here, can you please change osd_trans_exec_op():

                if (unlikely(rb >= OSD_OT_MAX)) {
                        if (unlikely(ldiskfs_track_declares_assert))
                                LASSERTF(rb < OSD_OT_MAX, "rb = %u\n", rb);
                        else {
                                CWARN("%s: Invalid rollback index %d\n",
                                      osd_name(oti->oti_dev), rb);
                                libcfs_debug_dumpstack(NULL);
                                return;
                        }
                }

so that it has proper braces around the "if" part of these checks, and only prints this CWARN() and dumpstack once per mount. Otherwise it spews to the stack.

Comment by Jodi Levi (Inactive) [ 21/Apr/14 ]

Duplicate of LU-4528.

Comment by Jodi Levi (Inactive) [ 04/Jun/14 ]

Reopening to remove fix version as this is a duplicate

Generated at Sat Feb 10 01:46:50 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.