当前位置: 首页 > news >正文

Ntfs!LfsFlushLfcb函数分析之while的循环条件NextLbcb的确定和FirstLbcb->LbcbFlags的几种情况

第一部分:

VOID
LfsFlushLfcb (
IN PLFCB Lfcb,
IN LSN TargetLsn,
IN BOOLEAN RestartLsn
)
{

        while (!ContainsLastEntry) {

            ASSERT( FirstLbcb != NULL );


//
//  Find the block of Lbcb's that make up the first I/O, remembering
//  how many there are.  Also remember if this I/O contains the
//  last element on the list when we were called.
//

            LfsFindFirstIo( Lfcb,
TargetLsn,
RestartLsn,
FirstLbcb,
&NextLbcb,                 //NextLbcb的确定,和while循环有关:FirstLbcb = NextLbcb;
&FileOffset,                //FileOffset的确定
&ContainsLastEntry,
&LfsRestart,                //LfsRestart的确定
&UseTailCopy,
&IoBlocks );
.

           //
//  For the loghead pages (2 lfs restart pages and 2 ping pong pages
//  explicitly flush them down using the partial mdl we built
//  The regular cc logic w/ UserWriteData  that pares the write down
//  to the correct offsets works here as well
// 对于日志头页面(2个lfs重启页面和2个乒乓页面),使用我们构建的部分mdl明确将其刷新。
//    带有UserWriteData的常规cc逻辑(将写操作减少到正确的偏移量)在这里同样适用

            if (LfsRestart || UseTailCopy) {


Status = IoSynchronousPageWrite( Lfcb->FileObject,
Lfcb->LogHeadPartialMdl,
(PLARGE_INTEGER)&FileOffset,
&Event,
&Iosb );

            } else {

                //
//  This is a normal log page so flush through the cache
//这是一个正常的日志页面,所以请刷新缓存

                CcFlushCache( Lfcb->FileObject->SectionObjectPointer,
(PLARGE_INTEGER)&FileOffset,
Length,
&Iosb );


//
//  Remember the starting Lbcb for the next I/O.
//

            FirstLbcb = NextLbcb;
}

第二部分:

0: kd> dx -r1 (*((Ntfs!_LIST_ENTRY *)0xe135ed2c))
(*((Ntfs!_LIST_ENTRY *)0xe135ed2c))                 [Type: _LIST_ENTRY]
[+0x000] Flink            : 0xe1277b54 [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe1341860 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((Ntfs!_LIST_ENTRY *)0xe1277b54)
((Ntfs!_LIST_ENTRY *)0xe1277b54)                 : 0xe1277b54 [Type: _LIST_ENTRY *]
[+0x000] Flink            : 0xe1350cec [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe135ed2c [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((Ntfs!_LIST_ENTRY *)0xe1350cec)
((Ntfs!_LIST_ENTRY *)0xe1350cec)                 : 0xe1350cec [Type: _LIST_ENTRY *]
[+0x000] Flink            : 0xe127bc34 [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe1277b54 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((Ntfs!_LIST_ENTRY *)0xe127bc34)
((Ntfs!_LIST_ENTRY *)0xe127bc34)                 : 0xe127bc34 [Type: _LIST_ENTRY *]
[+0x000] Flink            : 0xe1341860 [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe1350cec [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((Ntfs!_LIST_ENTRY *)0xe1341860)
((Ntfs!_LIST_ENTRY *)0xe1341860)                 : 0xe1341860 [Type: _LIST_ENTRY *]
[+0x000] Flink            : 0xe135ed2c [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe127bc34 [Type: _LIST_ENTRY *]


0: kd> dx -r1 (*((Ntfs!_LIST_ENTRY *)0xe1341860))
(*((Ntfs!_LIST_ENTRY *)0xe1341860))                 [Type: _LIST_ENTRY]
[+0x000] Flink            : 0xe135ed2c [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe127bc34 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((Ntfs!_LIST_ENTRY *)0xe135ed2c)
((Ntfs!_LIST_ENTRY *)0xe135ed2c)                 : 0xe135ed2c [Type: _LIST_ENTRY *]
[+0x000] Flink            : 0xe1277b54 [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe1341860 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((Ntfs!_LIST_ENTRY *)0xe1277b54)
((Ntfs!_LIST_ENTRY *)0xe1277b54)                 : 0xe1277b54 [Type: _LIST_ENTRY *]
[+0x000] Flink            : 0xe1350cec [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe135ed2c [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((Ntfs!_LIST_ENTRY *)0xe1350cec)
((Ntfs!_LIST_ENTRY *)0xe1350cec)                 : 0xe1350cec [Type: _LIST_ENTRY *]
[+0x000] Flink            : 0xe127bc34 [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe1277b54 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((Ntfs!_LIST_ENTRY *)0xe127bc34)
((Ntfs!_LIST_ENTRY *)0xe127bc34)                 : 0xe127bc34 [Type: _LIST_ENTRY *]
[+0x000] Flink            : 0xe1341860 [Type: _LIST_ENTRY *]
[+0x004] Blink            : 0xe1350cec [Type: _LIST_ENTRY *]


第三部分:

0: kd> dt lbcb e135ed2c-4
Ntfs!LBCB
+0x000 NodeTypeCode     : 0n2050
+0x002 NodeByteSize     : 0n96
+0x004 WorkqueLinks     : _LIST_ENTRY [ 0xe1277b54 - 0xe1341860 ]
+0x00c ActiveLinks      : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x018 FileOffset       : 0n4096
+0x020 Length           : 0n4048
+0x028 SeqNumber        : 0n0
+0x030 BufferOffset     : 0n0
+0x038 PageHeader       : 0xe1363008 Void
+0x03c LogPageBcb       : (null)
+0x040 LastLsn          : _LARGE_INTEGER 0x8124466
+0x048 LastEndLsn       : _LARGE_INTEGER 0x8124466
+0x050 Flags            : 0
+0x054 LbcbFlags        : 0x20
+0x058 ResourceThread   : 0


0: kd> dt lbcb 0xe1277b54-4
Ntfs!LBCB
+0x000 NodeTypeCode     : 0n2050
+0x002 NodeByteSize     : 0n96
+0x004 WorkqueLinks     : _LIST_ENTRY [ 0xe1350cec - 0xe135ed2c ]
+0x00c ActiveLinks      : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x018 FileOffset       : 0n0
+0x020 Length           : 0n4048
+0x028 SeqNumber        : 0n0
+0x030 BufferOffset     : 0n0
+0x038 PageHeader       : 0xe138c008 Void
+0x03c LogPageBcb       : (null)
+0x040 LastLsn          : _LARGE_INTEGER 0x8124467
+0x048 LastEndLsn       : _LARGE_INTEGER 0x8124467
+0x050 Flags            : 0
+0x054 LbcbFlags        : 0x20
+0x058 ResourceThread   : 0


0: kd> dt lbcb 0xe1350cec-4
Ntfs!LBCB
+0x000 NodeTypeCode     : 0n2050
+0x002 NodeByteSize     : 0n96
+0x004 WorkqueLinks     : _LIST_ENTRY [ 0xe127bc34 - 0xe1277b54 ]
+0x00c ActiveLinks      : _LIST_ENTRY [ 0xe1341868 - 0xe1341868 ]
+0x018 FileOffset       : 0n9576448
+0x020 Length           : 0n4096
+0x028 SeqNumber        : 0n8
+0x030 BufferOffset     : 0n1112
+0x038 PageHeader       : 0xc11a2000 Void
+0x03c LogPageBcb       : 0x89811ce8 Void
+0x040 LastLsn          : _LARGE_INTEGER 0x8124478
+0x048 LastEndLsn       : _LARGE_INTEGER 0x8124478
+0x050 Flags            : 1
+0x054 LbcbFlags        : 0xe
+0x058 ResourceThread   : 0x8999d023


#define LBCB_LOG_WRAPPED                        (0x00000001)
#define LBCB_ON_ACTIVE_QUEUE                    (0x00000002)
#define LBCB_NOT_EMPTY                          (0x00000004)
#define LBCB_FLUSH_COPY                         (0x00000008)
#define LBCB_RESTART_LBCB                       (0x00000020)


0: kd> dt lbcb 0xe127bc34-4
Ntfs!LBCB
+0x000 NodeTypeCode     : 0n2050
+0x002 NodeByteSize     : 0n96
+0x004 WorkqueLinks     : _LIST_ENTRY [ 0xe1341860 - 0xe1350cec ]
+0x00c ActiveLinks      : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x018 FileOffset       : 0n4096
+0x020 Length           : 0n224
+0x028 SeqNumber        : 0n0
+0x030 BufferOffset     : 0n0
+0x038 PageHeader       : 0xe139d008 Void
+0x03c LogPageBcb       : (null)
+0x040 LastLsn          : _LARGE_INTEGER 0x8124479
+0x048 LastEndLsn       : _LARGE_INTEGER 0x8124479
+0x050 Flags            : 0
+0x054 LbcbFlags        : 0x20
+0x058 ResourceThread   : 0

http://www.dtcms.com/a/275805.html

相关文章:

  • docker-compose方式搭建lnmp环境——筑梦之路
  • 【android bluetooth 协议分析 07】【SDP详解 2】【SDP 初始化】
  • Operation Blackout 2025: Smoke Mirrors
  • Windows符号链接解决vscode和pycharm占用C盘空间太大的问题
  • NX二次开发——导入模型是常遇见的问题(导入模型原点的确定导入模型坐标的确定)
  • BERT:双向Transformer革命 | 重塑自然语言理解的预训练范式
  • 深入理解大语言模型:从核心技术到极简实现
  • 洛谷题解 | UVA1485 Permutation Counting
  • jenkins自动化部署前端vue+docker项目
  • 前端面试宝典---项目难点2-智能问答对话框采用虚拟列表动态渲染可视区域元素(10万+条数据)
  • 自动化运维工具jenkins问题
  • Ubuntu安装Jenkins
  • java堆的创建与基础代码解析(图文)
  • Classifier guidance与Classifier-free guidance的原理和公式推导
  • 深大计算机游戏开发实验三
  • 深度学习图像分类数据集—害虫识别分类
  • 分布式数据库系统模式结构深度解析
  • Nginx 中的负载均衡策略
  • 数据统计及透视表
  • 使用Java完成下面项目
  • 引入了模块但没有使用”,会不会被打包进去
  • 【科研绘图系列】R语言绘制小提琴图
  • 基于定制开发开源AI智能名片S2B2C商城小程序的社群游戏定制策略研究
  • cuDNN 的 IMPLICIT_GEMM 算法
  • 【数据结构初阶】--顺序表(二)
  • 浅谈 Pydantic v2 的 RootModel 与联合类型——构建多请求结构的统一入口模型
  • 钉钉企业应用开发实战:从零构建组织级业务工具
  • 【LeetCode453.最小操作次数使数组元素相等】
  • leetcode-链表排序
  • Matlab中optimoptions的用法