{"action":"created","issue":{"url":"https://api.github.com/repos/hanwen/go-fuse/issues/103","repository_url":"https://api.github.com/repos/hanwen/go-fuse","labels_url":"https://api.github.com/repos/hanwen/go-fuse/issues/103/labels{/name}","comments_url":"https://api.github.com/repos/hanwen/go-fuse/issues/103/comments","events_url":"https://api.github.com/repos/hanwen/go-fuse/issues/103/events","html_url":"https://github.com/hanwen/go-fuse/pull/103","id":141720002,"number":103,"title":"Correctness fixes for passing xfstests generic/013 (fsstress)","user":{"login":"rfjakob","id":286847,"avatar_url":"https://avatars.githubusercontent.com/u/286847?v=3","gravatar_id":"","url":"https://api.github.com/users/rfjakob","html_url":"https://github.com/rfjakob","followers_url":"https://api.github.com/users/rfjakob/followers","following_url":"https://api.github.com/users/rfjakob/following{/other_user}","gists_url":"https://api.github.com/users/rfjakob/gists{/gist_id}","starred_url":"https://api.github.com/users/rfjakob/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rfjakob/subscriptions","organizations_url":"https://api.github.com/users/rfjakob/orgs","repos_url":"https://api.github.com/users/rfjakob/repos","events_url":"https://api.github.com/users/rfjakob/events{/privacy}","received_events_url":"https://api.github.com/users/rfjakob/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2016-03-17T22:11:25Z","updated_at":"2016-03-19T13:22:28Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/hanwen/go-fuse/pulls/103","html_url":"https://github.com/hanwen/go-fuse/pull/103","diff_url":"https://github.com/hanwen/go-fuse/pull/103.diff","patch_url":"https://github.com/hanwen/go-fuse/pull/103.patch"},"body":"As promised, this is the patch series to fix the xfstests generic/013 failure (issue #99).\r\n\r\nIt strengthens the consistency checking in the clientInodes code and fixes several issues and race conditions in pathfs and nodefs.\r\n\r\nThe code now passes thousands of fsstress iterations, where it would fail after tens of iterations before."},"comment":{"url":"https://api.github.com/repos/hanwen/go-fuse/issues/comments/198702929","html_url":"https://github.com/hanwen/go-fuse/pull/103#issuecomment-198702929","issue_url":"https://api.github.com/repos/hanwen/go-fuse/issues/103","id":198702929,"user":{"login":"hanwen","id":31547,"avatar_url":"https://avatars.githubusercontent.com/u/31547?v=3","gravatar_id":"","url":"https://api.github.com/users/hanwen","html_url":"https://github.com/hanwen","followers_url":"https://api.github.com/users/hanwen/followers","following_url":"https://api.github.com/users/hanwen/following{/other_user}","gists_url":"https://api.github.com/users/hanwen/gists{/gist_id}","starred_url":"https://api.github.com/users/hanwen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hanwen/subscriptions","organizations_url":"https://api.github.com/users/hanwen/orgs","repos_url":"https://api.github.com/users/hanwen/repos","events_url":"https://api.github.com/users/hanwen/events{/privacy}","received_events_url":"https://api.github.com/users/hanwen/received_events","type":"User","site_admin":false},"created_at":"2016-03-19T13:22:28Z","updated_at":"2016-03-19T13:22:28Z","body":"Wow! Please give me a couple of days to digest to this.\n\nOp do 17 mrt. 2016 23:11 schreef rfjakob <notifications@github.com>:\n\n> As promised, this is the patch series to fix the xfstests generic/013\n> failure (issue #99 <https://github.com/hanwen/go-fuse/issues/99>).\n>\n> It strengthens the consistency checking in the clientInodes code and fixes\n> several issues and race conditions in pathfs and nodefs.\n>\n> The code now passes thousands of fsstress iterations, where it would fail\n> after tens of iterations before.\n> ------------------------------\n> You can view, comment on, or merge this pull request online at:\n>\n>   https://github.com/hanwen/go-fuse/pull/103\n> Commit Summary\n>\n>    - loopback example: add \"-l\" flag for enabling hard links\n>    - nodefs: introduce parent map\n>    - pathfs: register hard link as a child, too\n>    - Improve pretty-printing for LOOKUP, BATCH_FORGET and LINK\n>    - pathfs: set clientInode on CREATE\n>    - nodefs: on forget, the node must be dropped from its parents as well\n>    - pathfs: skip clientInodeMap warning if the node is a directory\n>    - pathfs: createChild must also update n.Inode()\n>    - pathfs: factor out hard link tracking into its own file\n>    - unionfs: Use magic \"InoIgnore\" inode number for ignore\n>    - unionfs: Use actual GetAttr on Create\n>    - pathfs: track the inode number for symlinks and device files\n>    - pathfs: introduce getIno helper\n>    - unionfs: fix hard link tracking on open and rename\n>    - unionfs: explicit inode number update after link\n>    - unionfs: ignore magic \".drop_cache\" file in hard link tracking\n>    - unionfs: fix TestUnionFSBarf test case\n>    - pathfs: improve clientinodes logging\n>    - unionfs: do not return InoIgnore as inode number\n>    - pathfs: clientinodes: replace get() by getNode()\n>    - loopback: disable TestLinkForget, it triggers a consistency panic\n>    - pathfs: clientinodes: only write to entries slice if neccessary\n>    - pathfs: clientinodes: strict verification on drop\n>    - nodefs: delete recursiveConsiderDropInode function\n>    - nodefs: document handleMap interface\n>    - nodefs: fix duplicate parent entry on create\n>    - nodefs: call OnForget only once for a node\n>    - nodefs: rename lookupUpdate to registerNode\n>    - nodefs: add forgetLock\n>    - pathfs: clientinodes: do not drop the inode entry before FORGET\n>    - loopback example: log microsecond timestamps\n>    - nodefs: rmChildByRef may remove more than one entry\n>    - pathfs: clientinodes: code style: embed sync.Mutex\n>    - pathfs: protect Rename with pathLock\n>    - pathfs: clientinodes: add duplicate parent check\n>    - nodefs: do not forget a directory that still has children\n>    - fuse: add forgetMu mutex to prevent concurrent LOOKUP and FORGET\n>    - pathfs: remove left-over debug output\n>    - run go fmt\n>    - pathfs: clientinodes: downgrade consistency check panics to warnings\n>\n> File Changes\n>\n>    - *M* example/loopback/main.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-0> (9)\n>    - *M* fuse/nodefs/fsconnector.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-1> (64)\n>    - *M* fuse/nodefs/fsops.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-2> (8)\n>    - *M* fuse/nodefs/handle.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-3> (22)\n>    - *M* fuse/nodefs/inode.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-4> (54)\n>    - *M* fuse/opcode.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-5> (17)\n>    - *A* fuse/pathfs/clientinodes.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-6> (216)\n>    - *M* fuse/pathfs/pathfs.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-7> (181)\n>    - *M* fuse/print.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-8> (17)\n>    - *M* fuse/server.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-9> (15)\n>    - *M* fuse/test/loopback_test.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-10> (4)\n>    - *M* unionfs/unionfs.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-11> (33)\n>    - *M* unionfs/unionfs_test.go\n>    <https://github.com/hanwen/go-fuse/pull/103/files#diff-12> (15)\n>\n> Patch Links:\n>\n>    - https://github.com/hanwen/go-fuse/pull/103.patch\n>    - https://github.com/hanwen/go-fuse/pull/103.diff\n>\n> —\n> You are receiving this because you are subscribed to this thread.\n> Reply to this email directly or view it on GitHub\n> <https://github.com/hanwen/go-fuse/pull/103>\n>\n"}}