New ondisk PFS data after hammer pfs-destroy
Tomohiro Kusumi
kusumi.tomohiro at gmail.com
Sat Aug 20 10:06:36 PDT 2016
I partly tried to address this which could be enough for now.
https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/9376f71b677e9fcde9af7c16cd3f31cfcdb43121
2016-08-17 23:14 GMT+09:00 Tomohiro Kusumi <kusumi.tomohiro at gmail.com>:
> This probably isn't a bug, but this still is weird in terms of the
> filesystem design.
>
> --
> 1) Create fs, nothing strange in hammer show result
>
> # newfs_hammer -L TEST /dev/da1 /dev/da2 /dev/da3
> # mount_hammer /dev/da1:/dev/da2:/dev/da3 /HAMMER
> # hammer -f /dev/da1:/dev/da2:/dev/da3 show | less
> 1 Volume header next_tid=0000000100000000
> 2 bufoffset=0000000014040000
> 3 zone 0 next_offset=0000000000000000
> 4 zone 1 next_offset=0000000000000000
> 5 zone 2 next_offset=0000000000000000
> 6 zone 3 next_offset=3000000000000000
> 7 zone 4 next_offset=2000000000000000
> 8 zone 5 next_offset=0000000000000000
> 9 zone 6 next_offset=0000000000000000
> 10 zone 7 next_offset=0000000000000000
> 11 zone 8 next_offset=8000000020801000
> 12 zone 9 next_offset=90000000210001b0
> 13 zone 10 next_offset=a000000000000000
> 14 zone 11 next_offset=b000000000000000
> 15 zone 12 next_offset=c000000000000000
> 16 zone 13 next_offset=d000000000000000
> 17 zone 14 next_offset=e000000000000000
> 18 zone 15 next_offset=f000000000000000
> 19 NODE 8000000020800000 cnt=02 p=0000000000000000 type=L
> depth=0 mirror=0000000000000000 fill=z8:v0:0:65:0=1% {
> 20 G------ ELM 0 R lo=00000001 obj=0000000000000001 rt=01
> key=0000000000000000 tid=0000000100000001
> 21 del=0000000000000000 ot=01
> dataoff=9000000021000000/128 crc=c24e8742 fill=z9:v0:0:66:0=1%
> 22 inode size=0 nlinks=1 mode=00755
> uflags=00000000 caps=05 pobjid=0000000000000000 ot=01
> 23 ctime=00053a445bdbcae1
> mtime=00053a445bdbcae1 atime=00053a445bdbcae1
> 24 G------ ELM 1 R lo=00000002 obj=0000000000000001 rt=15
> key=0000000000000000 tid=0000000100000001
> 25 del=0000000000000000 ot=00
> dataoff=9000000021000080/292 crc=9a311d2a fill=z9:v0:0:66:128=1%
> 26 pfs sync_beg_tid=0000000000000000
> sync_end_tid=0000000000000000
> 27 shared_uuid=a6e96834-647d-11e6-91e2-75d435a9db68
> 28 unique_uuid=a6e96834-647d-11e6-91e2-75d435a9db68
> 29 mirror_flags=00000000 label="TEST"
> 30 }
>
> --
> 2) Create PFS#1, nothing strange in hammer show result
>
> # hammer pfs-master a
> # sync; sync; ...
> # hammer -f /dev/da1:/dev/da2:/dev/da3 show | less
> 1 Volume header next_tid=0000000100008040
> 2 bufoffset=0000000014040000
> 3 zone 0 next_offset=0000000000000000
> 4 zone 1 next_offset=0000000000000000
> 5 zone 2 next_offset=0000000000000000
> 6 zone 3 next_offset=3000000000001500
> 7 zone 4 next_offset=2000000000000000
> 8 zone 5 next_offset=0000000000000000
> 9 zone 6 next_offset=0000000000000000
> 10 zone 7 next_offset=0000000000000000
> 11 zone 8 next_offset=8000000020801000
> 12 zone 9 next_offset=90000000210004a0
> 13 zone 10 next_offset=a000000000000000
> 14 zone 11 next_offset=b000000000000000
> 15 zone 12 next_offset=c000000000000000
> 16 zone 13 next_offset=d000000000000000
> 17 zone 14 next_offset=e000000000000000
> 18 zone 15 next_offset=f000000000000000
> 19 NODE 8000000020800000 cnt=06 p=0000000000000000 type=L
> depth=0 mirror=0000000100008020 fill=z8:v0:0:65:0=1% {
> 20 G------ ELM 0 R lo=00000001 obj=0000000000000001 rt=01
> key=0000000000000000 tid=0000000100000001
> 21 del=0000000000000000 ot=01
> dataoff=9000000021000000/128 crc=c24e8742 fill=z9:v0:0:66:0=1%
> 22 inode size=0 nlinks=1 mode=00755
> uflags=00000000 caps=05 pobjid=0000000000000000 ot=01
> 23 ctime=00053a445bdbcae1
> mtime=00053a445feba105 atime=00053a445bdbcae1
> 24 G------ ELM 1 R lo=00000001 obj=0000000000000001 rt=11
> key=68b7be4356f40000 tid=0000000100008020
> 25 del=0000000000000000 ot=07
> dataoff=9000000021000350/17 crc=7add08fb fill=z9:v0:0:66:848=1%
> 26 dir-entry ino=0000000100000745 lo=00000000 name="a"
> 27 G------ ELM 2 R lo=00000001 obj=0000000100000745 rt=01
> key=0000000000000000 tid=0000000100008020
> 28 del=0000000000000000 ot=07
> dataoff=9000000021000250/128 crc=eff29666 fill=z9:v0:0:66:592=1%
> 29 inode size=10 nlinks=1 mode=00755
> uflags=00000000 caps=00 pobjid=0000000000000001 ot=07
> 30 ctime=00053a445feba105
> mtime=00053a445feba105 atime=00053a445feba105 symlink="@@PFS00001"
> 31 G------ ELM 3 R lo=00000002 obj=0000000000000001 rt=15
> key=0000000000000000 tid=0000000100000001
> 32 del=0000000000000000 ot=00
> dataoff=9000000021000080/292 crc=9a311d2a fill=z9:v0:0:66:128=1%
> 33 pfs sync_beg_tid=0000000000000000
> sync_end_tid=0000000000000000
> 34 shared_uuid=a6e96834-647d-11e6-91e2-75d435a9db68
> 35 unique_uuid=a6e96834-647d-11e6-91e2-75d435a9db68
> 36 mirror_flags=00000000 label="TEST"
> 37 G------ ELM 4 R lo=00000002 obj=0000000000000001 rt=15
> key=0000000000010000 tid=0000000100008020
> 38 del=0000000000000000 ot=01
> dataoff=9000000021000370/292 crc=30dbd6e8 fill=z9:v0:0:66:880=1%
> 39 pfs sync_beg_tid=0000000000000001
> sync_end_tid=0000000100000000
> 40 shared_uuid=d2b4be0a-647d-11e6-91e2-75d435a9db68
> 41 unique_uuid=d2b4be10-647d-11e6-91e2-75d435a9db68
> 42 mirror_flags=00000000 label=""
> 43 G------ ELM 5 R lo=00010001 obj=0000000000000001 rt=01
> key=0000000000000000 tid=0000000100008020
> 44 del=0000000000000000 ot=01
> dataoff=90000000210002d0/128 crc=3adf14e0 fill=z9:v0:0:66:720=1%
> 45 inode size=0 nlinks=1 mode=00755
> uflags=00000000 caps=05 pobjid=0000000000000000 ot=01
> 46 ctime=00053a445feba105
> mtime=00053a445feba105 atime=00053a445feba105
> 47 }
>
> --
> 3) Destroy PFS#1
> Now, the PFS inode and direntry for that symlink are marked with delete flag.
> Ondisk PFS data for PFS#1 is marked with delete flag.
> Root inode of PFS#1 is physically destroyed via
> hammer_pfs_delete_at_cursor() via ioctl(HAMMERIOC_RMR_PSEUDOFS).
>
> These are all fine, but there is a new ondisk PFS data for PFS#1 (at
> ELM5) without delete flag set.
> This comes from below part of hammer_cmd_pseudofs_destroy() in
> sbin/hammer/cmd_pfs.c.
>
> # hammer pfs-destroy a
> # sync; sync; ...
> # hammer -f /dev/da1:/dev/da2:/dev/da3 show | less
> 1 Volume header next_tid=00000001000080e0
> 2 bufoffset=0000000014040000
> 3 zone 0 next_offset=0000000000000000
> 4 zone 1 next_offset=0000000000000000
> 5 zone 2 next_offset=0000000000000000
> 6 zone 3 next_offset=3000000000003e98
> 7 zone 4 next_offset=2000000000000000
> 8 zone 5 next_offset=0000000000000000
> 9 zone 6 next_offset=0000000000000000
> 10 zone 7 next_offset=0000000000000000
> 11 zone 8 next_offset=8000000020801000
> 12 zone 9 next_offset=90000000210005d0
> 13 zone 10 next_offset=a000000000000000
> 14 zone 11 next_offset=b000000000000000
> 15 zone 12 next_offset=c000000000000000
> 16 zone 13 next_offset=d000000000000000
> 17 zone 14 next_offset=e000000000000000
> 18 zone 15 next_offset=f000000000000000
> 19 NODE 8000000020800000 cnt=06 p=0000000000000000 type=L
> depth=0 mirror=00000001000080c0 fill=z8:v0:0:65:0=1% {
> 20 G------ ELM 0 R lo=00000001 obj=0000000000000001 rt=01
> key=0000000000000000 tid=0000000100000001
> 21 del=0000000000000000 ot=01
> dataoff=9000000021000000/128 crc=c24e8742 fill=z9:v0:0:66:0=1%
> 22 inode size=0 nlinks=1 mode=00755
> uflags=00000000 caps=05 pobjid=0000000000000000 ot=01
> 23 ctime=00053a445bdbcae1
> mtime=00053a44641acbfc atime=00053a445bdbcae1
> 24 G------ ELM 1 R lo=00000001 obj=0000000000000001 rt=11
> key=68b7be4356f40000 tid=0000000100008020
> 25 d del=0000000100008060 ot=07
> dataoff=9000000021000350/17 crc=7add08fb fill=z9:v0:0:66:848=1%
> 26 dir-entry ino=0000000100000745 lo=00000000 name="a"
> 27 G------ ELM 2 R lo=00000001 obj=0000000100000745 rt=01
> key=0000000000000000 tid=0000000100008020
> 28 d del=0000000100008060 ot=07
> dataoff=9000000021000250/128 crc=eff29666 fill=z9:v0:0:66:592=1%
> 29 inode size=10 nlinks=1 mode=00755
> uflags=00000000 caps=00 pobjid=0000000000000001 ot=07
> 30 ctime=00053a445feba105
> mtime=00053a445feba105 atime=00053a445feba105 symlink="@@PFS00001"
> 31 G------ ELM 3 R lo=00000002 obj=0000000000000001 rt=15
> key=0000000000000000 tid=0000000100000001
> 32 del=0000000000000000 ot=00
> dataoff=9000000021000080/292 crc=9a311d2a fill=z9:v0:0:66:128=1%
> 33 pfs sync_beg_tid=0000000000000000
> sync_end_tid=0000000000000000
> 34 shared_uuid=a6e96834-647d-11e6-91e2-75d435a9db68
> 35 unique_uuid=a6e96834-647d-11e6-91e2-75d435a9db68
> 36 mirror_flags=00000000 label="TEST"
> 37 G------ ELM 4 R lo=00000002 obj=0000000000000001 rt=15
> key=0000000000010000 tid=0000000100008020
> 38 d del=00000001000080c0 ot=01
> dataoff=9000000021000370/292 crc=30dbd6e8 fill=z9:v0:0:66:880=1%
> 39 pfs sync_beg_tid=0000000000000001
> sync_end_tid=0000000100000000
> 40 shared_uuid=d2b4be0a-647d-11e6-91e2-75d435a9db68
> 41 unique_uuid=d2b4be10-647d-11e6-91e2-75d435a9db68
> 42 mirror_flags=00000000 label=""
> 43 G------ ELM 5 R lo=00000002 obj=0000000000000001 rt=15
> key=0000000000010000 tid=00000001000080c0
> 44 del=0000000000000000 ot=01
> dataoff=90000000210004a0/292 crc=ef56173e fill=z9:v0:0:66:1184=1%
> 45 pfs sync_beg_tid=0000000000000001
> sync_end_tid=0000000000000001
> 46 shared_uuid=d2b4be0a-647d-11e6-91e2-75d435a9db68
> 47 unique_uuid=d2b4be10-647d-11e6-91e2-75d435a9db68
> 48 mirror_flags=80000001 label=""
> 49 }
>
>
> Why do we need this new ondisk PFS#1 data at ELM5 when we're getting
> rid of it (before we once fail to destroy PFS#1) ?
> Given that PFS#1 is physically gone, it's weird that ondisk PFS#1 data
> is still there under PFS#0 along with ondisk PFS#1 data with delete
> flag set.
> Since the new ondisk PFS#1 data appears after the one with delete flag
> set within the node, B-Tree lookup doesn't make a mistake of returning
> ELM5 as an effective undeleted PFS, but it's still confusing as no one
> seems to ever refer to it.
>
> sbin/hammer/cmd_pfs.c
> ...
> 404 /*
> 405 * Set the sync_beg_tid and sync_end_tid's to 1, once we start the
> 406 * RMR the PFS is basically destroyed even if someone ^C's it.
> 407 */
> 408 pfs.ondisk->mirror_flags |= HAMMER_PFSD_SLAVE;
> 409 pfs.ondisk->reserved01 = -1;
> 410 pfs.ondisk->sync_beg_tid = 1;
> 411 pfs.ondisk->sync_end_tid = 1;
> 412
> 413 if (ioctl(fd, HAMMERIOC_SET_PSEUDOFS, &pfs) < 0) {
> 414 fprintf(stderr, "Unable to update the PFS
> configuration: %s\n",
> 415 strerror(errno));
> 416 exit(1);
> 417 }
More information about the Users
mailing list