Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wendelin.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Joshua
wendelin.core
Commits
1a587945
Commit
1a587945
authored
Mar 28, 2019
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
efc51ca2
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
12 additions
and
22 deletions
+12
-22
wcfs/misc.go
wcfs/misc.go
+6
-4
wcfs/wcfs.go
wcfs/wcfs.go
+6
-18
No files found.
wcfs/misc.go
View file @
1a587945
...
@@ -86,6 +86,8 @@ func err2LogStatus(err error) fuse.Status {
...
@@ -86,6 +86,8 @@ func err2LogStatus(err error) fuse.Status {
return
fuse
.
EINTR
return
fuse
.
EINTR
}
}
// XXX io.ErrClosedPipe -> EPIPE?
// otherwise log as warnings EINVAL and as errors everything else
// otherwise log as warnings EINVAL and as errors everything else
switch
e
.
(
type
)
{
switch
e
.
(
type
)
{
case
*
eInvalError
:
case
*
eInvalError
:
...
@@ -297,9 +299,6 @@ type skFile struct {
...
@@ -297,9 +299,6 @@ type skFile struct {
//
//
// After file socket is created, File return should be given to kernel for the
// After file socket is created, File return should be given to kernel for the
// socket to be connected to an opened file.
// socket to be connected to an opened file.
//
// Note: the node opening which gives FileSock, should not be "regular" - else
// read/write will be serialized by kernel (git.kernel.org/linus/9c225f2655)
func
NewFileSock
()
*
FileSock
{
func
NewFileSock
()
*
FileSock
{
sk
:=
&
FileSock
{}
sk
:=
&
FileSock
{}
f
:=
&
skFile
{
f
:=
&
skFile
{
...
@@ -324,7 +323,10 @@ func NewFileSock() *FileSock {
...
@@ -324,7 +323,10 @@ func NewFileSock() *FileSock {
// to be connected to the socket.
// to be connected to the socket.
func
(
sk
*
FileSock
)
File
()
nodefs
.
File
{
func
(
sk
*
FileSock
)
File
()
nodefs
.
File
{
// nonseekable & directio for opened file to have streaming semantic as
// nonseekable & directio for opened file to have streaming semantic as
// if it was a socket.
// if it was a socket. FOPEN_STREAM is used so that both read and write
// could be run simultaneously:
//
// https://marc.info/?l=linux-fsdevel&m=155364064907309&w=2
return
&
nodefs
.
WithFlags
{
return
&
nodefs
.
WithFlags
{
File
:
sk
.
file
,
File
:
sk
.
file
,
FuseFlags
:
fuse
.
FOPEN_STREAM
|
fuse
.
FOPEN_NONSEEKABLE
|
fuse
.
FOPEN_DIRECT_IO
,
FuseFlags
:
fuse
.
FOPEN_STREAM
|
fuse
.
FOPEN_NONSEEKABLE
|
fuse
.
FOPEN_DIRECT_IO
,
...
...
wcfs/wcfs.go
View file @
1a587945
...
@@ -1248,19 +1248,6 @@ retry:
...
@@ -1248,19 +1248,6 @@ retry:
// ---- Watch server ----
// ---- Watch server ----
func
(
watch
*
Watch
)
GetAttr
(
out
*
fuse
.
Attr
,
f
nodefs
.
File
,
fctx
*
fuse
.
Context
)
fuse
.
Status
{
st
:=
watch
.
fsNode
.
GetAttr
(
out
,
f
,
fctx
)
// represent ourself as XXX (FileSock requirement)
// XXX S_IFSOCK does not work (LOOKUP returns inode, open gives: "No such device or address")
// XXX S_IFIFO does not work (the kernel shows the file, but it being
// FIFO makes the data go through kernel pipe, not via FUSE filesystem)
// XXX S_IFLNK - the kernel wants to follow the link
// XXX S_IFDIR - os.open complains "is a directory" (maybe could workaround)
// XXX S_IFCHR - fusermount always adds nodev mount option -> the device cannot be accessed
//out.Mode = syscall.S_IFSOCK | 0644
return
st
}
// Open serves /head/watch opens.
// Open serves /head/watch opens.
func
(
watch
*
Watch
)
Open
(
flags
uint32
,
fctx
*
fuse
.
Context
)
(
nodefs
.
File
,
fuse
.
Status
)
{
func
(
watch
*
Watch
)
Open
(
flags
uint32
,
fctx
*
fuse
.
Context
)
(
nodefs
.
File
,
fuse
.
Status
)
{
// XXX check flags?
// XXX check flags?
...
@@ -1280,7 +1267,7 @@ func (watch *Watch) Open(flags uint32, fctx *fuse.Context) (nodefs.File, fuse.St
...
@@ -1280,7 +1267,7 @@ func (watch *Watch) Open(flags uint32, fctx *fuse.Context) (nodefs.File, fuse.St
}
}
// serve serves client originated watch requests.
// serve serves client originated watch requests.
// XXX serves rx?
// XXX serves rx?
(-> and routes client replies ...)
func
(
w
*
Watcher
)
serve
()
{
func
(
w
*
Watcher
)
serve
()
{
err
:=
w
.
_serve
()
err
:=
w
.
_serve
()
_
=
err
_
=
err
...
@@ -1294,17 +1281,19 @@ func (w *Watcher) _serve() (err error) {
...
@@ -1294,17 +1281,19 @@ func (w *Watcher) _serve() (err error) {
defer
xerr
.
Contextf
(
&
err
,
"watcher %d: serve"
,
w
.
id
)
defer
xerr
.
Contextf
(
&
err
,
"watcher %d: serve"
,
w
.
id
)
r
:=
bufio
.
NewReader
(
w
.
sk
)
r
:=
bufio
.
NewReader
(
w
.
sk
)
// XXX write to peer if it was logical error on client side
// XXX on which stream? -1?
for
{
for
{
l
,
err
:=
r
.
ReadString
(
'\n'
)
// XXX limit accepted line len not to DOS
l
,
err
:=
r
.
ReadString
(
'\n'
)
// XXX limit accepted line len not to DOS
if
err
!=
nil
{
if
err
!=
nil
{
return
err
// XXX err ctx?
return
err
}
}
fmt
.
Printf
(
"S: watch: rx: %q
\n
"
,
l
)
fmt
.
Printf
(
"S: watch: rx: %q
\n
"
,
l
)
stream
,
msg
,
err
:=
parseWatchFrame
(
l
)
stream
,
msg
,
err
:=
parseWatchFrame
(
l
)
if
err
!=
nil
{
if
err
!=
nil
{
// XXX write to peer too? (on which stream? -1?)
return
fmt
.
Errorf
(
"rx: %s"
,
err
)
return
fmt
.
Errorf
(
"rx: %s"
,
err
)
}
}
...
@@ -1317,7 +1306,7 @@ func (w *Watcher) _serve() (err error) {
...
@@ -1317,7 +1306,7 @@ func (w *Watcher) _serve() (err error) {
w
.
rxMu
.
Unlock
()
w
.
rxMu
.
Unlock
()
if
rxq
==
nil
{
if
rxq
==
nil
{
return
fmt
.
Errorf
(
"rx %d: reply on unexpected stream
d
"
,
stream
)
return
fmt
.
Errorf
(
"rx %d: reply on unexpected stream"
,
stream
)
}
}
rxq
<-
msg
rxq
<-
msg
continue
continue
...
@@ -1326,7 +1315,6 @@ func (w *Watcher) _serve() (err error) {
...
@@ -1326,7 +1315,6 @@ func (w *Watcher) _serve() (err error) {
// client-initiated request
// client-initiated request
oid
,
at
,
err
:=
parseWatch
(
msg
)
oid
,
at
,
err
:=
parseWatch
(
msg
)
if
err
!=
nil
{
if
err
!=
nil
{
// XXX write to peer too
return
fmt
.
Errorf
(
"rx %d: %s"
,
stream
,
err
)
return
fmt
.
Errorf
(
"rx %d: %s"
,
stream
,
err
)
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment