I've noticed that some time after I create (or update) a file on a davfs2 volume, the Access/Modify/Change timestamps as reported by 'stat' are changed. Here's an example:
it is not intended and I don't get this behaviour when the server is Apache/mod_dav or IIS. But note: when unmounting and mounting again, atime and mtime might chance; this is because davfs2 uses unmounting to resynchronize times with the server, which cannot always be done while running without disturbing some applications.
Looking at your debug-log: it is hard to tell, what the client (davfs2) should do, considering the garbage returned by the server. Please look at the Last-Modified-Dates as well as the reurn-code of the PUT-request.
GET /test.txt HTTP/1.1
Host: obrien.net.nz:2078
User-Agent: davfs2/1.3.1 neon/0.26.3
HTTP/1.1 200 OK^M
Date: Mon, 19 May 2008 22:03:34 GMT
Server: Cpanel::Httpd like Apache
Content-Length: 0
Last-Modified: Mon, 19 May 2008 21:59:07 GMT
HEAD /test.txt HTTP/1.1
Host: obrien.net.nz:2078
User-Agent: davfs2/1.3.1 neon/0.26.3
HTTP/1.1 200 OK
Date: Mon, 19 May 2008 22:03:45 GMT
Server: Cpanel::Httpd like Apache
Content-Length: 0
Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT
PUT /test.txt HTTP/1.1
Host: obrien.net.nz:2078
User-Agent: davfs2/1.3.1 neon/0.26.3
HTTP/1.1 201 CREATED
Date: Mon, 19 May 2008 22:03:45 GMT
Server: Cpanel::Httpd like Apache
Content-Length: 0
HEAD /test.txt HTTP/1.1
Host: obrien.net.nz:2078
User-Agent: davfs2/1.3.1 neon/0.26.3
HTTP/1.1 200 OK
Date: Mon, 19 May 2008 22:03:45 GMT
Server: Cpanel::Httpd like Apache
Content-Length: 0
Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT
HTTP/1.1 207 Multi-Status
Date: Mon, 19 May 2008 22:04:08 GMT
Server: Cpanel::Httpd like Apache
201 Created means: a *new* resource has been created. But this one was already there. The Last-Modified-Dates are a confusing mess. Looks like the server is mixing up "empty files" and "locked null resources", though you are not even using locks. Maybe the server will behave better, when you use a real file (not an empty one).
Cheers
Werner
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
As the server's implemenation of HEAD is buggy, you may want to set option "precheck 0" to avoid HEAD-requests. You might additionally try "if_match_bug 0", to help avoiding lost-update-problems.
And you should send a Bugreport to the server-maintainer. There seems to be an incresing number of WebDAV-servers that don't even get HEAD right.
Cheers
Werner
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Werner,
I've noticed that some time after I create (or update) a file on a davfs2 volume, the Access/Modify/Change timestamps as reported by 'stat' are changed. Here's an example:
ubuntu@ubuntu:davfs$ touch test.txt; while true; do stat test.txt; date; sleep 1; done
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 16h/22d Inode: 134933776 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2008-05-19 18:03:36.000000000 -0400
Modify: 2008-05-19 18:03:36.000000000 -0400
Change: 2008-05-19 18:03:36.000000000 -0400
Mon May 19 18:03:36 EDT 2008
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 16h/22d Inode: 134933776 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2008-05-19 18:03:36.000000000 -0400
Modify: 2008-05-19 18:03:36.000000000 -0400
Change: 2008-05-19 18:03:36.000000000 -0400
Mon May 19 18:03:37 EDT 2008
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 16h/22d Inode: 134933776 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2008-05-19 18:03:36.000000000 -0400
Modify: 2008-05-19 18:03:36.000000000 -0400
Change: 2008-05-19 18:03:36.000000000 -0400
Mon May 19 18:03:38 EDT 2008
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 16h/22d Inode: 134933776 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2008-05-19 18:03:36.000000000 -0400
Modify: 2008-05-19 18:03:36.000000000 -0400
Change: 2008-05-19 18:03:36.000000000 -0400
Mon May 19 18:03:39 EDT 2008
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 16h/22d Inode: 134933776 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2008-05-19 18:03:36.000000000 -0400
Modify: 2008-05-19 18:03:36.000000000 -0400
Change: 2008-05-19 18:03:36.000000000 -0400
Mon May 19 18:03:40 EDT 2008
(snip)
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 16h/22d Inode: 134933776 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2008-05-19 18:03:36.000000000 -0400
Modify: 2008-05-19 18:03:36.000000000 -0400
Change: 2008-05-19 18:03:36.000000000 -0400
Mon May 19 18:04:08 EDT 2008
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 16h/22d Inode: 134933776 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2008-05-19 18:03:36.000000000 -0400
Modify: 2008-05-19 18:03:36.000000000 -0400
Change: 2008-05-19 18:03:36.000000000 -0400
Mon May 19 18:04:09 EDT 2008
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 16h/22d Inode: 134933776 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2008-05-19 18:03:45.000000000 -0400
Modify: 2008-05-19 18:03:45.000000000 -0400
Change: 2008-05-19 18:03:45.000000000 -0400
Mon May 19 18:04:10 EDT 2008
A couple of questions:
1) Is this expected behavior?
2) Can it be prevented?
The relevant portion of /var/log/syslog and a copy of davfs2.conf are pasted below. davfs2 version 1.3.1.
Thanks,
Chris
May 19 18:03:36 ubuntu mount.davfs: SELECT: 1
May 19 18:03:36 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:36 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:36 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:36 ubuntu mount.davfs: RET: Success
May 19 18:03:36 ubuntu mount.davfs: SELECT: 1
May 19 18:03:36 ubuntu mount.davfs: FUSE_OPEN:
May 19 18:03:36 ubuntu mount.davfs: n 0x80aed10, f 0104001
May 19 18:03:36 ubuntu mount.davfs: pid 8869, mode 00
May 19 18:03:36 ubuntu mount.davfs: open /test.txt
May 19 18:03:36 ubuntu mount.davfs: Running pre_send hooks
May 19 18:03:36 ubuntu mount.davfs: Sending request headers: GET /test.txt HTTP/1.1^M Host: obrien.net.nz:2078^M User-Agent: davfs2/1.3.1 neon/0.26.3^M Connection: TE^M TE: trailers^M Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx^M ^M
May 19 18:03:36 ubuntu mount.davfs: Sending request-line and headers:
May 19 18:03:36 ubuntu mount.davfs: Request sent; retry is 1.
May 19 18:03:36 ubuntu mount.davfs: [status-line] < HTTP/1.1 200 OK^M
May 19 18:03:36 ubuntu mount.davfs: [hdr] Date: Mon, 19 May 2008 22:03:34 GMT^M
May 19 18:03:36 ubuntu mount.davfs: Header Name: [date], Value: [Mon, 19 May 2008 22:03:34 GMT]
May 19 18:03:36 ubuntu mount.davfs: [hdr] Server: Cpanel::Httpd like Apache^M
May 19 18:03:36 ubuntu mount.davfs: Header Name: [server], Value: [Cpanel::Httpd like Apache]
May 19 18:03:36 ubuntu mount.davfs: [hdr] Content-Length: 0^M
May 19 18:03:36 ubuntu mount.davfs: Header Name: [content-length], Value: [0]
May 19 18:03:36 ubuntu mount.davfs: [hdr] Connection: Keep-Alive^M
May 19 18:03:36 ubuntu mount.davfs: Header Name: [connection], Value: [Keep-Alive]
May 19 18:03:36 ubuntu mount.davfs: [hdr] Keep-Alive: timeout=15, max=100^M
May 19 18:03:36 ubuntu mount.davfs: Header Name: [keep-alive], Value: [timeout=15, max=100]
May 19 18:03:36 ubuntu mount.davfs: [hdr] Last-Modified: Mon, 19 May 2008 21:59:07 GMT^M
May 19 18:03:36 ubuntu mount.davfs: Header Name: [last-modified], Value: [Mon, 19 May 2008 21:59:07 GMT]
May 19 18:03:36 ubuntu mount.davfs: [hdr] ^M
May 19 18:03:36 ubuntu mount.davfs: End of headers.
May 19 18:03:36 ubuntu mount.davfs: Running post_send hooks
May 19 18:03:36 ubuntu mount.davfs: Request ends, status 200 class 2xx, error line: 200 OK
May 19 18:03:36 ubuntu mount.davfs: Running destroy hooks.
May 19 18:03:36 ubuntu mount.davfs: Request ends.
May 19 18:03:36 ubuntu mount.davfs: fd 6
May 19 18:03:36 ubuntu mount.davfs: RET: Success
May 19 18:03:36 ubuntu mount.davfs: SELECT: 1
May 19 18:03:36 ubuntu mount.davfs: FUSE_SETATTR:
May 19 18:03:36 ubuntu mount.davfs: n 0x80aed10, m 00
May 19 18:03:36 ubuntu mount.davfs: uid 0, gid 0
May 19 18:03:36 ubuntu mount.davfs: sz 0, at 1211234616,
May 19 18:03:36 ubuntu mount.davfs: mt 1211234616
May 19 18:03:36 ubuntu mount.davfs: setattr /test.txt
May 19 18:03:36 ubuntu mount.davfs: set times
May 19 18:03:36 ubuntu mount.davfs: RET: Success
May 19 18:03:36 ubuntu mount.davfs: SELECT: 1
May 19 18:03:36 ubuntu mount.davfs: FUSE_FLUSH: ignored
May 19 18:03:36 ubuntu mount.davfs: RET: Success
May 19 18:03:36 ubuntu mount.davfs: SELECT: 1
May 19 18:03:36 ubuntu mount.davfs: FUSE_RELEASE:
May 19 18:03:36 ubuntu mount.davfs: n 0x80aed10, f 0104001
May 19 18:03:36 ubuntu mount.davfs: pid 0, fd 6
May 19 18:03:36 ubuntu mount.davfs: close /test.txt
May 19 18:03:36 ubuntu mount.davfs: RET: Success
May 19 18:03:36 ubuntu mount.davfs: tidy: 1 of 25 nodes changed
May 19 18:03:37 ubuntu mount.davfs: SELECT: 1
May 19 18:03:37 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:37 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:37 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:37 ubuntu mount.davfs: RET: Success
May 19 18:03:38 ubuntu mount.davfs: SELECT: 1
May 19 18:03:38 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:38 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:38 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:38 ubuntu mount.davfs: RET: Success
May 19 18:03:39 ubuntu mount.davfs: SELECT: 1
May 19 18:03:39 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:39 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:39 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:39 ubuntu mount.davfs: RET: Success
May 19 18:03:40 ubuntu mount.davfs: SELECT: 1
May 19 18:03:40 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:40 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:40 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:40 ubuntu mount.davfs: RET: Success
May 19 18:03:41 ubuntu mount.davfs: SELECT: 1
May 19 18:03:41 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:41 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:41 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:41 ubuntu mount.davfs: RET: Success
May 19 18:03:42 ubuntu mount.davfs: SELECT: 1
May 19 18:03:42 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:42 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:42 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:42 ubuntu mount.davfs: RET: Success
May 19 18:03:43 ubuntu mount.davfs: SELECT: 1
May 19 18:03:43 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:43 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:43 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:43 ubuntu mount.davfs: RET: Success
May 19 18:03:44 ubuntu mount.davfs: SELECT: 1
May 19 18:03:44 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:44 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:44 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:44 ubuntu mount.davfs: RET: Success
May 19 18:03:45 ubuntu mount.davfs: SELECT: 1
May 19 18:03:45 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:45 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:45 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:45 ubuntu mount.davfs: RET: Success
May 19 18:03:46 ubuntu mount.davfs: SELECT: 1
May 19 18:03:46 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:46 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:46 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:46 ubuntu mount.davfs: RET: Success
May 19 18:03:46 ubuntu mount.davfs: tidy: 1 of 25 nodes changed
May 19 18:03:46 ubuntu mount.davfs: Running pre_send hooks
May 19 18:03:46 ubuntu mount.davfs: Sending request headers: HEAD /test.txt HTTP/1.1^M Host: obrien.net.nz:2078^M User-Agent: davfs2/1.3.1 neon/0.26.3^M Connection: TE^M TE: trailers^M Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx^M ^M
May 19 18:03:46 ubuntu mount.davfs: Sending request-line and headers:
May 19 18:03:46 ubuntu mount.davfs: Request sent; retry is 1.
May 19 18:03:46 ubuntu mount.davfs: [status-line] < HTTP/1.1 200 OK^M
May 19 18:03:46 ubuntu mount.davfs: [hdr] Date: Mon, 19 May 2008 22:03:45 GMT^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [date], Value: [Mon, 19 May 2008 22:03:45 GMT]
May 19 18:03:46 ubuntu mount.davfs: [hdr] Server: Cpanel::Httpd like Apache^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [server], Value: [Cpanel::Httpd like Apache]
May 19 18:03:46 ubuntu mount.davfs: [hdr] Content-Length: 0^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [content-length], Value: [0]
May 19 18:03:46 ubuntu mount.davfs: [hdr] Connection: Keep-Alive^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [connection], Value: [Keep-Alive]
May 19 18:03:46 ubuntu mount.davfs: [hdr] Keep-Alive: timeout=15, max=100^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [keep-alive], Value: [timeout=15, max=100]
May 19 18:03:46 ubuntu mount.davfs: [hdr] Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [last-modified], Value: [Thu, 01 Jan 1970 00:00:00 GMT]
May 19 18:03:46 ubuntu mount.davfs: [hdr] ^M
May 19 18:03:46 ubuntu mount.davfs: End of headers.
May 19 18:03:46 ubuntu mount.davfs: Running post_send hooks
May 19 18:03:46 ubuntu mount.davfs: Request ends, status 200 class 2xx, error line: 200 OK
May 19 18:03:46 ubuntu mount.davfs: Running destroy hooks.
May 19 18:03:46 ubuntu mount.davfs: Request ends.
May 19 18:03:46 ubuntu mount.davfs: Running pre_send hooks
May 19 18:03:46 ubuntu mount.davfs: Sending request headers: PUT /test.txt HTTP/1.1^M Host: obrien.net.nz:2078^M User-Agent: davfs2/1.3.1 neon/0.26.3^M Connection: TE^M TE: trailers^M Content-Length: 0^M Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx^M ^M
May 19 18:03:46 ubuntu mount.davfs: Sending request-line and headers:
May 19 18:03:46 ubuntu mount.davfs: Request sent; retry is 1.
May 19 18:03:46 ubuntu mount.davfs: [status-line] < HTTP/1.1 201 CREATED^M
May 19 18:03:46 ubuntu mount.davfs: [hdr] Date: Mon, 19 May 2008 22:03:45 GMT^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [date], Value: [Mon, 19 May 2008 22:03:45 GMT]
May 19 18:03:46 ubuntu mount.davfs: [hdr] Server: Cpanel::Httpd like Apache^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [server], Value: [Cpanel::Httpd like Apache]
May 19 18:03:46 ubuntu mount.davfs: [hdr] Content-Length: 0^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [content-length], Value: [0]
May 19 18:03:46 ubuntu mount.davfs: [hdr] Connection: Keep-Alive^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [connection], Value: [Keep-Alive]
May 19 18:03:46 ubuntu mount.davfs: [hdr] Keep-Alive: timeout=15, max=100^M
May 19 18:03:46 ubuntu mount.davfs: Header Name: [keep-alive], Value: [timeout=15, max=100]
May 19 18:03:46 ubuntu mount.davfs: [hdr] ^M
May 19 18:03:46 ubuntu mount.davfs: End of headers.
May 19 18:03:46 ubuntu mount.davfs: Running post_send hooks
May 19 18:03:46 ubuntu mount.davfs: Request ends, status 201 class 2xx, error line: 201 CREATED
May 19 18:03:46 ubuntu mount.davfs: Running destroy hooks.
May 19 18:03:46 ubuntu mount.davfs: Request ends.
May 19 18:03:46 ubuntu mount.davfs: Running pre_send hooks
May 19 18:03:46 ubuntu mount.davfs: Sending request headers: HEAD /test.txt HTTP/1.1^M Host: obrien.net.nz:2078^M User-Agent: davfs2/1.3.1 neon/0.26.3^M Connection: TE^M TE: trailers^M Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx^M ^M
May 19 18:03:46 ubuntu mount.davfs: Sending request-line and headers:
May 19 18:03:46 ubuntu mount.davfs: Request sent; retry is 1.
May 19 18:03:47 ubuntu mount.davfs: [status-line] < HTTP/1.1 200 OK^M
May 19 18:03:47 ubuntu mount.davfs: [hdr] Date: Mon, 19 May 2008 22:03:45 GMT^M
May 19 18:03:47 ubuntu mount.davfs: Header Name: [date], Value: [Mon, 19 May 2008 22:03:45 GMT]
May 19 18:03:47 ubuntu mount.davfs: [hdr] Server: Cpanel::Httpd like Apache^M
May 19 18:03:47 ubuntu mount.davfs: Header Name: [server], Value: [Cpanel::Httpd like Apache]
May 19 18:03:47 ubuntu mount.davfs: [hdr] Content-Length: 0^M
May 19 18:03:47 ubuntu mount.davfs: Header Name: [content-length], Value: [0]
May 19 18:03:47 ubuntu mount.davfs: [hdr] Connection: Keep-Alive^M
May 19 18:03:47 ubuntu mount.davfs: Header Name: [connection], Value: [Keep-Alive]
May 19 18:03:47 ubuntu mount.davfs: [hdr] Keep-Alive: timeout=15, max=100^M
May 19 18:03:47 ubuntu mount.davfs: Header Name: [keep-alive], Value: [timeout=15, max=100]
May 19 18:03:47 ubuntu mount.davfs: [hdr] Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT^M
May 19 18:03:47 ubuntu mount.davfs: Header Name: [last-modified], Value: [Thu, 01 Jan 1970 00:00:00 GMT]
May 19 18:03:47 ubuntu mount.davfs: [hdr] ^M
May 19 18:03:47 ubuntu mount.davfs: End of headers.
May 19 18:03:47 ubuntu mount.davfs: Running post_send hooks
May 19 18:03:47 ubuntu mount.davfs: Request ends, status 200 class 2xx, error line: 200 OK
May 19 18:03:47 ubuntu mount.davfs: Running destroy hooks.
May 19 18:03:47 ubuntu mount.davfs: Request ends.
May 19 18:03:47 ubuntu mount.davfs: tidy: /test.txt
May 19 18:03:47 ubuntu mount.davfs: SELECT: 1
May 19 18:03:47 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:47 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:47 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:47 ubuntu mount.davfs: RET: Success
May 19 18:03:48 ubuntu mount.davfs: SELECT: 1
May 19 18:03:48 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:48 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:48 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:48 ubuntu mount.davfs: RET: Success
May 19 18:03:49 ubuntu mount.davfs: SELECT: 1
May 19 18:03:49 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:49 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:49 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:49 ubuntu mount.davfs: RET: Success
May 19 18:03:50 ubuntu mount.davfs: SELECT: 1
May 19 18:03:50 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:50 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:50 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:50 ubuntu mount.davfs: RET: Success
May 19 18:03:51 ubuntu mount.davfs: SELECT: 1
May 19 18:03:51 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:51 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:51 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:51 ubuntu mount.davfs: RET: Success
May 19 18:03:52 ubuntu mount.davfs: SELECT: 1
May 19 18:03:52 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:52 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:52 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:52 ubuntu mount.davfs: RET: Success
May 19 18:03:53 ubuntu mount.davfs: SELECT: 1
May 19 18:03:53 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:53 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:53 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:53 ubuntu mount.davfs: RET: Success
May 19 18:03:54 ubuntu mount.davfs: SELECT: 1
May 19 18:03:54 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:54 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:54 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:54 ubuntu mount.davfs: RET: Success
May 19 18:03:55 ubuntu mount.davfs: SELECT: 1
May 19 18:03:55 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:55 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:55 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:55 ubuntu mount.davfs: RET: Success
May 19 18:03:56 ubuntu mount.davfs: SELECT: 1
May 19 18:03:56 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:56 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:56 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:56 ubuntu mount.davfs: RET: Success
May 19 18:03:58 ubuntu mount.davfs: SELECT: 1
May 19 18:03:58 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:58 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:58 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:58 ubuntu mount.davfs: RET: Success
May 19 18:03:58 ubuntu mount.davfs: tidy: 0 of 25 nodes changed
May 19 18:03:59 ubuntu mount.davfs: SELECT: 1
May 19 18:03:59 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:03:59 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:03:59 ubuntu mount.davfs: lookup /test.txt
May 19 18:03:59 ubuntu mount.davfs: RET: Success
May 19 18:04:00 ubuntu mount.davfs: SELECT: 1
May 19 18:04:00 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:00 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:00 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:00 ubuntu mount.davfs: RET: Success
May 19 18:04:01 ubuntu mount.davfs: SELECT: 1
May 19 18:04:01 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:01 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:01 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:01 ubuntu mount.davfs: RET: Success
May 19 18:04:02 ubuntu mount.davfs: SELECT: 1
May 19 18:04:02 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:02 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:02 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:02 ubuntu mount.davfs: RET: Success
May 19 18:04:03 ubuntu mount.davfs: SELECT: 1
May 19 18:04:03 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:03 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:03 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:03 ubuntu mount.davfs: RET: Success
May 19 18:04:04 ubuntu mount.davfs: SELECT: 1
May 19 18:04:04 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:04 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:04 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:04 ubuntu mount.davfs: RET: Success
May 19 18:04:05 ubuntu mount.davfs: SELECT: 1
May 19 18:04:05 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:05 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:05 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:05 ubuntu mount.davfs: RET: Success
May 19 18:04:06 ubuntu mount.davfs: SELECT: 1
May 19 18:04:06 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:06 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:06 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:06 ubuntu mount.davfs: RET: Success
May 19 18:04:07 ubuntu mount.davfs: SELECT: 1
May 19 18:04:07 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:07 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:07 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:07 ubuntu mount.davfs: RET: Success
May 19 18:04:08 ubuntu mount.davfs: SELECT: 1
May 19 18:04:08 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:08 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:08 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:08 ubuntu mount.davfs: RET: Success
May 19 18:04:08 ubuntu mount.davfs: tidy: 0 of 25 nodes changed
May 19 18:04:09 ubuntu mount.davfs: SELECT: 1
May 19 18:04:09 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:09 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:09 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:09 ubuntu mount.davfs: RET: Success
May 19 18:04:10 ubuntu mount.davfs: SELECT: 1
May 19 18:04:10 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:10 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:10 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:10 ubuntu mount.davfs: Running pre_send hooks
May 19 18:04:10 ubuntu mount.davfs: Sending request headers: PROPFIND / HTTP/1.1^M Host: obrien.net.nz:2078^M User-Agent: davfs2/1.3.1 neon/0.26.3^M Connection: TE^M TE: trailers^M Depth: 1^M Content-Length: 314^M Content-Type: application/xml^M Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx^M ^M
May 19 18:04:10 ubuntu mount.davfs: Sending request-line and headers:
May 19 18:04:10 ubuntu mount.davfs: Sending request body:
May 19 18:04:10 ubuntu mount.davfs: Request sent; retry is 1.
May 19 18:04:10 ubuntu mount.davfs: [status-line] < HTTP/1.1 207 Multi-Status^M
May 19 18:04:10 ubuntu mount.davfs: [hdr] Date: Mon, 19 May 2008 22:04:08 GMT^M
May 19 18:04:10 ubuntu mount.davfs: Header Name: [date], Value: [Mon, 19 May 2008 22:04:08 GMT]
May 19 18:04:10 ubuntu mount.davfs: [hdr] Server: Cpanel::Httpd like Apache^M
May 19 18:04:10 ubuntu mount.davfs: Header Name: [server], Value: [Cpanel::Httpd like Apache]
May 19 18:04:10 ubuntu mount.davfs: [hdr] Content-Length: 8758^M
May 19 18:04:10 ubuntu mount.davfs: Header Name: [content-length], Value: [8758]
May 19 18:04:10 ubuntu mount.davfs: [hdr] Connection: Keep-Alive^M
May 19 18:04:10 ubuntu mount.davfs: Header Name: [connection], Value: [Keep-Alive]
May 19 18:04:10 ubuntu mount.davfs: [hdr] Keep-Alive: timeout=15, max=100^M
May 19 18:04:10 ubuntu mount.davfs: Header Name: [keep-alive], Value: [timeout=15, max=100]
May 19 18:04:10 ubuntu mount.davfs: [hdr] Content-Type: text/xml; charset="utf-8"^M
May 19 18:04:10 ubuntu mount.davfs: Header Name: [content-type], Value: [text/xml; charset="utf-8"]
May 19 18:04:10 ubuntu mount.davfs: [hdr] ^M
May 19 18:04:10 ubuntu mount.davfs: End of headers.
May 19 18:04:10 ubuntu mount.davfs: Reading 8192 bytes of response body.
May 19 18:04:10 ubuntu mount.davfs: Got 8192 bytes.
May 19 18:04:10 ubuntu mount.davfs: Reading 566 bytes of response body.
May 19 18:04:10 ubuntu mount.davfs: Got 566 bytes.
May 19 18:04:10 ubuntu mount.davfs: Running post_send hooks
May 19 18:04:10 ubuntu mount.davfs: Request ends, status 207 class 2xx, error line: 207 Multi-Status
May 19 18:04:10 ubuntu mount.davfs: Running destroy hooks.
May 19 18:04:10 ubuntu mount.davfs: Request ends.
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x80aed10
May 19 18:04:10 ubuntu mount.davfs: /test.txt
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x80a8850
May 19 18:04:10 ubuntu mount.davfs: /02 - Glsli.mp3
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x80a8e78
May 19 18:04:10 ubuntu mount.davfs: /02 - Sweet Jane (LP Version).mp3
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x8091288
May 19 18:04:10 ubuntu mount.davfs: /10 - Brothers on a Hotel Bed (Album Version).mp3
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x80a7ab8
May 19 18:04:10 ubuntu mount.davfs: /bob/
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x8093d80
May 19 18:04:10 ubuntu mount.davfs: /test2.txt~
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x80925c0
May 19 18:04:10 ubuntu mount.davfs: /07 - Lazy Eye.mp3
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x80926c0
May 19 18:04:10 ubuntu mount.davfs: /04 - Ship Out On The Sea.mp3
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x8092498
May 19 18:04:10 ubuntu mount.davfs: /09 - In Spite Of All The Damage.mp3
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x8092430
May 19 18:04:10 ubuntu mount.davfs: /05 - Letter To Bowie Knife.mp3
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x8092310
May 19 18:04:10 ubuntu mount.davfs: /02 - Evil.mp3
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x8092180
May 19 18:04:10 ubuntu mount.davfs: /gtd.org.backup
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x8092060
May 19 18:04:10 ubuntu mount.davfs: /gtd.org~
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x80919d8
May 19 18:04:10 ubuntu mount.davfs: /projects/
May 19 18:04:10 ubuntu mount.davfs: updating node: 0x808c328->0x8091518
May 19 18:04:10 ubuntu mount.davfs: /gtd.org
May 19 18:04:10 ubuntu mount.davfs: directory updated: (nil)->0x808c328
May 19 18:04:10 ubuntu mount.davfs: /
May 19 18:04:10 ubuntu mount.davfs: RET: Success
May 19 18:04:11 ubuntu mount.davfs: SELECT: 1
May 19 18:04:11 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:11 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:11 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:11 ubuntu mount.davfs: RET: Success
May 19 18:04:12 ubuntu mount.davfs: SELECT: 1
May 19 18:04:12 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:12 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:12 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:12 ubuntu mount.davfs: RET: Success
May 19 18:04:13 ubuntu mount.davfs: SELECT: 1
May 19 18:04:13 ubuntu mount.davfs: FUSE_LOOKUP:
May 19 18:04:13 ubuntu mount.davfs: p 0x808c328, test.txt
May 19 18:04:13 ubuntu mount.davfs: lookup /test.txt
May 19 18:04:13 ubuntu mount.davfs: RET: Success
# davfs2 configuration file 2007-12-26
# version 7
# -------------------------------------
# Please read the davfs2.conf (5) man page for a description of the
# configuration options and syntax rules.
# Available options and default values
# ====================================
# General Options
# ---------------
# dav_user davfs2 # system wide config file only
# dav_group davfs2 # system wide config file only
# ignore_home # system wide config file only
# kernel_fs coda
# buf_size 16 # KiByte
# WebDAV Related Options
# ----------------------
# use_proxy 1 # system wide config file only
# proxy # system wide config file only
# servercert
# clientcert
# secrets ~/.davfs2/secrets # user config file only
# ask_auth 1
use_locks 0
# lock_owner <username>
# lock_timeout 1800 # seconds
# lock_refresh 60 # seconds
use_expect100 0
# if_match_bug 1
# drop_weak_etags 0
# allow_cookie 0
# precheck 1
# ignore_dav_header 0
# server_charset
# use_displayname 0 # Deprecated. Don't use it or send
# a bug report.
# read_timeout 30 # seconds
# retry 30 # seconds
# max_retry 300 # seconds
# add_header
# Cache Related Options
# ---------------------
# backup_dir lost+found
# cache_dir /var/cache/davfs2 # system wide cache
# ~/.davfs2/cache # per user cache
# cache_size 50 # MiByte
# table_size 1024
# dir_refresh 60 # seconds
# file_refresh 1 # second
# delay_upload 10
# gui_optimize 0
# Debugging Options
# -----------------
debug most # possible values: config, kernel, cache, http, xml,
# httpauth, locks, ssl, httpbody, secrets, most
Hello Chris,
it is not intended and I don't get this behaviour when the server is Apache/mod_dav or IIS. But note: when unmounting and mounting again, atime and mtime might chance; this is because davfs2 uses unmounting to resynchronize times with the server, which cannot always be done while running without disturbing some applications.
Looking at your debug-log: it is hard to tell, what the client (davfs2) should do, considering the garbage returned by the server. Please look at the Last-Modified-Dates as well as the reurn-code of the PUT-request.
GET /test.txt HTTP/1.1
Host: obrien.net.nz:2078
User-Agent: davfs2/1.3.1 neon/0.26.3
HTTP/1.1 200 OK^M
Date: Mon, 19 May 2008 22:03:34 GMT
Server: Cpanel::Httpd like Apache
Content-Length: 0
Last-Modified: Mon, 19 May 2008 21:59:07 GMT
HEAD /test.txt HTTP/1.1
Host: obrien.net.nz:2078
User-Agent: davfs2/1.3.1 neon/0.26.3
HTTP/1.1 200 OK
Date: Mon, 19 May 2008 22:03:45 GMT
Server: Cpanel::Httpd like Apache
Content-Length: 0
Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT
PUT /test.txt HTTP/1.1
Host: obrien.net.nz:2078
User-Agent: davfs2/1.3.1 neon/0.26.3
HTTP/1.1 201 CREATED
Date: Mon, 19 May 2008 22:03:45 GMT
Server: Cpanel::Httpd like Apache
Content-Length: 0
HEAD /test.txt HTTP/1.1
Host: obrien.net.nz:2078
User-Agent: davfs2/1.3.1 neon/0.26.3
HTTP/1.1 200 OK
Date: Mon, 19 May 2008 22:03:45 GMT
Server: Cpanel::Httpd like Apache
Content-Length: 0
Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT
PROPFIND / HTTP/1.1
Host: obrien.net.nz:2078
User-Agent: davfs2/1.3.1 neon/0.26.3
HTTP/1.1 207 Multi-Status
Date: Mon, 19 May 2008 22:04:08 GMT
Server: Cpanel::Httpd like Apache
201 Created means: a *new* resource has been created. But this one was already there. The Last-Modified-Dates are a confusing mess. Looks like the server is mixing up "empty files" and "locked null resources", though you are not even using locks. Maybe the server will behave better, when you use a real file (not an empty one).
Cheers
Werner
As the server's implemenation of HEAD is buggy, you may want to set option "precheck 0" to avoid HEAD-requests. You might additionally try "if_match_bug 0", to help avoiding lost-update-problems.
And you should send a Bugreport to the server-maintainer. There seems to be an incresing number of WebDAV-servers that don't even get HEAD right.
Cheers
Werner