All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/1] xfs: add larp diagram
@ 2022-08-16 22:50 Catherine Hoang
  2022-08-16 22:50 ` [PATCH v1 1/1] xfs: add larp state machine diagram Catherine Hoang
  2022-08-16 23:08 ` [PATCH v1 0/1] xfs: add larp diagram Dave Chinner
  0 siblings, 2 replies; 4+ messages in thread
From: Catherine Hoang @ 2022-08-16 22:50 UTC (permalink / raw)
  To: linux-xfs

Hi all,

I've been working on adding a diagram to document the various logged
attribute states and their transitions. This is largely based on Dave's
diagram, with a couple of changes and added details.

The diagram can also be viewed here:
https://pasteboard.co/xyGPkCADuH4c.png

Feedback and comments are appreciated!

Catherine

Catherine Hoang (1):
  xfs: add larp state machine diagram

 Documentation/filesystems/xfs-larp-diagram.svg | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 Documentation/filesystems/xfs-larp-diagram.svg

-- 
2.25.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v1 1/1] xfs: add larp state machine diagram
  2022-08-16 22:50 [PATCH v1 0/1] xfs: add larp diagram Catherine Hoang
@ 2022-08-16 22:50 ` Catherine Hoang
  2022-08-16 23:08 ` [PATCH v1 0/1] xfs: add larp diagram Dave Chinner
  1 sibling, 0 replies; 4+ messages in thread
From: Catherine Hoang @ 2022-08-16 22:50 UTC (permalink / raw)
  To: linux-xfs

Add a state transition diagram documenting each logged attribute state
and their transition conditions.

Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
---
 Documentation/filesystems/xfs-larp-diagram.svg | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 Documentation/filesystems/xfs-larp-diagram.svg

diff --git a/Documentation/filesystems/xfs-larp-diagram.svg b/Documentation/filesystems/xfs-larp-diagram.svg
new file mode 100644
index 000000000000..1a30b4856e2c
--- /dev/null
+++ b/Documentation/filesystems/xfs-larp-diagram.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1478px" height="1820px" viewBox="-0.5 -0.5 1478 1820"><defs/><g><path d="M 720 8 L 720 99.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 720 105.76 L 716 97.76 L 720 99.76 L 724 97.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="720" cy="28" rx="20" ry="20" fill="#ff8000" stroke="#0000cc" pointer-events="all"/><path d="M 700 128 L 244.8 128 Q 234.8 128 234.79 138 L 234.67 357.22" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 234.67 363.22 L 230.67 355.22 L 234.67 357.22 L 238.67 355.22 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:112px;margin-left:562px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap"><font style="font-size:18px">add new attr</font></div></div></div></foreignObject><text x="562" y="117" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">add new attr</text></switch></g><path d="M 720 118 L 720 199.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 720 205.76 L 716 197.76 L 720 199.76 L 724 197.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:172px;margin-left:736px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap"><font style="font-size:18px">replace existing attr</font></div></div></div></foreignObject><text x="736" y="177" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">replace existing attr</text></switch></g><path d="M 705 128 L 1182.6 128 Q 1192.6 128 1192.6 138 L 1192.5 357.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1192.5 363.76 L 1188.5 355.76 L 1192.5 357.76 L 1196.5 355.77 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:112px;margin-left:921px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap"><font style="font-size:18px">remove existing attr</font></div></div></div></foreignObject><text x="921" y="117" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">remove existing attr</text></switch></g><path d="M 720 108 L 740 128 L 720 148 L 700 128 Z" fill="#ff8000" stroke="#0000cc" stroke-miterlimit="10" pointer-events="all"/><rect y="366" width="437" height="492" rx="10" ry="10" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><rect x="15" y="346" width="110" height="20" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="13px"><text x="19.5" y="361.5">ADD</text></g><rect x="645" y="227" width="162" height="80" rx="10" ry="10" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><rect x="660" y="207" width="110" height="20" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="13px"><text x="664.5" y="222.5">REPLACE</text></g><rect x="949" y="366" width="487" height="438" rx="10" ry="10" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><rect x="964" y="346" width="110" height="20" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="13px"><text x="968.5" y="361.5">REMOVE</text></g><path d="M 706 269 L 337.8 268.03 Q 327.8 268 327.79 278 L 327.75 357.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 327.75 363.76 L 323.76 355.76 L 327.75 357.76 L 331.76 355.77 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:252px;margin-left:560px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap"><font style="font-size:18px">larp disabled</font></div></div></div></foreignObject><text x="560" y="257" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">larp disabled</text></switch></g><path d="M 53 608 L 82.76 608" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 88.76 608 L 80.76 612 L 82.76 608 L 80.76 604 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="43" cy="608" rx="10" ry="10" fill="#ff8000" stroke="#0000cc" pointer-events="all"/><path d="M 131 608 L 194.76 608" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 200.76 608 L 192.76 612 L 194.76 608 L 192.76 604 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:598px;margin-left:163px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">leaf</div></div></div></foreignObject><text x="163" y="603" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">leaf</text></switch></g><path d="M 111 628 L 111 776 Q 111 786 121 786 L 194.76 786" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 200.76 786 L 192.76 790 L 194.76 786 L 192.76 782 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:774px;margin-left:163px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">node</div></div></div></foreignObject><text x="163" y="779" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">node</text></switch></g><path d="M 111 588 L 111 448 Q 111 438 121 438 L 194.76 438" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 200.76 438 L 192.76 442 L 194.76 438 L 192.76 434 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:422px;margin-left:153px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap"><font style="font-size:18px">shortform</font></div></div></div></foreignObject><text x="153" y="427" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">shortform</text></switch></g><path d="M 111 588 L 131 608 L 111 628 L 91 608 Z" fill="#ff8000" stroke="#0000cc" stroke-miterlimit="10" pointer-events="all"/><path d="M 303 488 L 303 549.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 303 555.76 L 299 547.76 L 303 549.76 L 307 547.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:518px;margin-left:282px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">not enough space</div></div></div></foreignObject><text x="282" y="523" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">not enough space</text></switch></g><path d="M 403 463 L 591 463 Q 601 463 601 473 L 601 1447.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 601 1453.76 L 597 1445.76 L 601 1447.76 L 605 1445.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:452px;margin-left:541px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">success</div></div></div></foreignObject><text x="541" y="457" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">success</text></switch></g><rect x="203" y="388" width="200" height="100" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:202px;height:100px;padding-top:388px;margin-left:202px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:200px;height:100px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px"><font style="font-size:18px">XFS_DAS_SF_ADD</font></p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px"><font style="font-size:18px">add attribute to shortform fork</font></p></div></div></div></foreignObject></switch></g><path d="M 303 658 L 303 727.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 303 733.76 L 299 725.76 L 303 727.76 L 307 725.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:692px;margin-left:282px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">not enough space</div></div></div></foreignObject><text x="282" y="697" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">not enough space</text></switch></g><path d="M 403 608 L 591 608 Q 601 608 601 618 L 601 1447.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 601 1453.76 L 597 1445.76 L 601 1447.76 L 605 1445.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:595px;margin-left:547px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">success</div></div></div></foreignObject><text x="547" y="600" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">success</text></switch></g><rect x="203" y="558" width="200" height="100" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:202px;height:100px;padding-top:558px;margin-left:202px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:200px;height:100px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_LEAF_ADD</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">add attribute to an inode in leaf form</p></div></div></div></foreignObject></switch></g><path d="M 403 786 L 591 786 Q 601 786 601 796 L 601 1447.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 601 1453.76 L 597 1445.76 L 601 1447.76 L 605 1445.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:772px;margin-left:545px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">success</div></div></div></foreignObject><text x="545" y="777" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">success</text></switch></g><rect x="203" y="736" width="200" height="100" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:202px;height:100px;padding-top:736px;margin-left:202px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:200px;height:100px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_NODE_ADD</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">add attribute to a node format attribute tree</p></div></div></div></foreignObject></switch></g><path d="M 707.5 1728 L 707.5 1772.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 707.5 1777.88 L 704 1770.88 L 707.5 1772.63 L 711 1770.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 707.5 1728 L 707.5 1770.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 707.5 1776.76 L 703.5 1768.76 L 707.5 1770.76 L 711.5 1768.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="557" y="1647" width="301" height="81" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:303px;height:81px;padding-top:1647px;margin-left:556px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:301px;height:81px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_DONE</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">finished operation</p></div></div></div></foreignObject></switch></g><path d="M 601 1496 L 600.95 1638.6" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 600.95 1644.6 L 596.95 1636.6 L 600.95 1638.6 L 604.95 1636.6 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:1562px;margin-left:600px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">operation complete</div></div></div></foreignObject><text x="600" y="1567" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">operation complete</text></switch></g><path d="M 601 1456 L 621 1476 L 601 1496 L 581 1476 Z" fill="#ff8000" stroke="#0000cc" stroke-miterlimit="10" pointer-events="all"/><path d="M 989 463 L 816 463 Q 806 463 806 473 L 806 1077.26" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 806 1083.26 L 802 1075.26 L 806 1077.26 L 810 1075.26 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:451px;margin-left:889px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">success</div></div></div></foreignObject><text x="889" y="456" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">success</text></switch></g><rect x="989" y="388" width="240" height="100" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:242px;height:100px;padding-top:388px;margin-left:988px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:240px;height:100px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_SF_REMOVE</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">remove attribute from shortform fork</p></div></div></div></foreignObject></switch></g><path d="M 989 578 L 816 578 Q 806 578 806 588 L 806 1077.26" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 806 1083.26 L 802 1075.26 L 806 1077.26 L 810 1075.26 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:565px;margin-left:893px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">success</div></div></div></foreignObject><text x="893" y="570" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">success</text></switch></g><rect x="989" y="528" width="240" height="100" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:242px;height:100px;padding-top:528px;margin-left:988px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:240px;height:100px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_LEAF_REMOVE</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">remove attribute from an inode in leaf form</p></div></div></div></foreignObject></switch></g><path d="M 989 718 L 816 718 Q 806 718 806 728 L 806 1077.26" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 806 1083.26 L 802 1075.26 L 806 1077.26 L 810 1075.26 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:703px;margin-left:897px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">success</div></div></div></foreignObject><text x="897" y="708" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">success</text></switch></g><rect x="989" y="668" width="240" height="100" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:242px;height:100px;padding-top:668px;margin-left:988px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:240px;height:100px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_NODE_REMOVE</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">setup for removal (attribute exists and blocks are valid)</p></div></div></div></foreignObject></switch></g><path d="M 746 269 L 1097.4 269 Q 1107.4 269 1107.39 279 L 1107.29 357.92" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1107.28 363.92 L 1103.29 355.91 L 1107.29 357.92 L 1111.29 355.92 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:253px;margin-left:888px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap"><font style="font-size:18px">larp enabled</font></div></div></div></foreignObject><text x="888" y="258" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">larp enabled</text></switch></g><path d="M 1382 578 L 1372 578 Q 1362 578 1367 578 L 1369.5 578 Q 1372 578 1366.12 578 L 1360.24 578" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1354.24 578 L 1362.24 574 L 1360.24 578 L 1362.24 582 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="1392" cy="578" rx="10" ry="10" fill="#ff8000" stroke="#0000cc" pointer-events="all"/><path d="M 1332 558 L 1332 448 Q 1332 438 1322 438 L 1237.24 438" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1231.24 438 L 1239.24 434 L 1237.24 438 L 1239.24 442 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:424px;margin-left:1282px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">shortform</div></div></div></foreignObject><text x="1282" y="429" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">shortform</text></switch></g><path d="M 1312 578 L 1237.24 578" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1231.24 578 L 1239.24 574 L 1237.24 578 L 1239.24 582 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:566px;margin-left:1270px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">leaf</div></div></div></foreignObject><text x="1270" y="571" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">leaf</text></switch></g><path d="M 1332 598 L 1332 708 Q 1332 718 1322 718 L 1237.24 718" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1231.24 718 L 1239.24 714 L 1237.24 718 L 1239.24 722 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:703px;margin-left:1268px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">node</div></div></div></foreignObject><text x="1268" y="708" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">node</text></switch></g><path d="M 1332 558 L 1352 578 L 1332 598 L 1312 578 Z" fill="#ff8000" stroke="#0000cc" stroke-miterlimit="10" pointer-events="all"/><rect x="949" y="880" width="528" height="316" rx="10" ry="10" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><rect x="964" y="860" width="110" height="20" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="13px"><text x="968.5" y="875.5">REMOVE XATTR</text></g><rect x="989" y="911" width="290" height="100" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:292px;height:100px;padding-top:911px;margin-left:988px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:290px;height:100px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_LEAF_REMOVE_RMT</p><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_NODE_REMOVE_RMT</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">remove remote attribute blocks</p></div></div></div></foreignObject></switch></g><path d="M 989 1105.5 L 834.24 1105.5" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 828.24 1105.5 L 836.24 1101.5 L 834.24 1105.5 L 836.24 1109.5 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:1091px;margin-left:895px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">success</div></div></div></foreignObject><text x="895" y="1096" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">success</text></switch></g><rect x="989" y="1042" width="290" height="127" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:292px;height:127px;padding-top:1042px;margin-left:988px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:290px;height:127px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_LEAF_REMOVE_ATTR</p><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_NODE_REMOVE_ATTR</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">remove attribute name from leaf/node block</p></div></div></div></foreignObject></switch></g><path d="M 1134 1011 L 1134 1031 L 1134 1022 L 1134 1033.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1134 1039.76 L 1130 1031.76 L 1134 1033.76 L 1138 1031.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 1369 1009 L 1369 971 Q 1369 961 1359 961 L 1287.24 961" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1281.24 961 L 1289.24 957 L 1287.24 961 L 1289.24 965 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:949px;margin-left:1325px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">remote</div></div></div></foreignObject><text x="1325" y="954" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">remote</text></switch></g><path d="M 1369 1049 L 1369 1095.6 Q 1369 1105.6 1359 1105.59 L 1287.24 1105.51" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1281.24 1105.5 L 1289.24 1101.51 L 1287.24 1105.51 L 1289.23 1109.51 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:1093px;margin-left:1320px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">local</div></div></div></foreignObject><text x="1320" y="1098" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">local</text></switch></g><path d="M 1369 1009 L 1389 1029 L 1369 1049 L 1349 1029 Z" fill="#ff8000" stroke="#0000cc" stroke-miterlimit="10" pointer-events="all"/><path d="M 1439 1028 L 1397.23 1028.67" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1391.23 1028.91 L 1399.07 1024.59 L 1397.23 1028.67 L 1399.39 1032.59 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="1449" cy="1028" rx="10" ry="10" fill="#ff8000" stroke="#0000cc" pointer-events="all"/><path d="M 786 1105.5 L 755 1105.58 Q 745 1105.6 745 1095.6 L 745 411.8 Q 745 401.8 735 401.8 L 445.24 401.81" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 439.24 401.81 L 447.24 397.81 L 445.24 401.81 L 447.24 405.81 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:388px;margin-left:552px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">larp enabled replace</div></div></div></foreignObject><text x="552" y="393" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">larp enabled replace</text></switch></g><path d="M 806 1125.5 L 805.35 1638.68" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 805.33 1644.68 L 801.35 1636.67 L 805.35 1638.68 L 809.35 1636.69 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:1196px;margin-left:805px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">operation complete</div></div></div></foreignObject><text x="805" y="1201" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">operation complete</text></switch></g><path d="M 806 1085.5 L 826 1105.5 L 806 1125.5 L 786 1105.5 Z" fill="#ff8000" stroke="#0000cc" stroke-miterlimit="10" pointer-events="all"/><rect x="951" y="1268" width="360" height="310" rx="10" ry="10" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><rect x="966" y="1248" width="110" height="20" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="13px"><text x="970.5" y="1263.5">OLD REPLACE</text></g><path d="M 1131 1451 L 1131 1431 L 1131 1438 L 1131 1426.24" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1131 1420.24 L 1135 1428.24 L 1131 1426.24 L 1127 1428.24 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><rect x="986" y="1451" width="290" height="100" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:292px;height:100px;padding-top:1451px;margin-left:985px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:290px;height:100px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_LEAF_REPLACE</p><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_NODE_REPLACE</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">atomic incomplete flag flip</p></div></div></div></foreignObject></switch></g><rect x="986" y="1290" width="290" height="128" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:292px;height:128px;padding-top:1290px;margin-left:985px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:290px;height:128px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_LEAF_REMOVE_OLD</p><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_NODE_REMOVE_OLD</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">restore original xattr state for remove, invalidate old xattr<br style="font-size:18px"/></p></div></div></div></foreignObject></switch></g><ellipse cx="707.5" cy="1799" rx="16" ry="16" fill="#ff8000" stroke="#0000cc" pointer-events="all"/><ellipse cx="707.5" cy="1799" rx="20" ry="20" fill="none" stroke="#0000cc" pointer-events="all"/><path d="M 621 1476 L 707 1477 L 799.55 1476.67 C 799.52 1468.87 811.52 1468.83 811.55 1476.63 L 811.55 1476.63 L 977.76 1476.03" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 983.76 1476.01 L 975.78 1480.04 L 977.76 1476.03 L 975.75 1472.04 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:1474px;margin-left:697px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">larp disabled<br/>replace</div></div></div></foreignObject></switch></g><rect x="145" y="951" width="330" height="310" rx="10" ry="10" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><rect x="160" y="931" width="110" height="20" fill="#ffffff" stroke="#0000cc" pointer-events="all"/><g fill="#000000" font-family="Helvetica" font-weight="bold" font-size="13px"><text x="164.5" y="946.5">ADD REMOTE</text></g><rect x="173" y="976" width="272" height="107" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:274px;height:107px;padding-top:976px;margin-left:172px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:272px;height:107px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_LEAF_SET_RMT</p><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_NODE_SET_RMT</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">find space for remote blocks</p></div></div></div></foreignObject></switch></g><rect x="173" y="1113" width="272" height="126" rx="10" ry="10" fill="#f0f7ff" stroke="#0000cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:274px;height:126px;padding-top:1113px;margin-left:172px"><div data-colors="color: #000000; " style="box-sizing:border-box;font-size:0px;text-align:center;width:272px;height:126px;overflow:hidden"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;width:100%;height:100%;white-space:normal;overflow-wrap:normal"><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_LEAF_ALLOC_RMT</p><p style="margin:4px 0px 0px;text-align:center;font-size:18px">XFS_DAS_NODE_ALLOC_RMT</p><hr style="font-size:18px"/><p style="font-size:18px"/><p style="margin:0px 0px 0px 8px;text-align:left;font-size:18px">allocate blocks and set remote value</p></div></div></div></foreignObject></switch></g><path d="M 309 1083 L 309 1103 L 309 1093 L 309 1104.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 309 1110.76 L 305 1102.76 L 309 1104.76 L 313 1102.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 726 249 L 746 269 L 726 289 L 706 269 Z" fill="#ff8000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 403 633 L 410.5 633 Q 418 633 418 643 L 418 780 C 425.8 780 425.8 792 418 792 L 418 792 L 418 967.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 418 973.76 L 414 965.76 L 418 967.76 L 422 965.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:878px;margin-left:408px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">remote xattr</div></div></div></foreignObject><text x="408" y="883" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">remote xattr</text></switch></g><path d="M 313 836 L 311 836 L 311 967.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 311 973.76 L 307 965.76 L 311 967.76 L 315 965.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:906px;margin-left:300px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">remote xattr</div></div></div></foreignObject><text x="300" y="911" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">remote xattr</text></switch></g><path d="M 1133.55 768 L 1133.97 872.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1133.99 878.76 L 1129.96 870.78 L 1133.97 872.76 L 1137.96 870.75 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><path d="M 445 1144.5 L 591 1144.59 Q 601 1144.6 601 1154.6 L 601 1447.76" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 601 1453.76 L 597 1445.76 L 601 1447.76 L 605 1445.76 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow:visible;text-align:left"><div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;align-items:unsafe center;justify-content:unsafe center;width:1px;height:1px;padding-top:1130px;margin-left:543px"><div data-colors="color: rgb(0, 0, 0); " style="box-sizing:border-box;font-size:0px;text-align:center"><div style="display:inline-block;font-size:18px;font-family:Helvetica;color:rgb(0, 0, 0);line-height:1.2;pointer-events:all;white-space:nowrap">success</div></div></div></foreignObject><text x="543" y="1135" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="18px" text-anchor="middle">success</text></switch></g><path d="M 1131 1290 L 1131 1205.24" fill="none" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1131 1199.24 L 1135 1207.24 L 1131 1205.24 L 1127 1207.24 Z" fill="#ff8000" stroke="#ff8000" stroke-width="2" stroke-miterlimit="10" pointer-events="all"/></g></svg>
\ No newline at end of file
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v1 0/1] xfs: add larp diagram
  2022-08-16 22:50 [PATCH v1 0/1] xfs: add larp diagram Catherine Hoang
  2022-08-16 22:50 ` [PATCH v1 1/1] xfs: add larp state machine diagram Catherine Hoang
@ 2022-08-16 23:08 ` Dave Chinner
  2022-08-17  1:46   ` Catherine Hoang
  1 sibling, 1 reply; 4+ messages in thread
From: Dave Chinner @ 2022-08-16 23:08 UTC (permalink / raw)
  To: Catherine Hoang; +Cc: linux-xfs

On Tue, Aug 16, 2022 at 03:50:46PM -0700, Catherine Hoang wrote:
> Hi all,
> 
> I've been working on adding a diagram to document the various logged
> attribute states and their transitions. This is largely based on Dave's
> diagram, with a couple of changes and added details.
> 
> The diagram can also be viewed here:
> https://pasteboard.co/xyGPkCADuH4c.png

What did you generate this image with?

i.e. how do we modify it when the state machine changes? We're
already talking about adding multiple attribute modifications being
run through the state machine, so this image will be rapidly out of
date. Hence we need a mechanism to modify the diagram and rebuild
it rather than just committing a binary image file.

The diagram I posted on #xfs was built from a 100-line text source
file with plantuml (open source tool, shipping in at least debian
based distros) and it's pretty trivial to modify and maintain.

I'd much prefer that we have a slighly less pretty diagram that we
can easily modify and rebuild than a binary image that can't easily
be modified or have the history of changes tracked easily.

The patch I originally wrote for the diagram is attached below for
reference.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com


xfs: add LARP state transition diagram source

From: Dave Chinner <dchinner@redhat.com>

Diagram built with the plantuml gui. Could be built from a CLI
invocation, but this was just a quick hack...

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
 Documentation/filesystems/xfs-larp-state.txt | 108 +++++++++++++++++++++++++++
 1 file changed, 108 insertions(+)

diff --git a/Documentation/filesystems/xfs-larp-state.txt b/Documentation/filesystems/xfs-larp-state.txt
new file mode 100644
index 000000000000..a02cf018c634
--- /dev/null
+++ b/Documentation/filesystems/xfs-larp-state.txt
@@ -0,0 +1,108 @@
+@startuml
+
+state REMOTE_ADD {
+	state XFS_DAS_..._SET_RMT {
+	}
+	state XFS_DAS_..._ALLOC_RMT {
+	}
+	XFS_DAS_..._SET_RMT --> XFS_DAS_..._ALLOC_RMT
+}
+
+state ADD {
+	state add_entry <<entryPoint>>
+	state add_form <<choice>>
+	add_entry --> add_form
+	add_form --> XFS_DAS_SF_ADD : short form
+	add_form --> XFS_DAS_LEAF_ADD : leaf form
+	add_form --> XFS_DAS_NODE_ADD : node form
+	state XFS_DAS_SF_ADD {
+	}
+	state XFS_DAS_LEAF_ADD {
+	}
+	state XFS_DAS_NODE_ADD {
+	}
+
+	XFS_DAS_SF_ADD --> XFS_DAS_LEAF_ADD : Full or too large
+	XFS_DAS_LEAF_ADD --> XFS_DAS_NODE_ADD : full or too large
+
+	XFS_DAS_LEAF_ADD --> XFS_DAS_..._SET_RMT : remote xattr
+	XFS_DAS_NODE_ADD --> XFS_DAS_..._SET_RMT : remote xattr
+
+}
+
+state REMOVE {
+	state remove_entry <<entryPoint>>
+	state remove_form <<choice>>
+	remove_entry --> remove_form
+	remove_form --> XFS_DAS_SF_REMOVE : short form
+	remove_form --> XFS_DAS_LEAF_REMOVE : leaf form
+	remove_form --> XFS_DAS_NODE_REMOVE : node form
+	state XFS_DAS_SF_REMOVE {
+	}
+	state XFS_DAS_LEAF_REMOVE {
+	}
+	state XFS_DAS_NODE_REMOVE {
+	}
+
+}
+
+state REPLACE {
+	state replace_choice <<choice>>
+	replace_choice --> add_entry : larp disable
+	replace_choice --> remove_entry : larp enabled
+}
+
+
+state OLD_REPLACE {
+	state XFS_DAS_..._REPLACE {
+		state XFS_DAS_..._REPLACE : atomic INCOMPLETE flag flip
+	}
+	state XFS_DAS_..._REMOVE_OLD {
+		state XFS_DAS_..._REMOVE_OLD : restore original xattr state for remove
+		state XFS_DAS_..._REMOVE_OLD : invalidate old xattr
+	}
+	XFS_DAS_..._REPLACE --> XFS_DAS_..._REMOVE_OLD
+
+}
+
+state add_done <<choice>>
+add_done -down-> XFS_DAS_DONE : Operation Complete
+add_done -up-> XFS_DAS_..._REPLACE : LARP disabled REPLACE
+XFS_DAS_SF_ADD -down-> add_done : Success
+XFS_DAS_LEAF_ADD -down-> add_done : Success
+XFS_DAS_NODE_ADD -down-> add_done : Success
+XFS_DAS_..._ALLOC_RMT -down-> add_done : Success
+
+state remove_done <<choice>>
+remove_done -down-> XFS_DAS_DONE : Operation Complete
+remove_done -up-> add_entry : LARP enabled REPLACE
+XFS_DAS_SF_REMOVE -down-> remove_done : Success
+XFS_DAS_LEAF_REMOVE -down-> remove_done : Success
+XFS_DAS_NODE_REMOVE -down-> remove_done : Success
+XFS_DAS_..._REMOVE_ATTR -down-> remove_done : Success
+
+state REMOVE_XATTR {
+	state remove_xattr_choice <<choice>>
+	remove_xattr_choice --> XFS_DAS_..._REMOVE_RMT : Remote xattr
+	remove_xattr_choice --> XFS_DAS_..._REMOVE_ATTR : Local xattr
+	state XFS_DAS_..._REMOVE_RMT {
+	}
+	state XFS_DAS_..._REMOVE_ATTR {
+	}
+	XFS_DAS_..._REMOVE_RMT --> XFS_DAS_..._REMOVE_ATTR
+}
+XFS_DAS_..._REMOVE_OLD --> remove_xattr_choice
+XFS_DAS_NODE_REMOVE --> remove_xattr_choice
+
+
+state XFS_DAS_DONE {
+}
+
+state set_choice <<choice>>
+
+[*] --> set_choice
+set_choice --> add_entry : add new
+set_choice --> remove_entry : remove existing
+set_choice --> replace_choice : replace existing
+XFS_DAS_DONE --> [*]
+@enduml

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v1 0/1] xfs: add larp diagram
  2022-08-16 23:08 ` [PATCH v1 0/1] xfs: add larp diagram Dave Chinner
@ 2022-08-17  1:46   ` Catherine Hoang
  0 siblings, 0 replies; 4+ messages in thread
From: Catherine Hoang @ 2022-08-17  1:46 UTC (permalink / raw)
  To: Dave Chinner; +Cc: linux-xfs

> On Aug 16, 2022, at 4:08 PM, Dave Chinner <david@fromorbit.com> wrote:
> 
> On Tue, Aug 16, 2022 at 03:50:46PM -0700, Catherine Hoang wrote:
>> Hi all,
>> 
>> I've been working on adding a diagram to document the various logged
>> attribute states and their transitions. This is largely based on Dave's
>> diagram, with a couple of changes and added details.
>> 
>> The diagram can also be viewed here:
>> https://urldefense.com/v3/__https://pasteboard.co/xyGPkCADuH4c.png__;!!ACWV5N9M2RV99hQ!Ie5ew5JxwK3yM7YgVT8e9vzm20GLYKhjpySabyh6ipbZ6i3TGD4K6srKywz40vcQYrvcAafpcKZIdliTv0c$ 
> 
> What did you generate this image with?
> 
> i.e. how do we modify it when the state machine changes? We're
> already talking about adding multiple attribute modifications being
> run through the state machine, so this image will be rapidly out of
> date. Hence we need a mechanism to modify the diagram and rebuild
> it rather than just committing a binary image file.

I used drawio (also open source), but there are many other SVG editors
so it doesn’t necessarily require knowledge of one specific tool. Although
if folks prefer using plantuml, I’m ok with that as well.

Catherine
> 
> The diagram I posted on #xfs was built from a 100-line text source
> file with plantuml (open source tool, shipping in at least debian
> based distros) and it's pretty trivial to modify and maintain.
> 
> I'd much prefer that we have a slighly less pretty diagram that we
> can easily modify and rebuild than a binary image that can't easily
> be modified or have the history of changes tracked easily.
> 
> The patch I originally wrote for the diagram is attached below for
> reference.
> 
> Cheers,
> 
> Dave.
> -- 
> Dave Chinner
> david@fromorbit.com
> 
> 
> xfs: add LARP state transition diagram source
> 
> From: Dave Chinner <dchinner@redhat.com>
> 
> Diagram built with the plantuml gui. Could be built from a CLI
> invocation, but this was just a quick hack...
> 
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---
> Documentation/filesystems/xfs-larp-state.txt | 108 +++++++++++++++++++++++++++
> 1 file changed, 108 insertions(+)
> 
> diff --git a/Documentation/filesystems/xfs-larp-state.txt b/Documentation/filesystems/xfs-larp-state.txt
> new file mode 100644
> index 000000000000..a02cf018c634
> --- /dev/null
> +++ b/Documentation/filesystems/xfs-larp-state.txt
> @@ -0,0 +1,108 @@
> +@startuml
> +
> +state REMOTE_ADD {
> +	state XFS_DAS_..._SET_RMT {
> +	}
> +	state XFS_DAS_..._ALLOC_RMT {
> +	}
> +	XFS_DAS_..._SET_RMT --> XFS_DAS_..._ALLOC_RMT
> +}
> +
> +state ADD {
> +	state add_entry <<entryPoint>>
> +	state add_form <<choice>>
> +	add_entry --> add_form
> +	add_form --> XFS_DAS_SF_ADD : short form
> +	add_form --> XFS_DAS_LEAF_ADD : leaf form
> +	add_form --> XFS_DAS_NODE_ADD : node form
> +	state XFS_DAS_SF_ADD {
> +	}
> +	state XFS_DAS_LEAF_ADD {
> +	}
> +	state XFS_DAS_NODE_ADD {
> +	}
> +
> +	XFS_DAS_SF_ADD --> XFS_DAS_LEAF_ADD : Full or too large
> +	XFS_DAS_LEAF_ADD --> XFS_DAS_NODE_ADD : full or too large
> +
> +	XFS_DAS_LEAF_ADD --> XFS_DAS_..._SET_RMT : remote xattr
> +	XFS_DAS_NODE_ADD --> XFS_DAS_..._SET_RMT : remote xattr
> +
> +}
> +
> +state REMOVE {
> +	state remove_entry <<entryPoint>>
> +	state remove_form <<choice>>
> +	remove_entry --> remove_form
> +	remove_form --> XFS_DAS_SF_REMOVE : short form
> +	remove_form --> XFS_DAS_LEAF_REMOVE : leaf form
> +	remove_form --> XFS_DAS_NODE_REMOVE : node form
> +	state XFS_DAS_SF_REMOVE {
> +	}
> +	state XFS_DAS_LEAF_REMOVE {
> +	}
> +	state XFS_DAS_NODE_REMOVE {
> +	}
> +
> +}
> +
> +state REPLACE {
> +	state replace_choice <<choice>>
> +	replace_choice --> add_entry : larp disable
> +	replace_choice --> remove_entry : larp enabled
> +}
> +
> +
> +state OLD_REPLACE {
> +	state XFS_DAS_..._REPLACE {
> +		state XFS_DAS_..._REPLACE : atomic INCOMPLETE flag flip
> +	}
> +	state XFS_DAS_..._REMOVE_OLD {
> +		state XFS_DAS_..._REMOVE_OLD : restore original xattr state for remove
> +		state XFS_DAS_..._REMOVE_OLD : invalidate old xattr
> +	}
> +	XFS_DAS_..._REPLACE --> XFS_DAS_..._REMOVE_OLD
> +
> +}
> +
> +state add_done <<choice>>
> +add_done -down-> XFS_DAS_DONE : Operation Complete
> +add_done -up-> XFS_DAS_..._REPLACE : LARP disabled REPLACE
> +XFS_DAS_SF_ADD -down-> add_done : Success
> +XFS_DAS_LEAF_ADD -down-> add_done : Success
> +XFS_DAS_NODE_ADD -down-> add_done : Success
> +XFS_DAS_..._ALLOC_RMT -down-> add_done : Success
> +
> +state remove_done <<choice>>
> +remove_done -down-> XFS_DAS_DONE : Operation Complete
> +remove_done -up-> add_entry : LARP enabled REPLACE
> +XFS_DAS_SF_REMOVE -down-> remove_done : Success
> +XFS_DAS_LEAF_REMOVE -down-> remove_done : Success
> +XFS_DAS_NODE_REMOVE -down-> remove_done : Success
> +XFS_DAS_..._REMOVE_ATTR -down-> remove_done : Success
> +
> +state REMOVE_XATTR {
> +	state remove_xattr_choice <<choice>>
> +	remove_xattr_choice --> XFS_DAS_..._REMOVE_RMT : Remote xattr
> +	remove_xattr_choice --> XFS_DAS_..._REMOVE_ATTR : Local xattr
> +	state XFS_DAS_..._REMOVE_RMT {
> +	}
> +	state XFS_DAS_..._REMOVE_ATTR {
> +	}
> +	XFS_DAS_..._REMOVE_RMT --> XFS_DAS_..._REMOVE_ATTR
> +}
> +XFS_DAS_..._REMOVE_OLD --> remove_xattr_choice
> +XFS_DAS_NODE_REMOVE --> remove_xattr_choice
> +
> +
> +state XFS_DAS_DONE {
> +}
> +
> +state set_choice <<choice>>
> +
> +[*] --> set_choice
> +set_choice --> add_entry : add new
> +set_choice --> remove_entry : remove existing
> +set_choice --> replace_choice : replace existing
> +XFS_DAS_DONE --> [*]
> +@enduml


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-08-17  1:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-16 22:50 [PATCH v1 0/1] xfs: add larp diagram Catherine Hoang
2022-08-16 22:50 ` [PATCH v1 1/1] xfs: add larp state machine diagram Catherine Hoang
2022-08-16 23:08 ` [PATCH v1 0/1] xfs: add larp diagram Dave Chinner
2022-08-17  1:46   ` Catherine Hoang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.