summaryrefslogtreecommitdiff
path: root/hurd/translator/tmpfs
diff options
context:
space:
mode:
Diffstat (limited to 'hurd/translator/tmpfs')
-rw-r--r--hurd/translator/tmpfs/notes_bing.mdwn144
1 files changed, 75 insertions, 69 deletions
diff --git a/hurd/translator/tmpfs/notes_bing.mdwn b/hurd/translator/tmpfs/notes_bing.mdwn
index 8aa48b44..312c3342 100644
--- a/hurd/translator/tmpfs/notes_bing.mdwn
+++ b/hurd/translator/tmpfs/notes_bing.mdwn
@@ -6,85 +6,91 @@ Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
is included in the section entitled
[[GNU_Free_Documentation_License|/fdl]]."]]
-1. to run tmpfs as a regular user, /servers/default-pager must be executable by that user. by default it seems to be set to read/write.
-$ sudo chmod ugo+x /servers/default-pager
-
-Then I get this error:
-tmpfs: /build/mbanck/hurd-20060825/build-tree/hurd/tmpfs/dir.c:62: diskfs_get_directs: Assertion `__builtin_offsetof (struct tmpfs_dirent, name) >= __builtin_offsetof (struct dirent, d_name)' failed.
-
-2. i rearranged the struct tempfs_dirent in tmpfs.h to line up with the struct dirent. now the assert passes at line 62 of dir.c passes.
- struct tmpfs_dirent
- {
- struct tmpfs_dirent *next;
- struct disknode *dn;
-+ char padding[3];
- uint8_t namelen;
- char name[0];
- };
-
-now ls works on an empty directory.
-you can touch files, and run `ls' on them.
-mkdir, rmdir works too.
-fsysopts works
-df works
+1. to run tmpfs as a regular user, /servers/default-pager must be executable by
+ that user. by default it seems to be set to read/write.
+
+ $ sudo chmod ugo+x /servers/default-pager
+
+ Then I get this error:
+
+ tmpfs: /build/mbanck/hurd-20060825/build-tree/hurd/tmpfs/dir.c:62: diskfs_get_directs: Assertion `__builtin_offsetof (struct tmpfs_dirent, name) >= __builtin_offsetof (struct dirent, d_name)' failed.
+
+2. i rearranged the struct tempfs_dirent in tmpfs.h to line up with the struct
+ dirent. now the assert passes at line 62 of dir.c passes.
+
+ struct tmpfs_dirent
+ {
+ struct tmpfs_dirent *next;
+ struct disknode *dn;
+ + char padding[3];
+ uint8_t namelen;
+ char name[0];
+ };
+
+ now ls works on an empty directory.
+ you can touch files, and run `ls' on them.
+ mkdir, rmdir works too.
+ fsysopts works
+ df works
3. creating a symlink fails.
-old patch to get symlinks working:
-http://www.mail-archive.com/bug-hurd@gnu.org/msg11844.html
---- node.c.orig 2005-07-24 09:56:39.000000000 -0400
-+++ node.c 2005-07-24 09:55:46.000000000 -0400
-@@ -330,6 +330,7 @@
- create_symlink_hook (struct node *np, const char *target)
- {
- assert (np->dn->u.lnk == 0);
-+ np->dn_stat.st_size = strlen (target);
- if (np->dn_stat.st_size > 0)
- {
- const size_t size = np->dn_stat.st_size + 1;
-@@ -337,6 +338,7 @@
- if (np->dn->u.lnk == 0)
- return ENOSPC;
- memcpy (np->dn->u.lnk, target, size);
-+ np->dn->type = DT_LNK;
- adjust_used (size);
- recompute_blocks (np);
- }
-@@ -380,8 +382,6 @@
- error_t
- diskfs_truncate (struct node *np, off_t size)
- {
-- if (np->allocsize <= size)
-- return 0;
-
- if (np->dn->type == DT_LNK)
- {
-@@ -392,6 +392,9 @@
- return 0;
- }
-
-+ if (np->allocsize <= size)
-+ return 0;
-+
- assert (np->dn->type == DT_REG);
-
- if (default_pager == MACH_PORT_NULL)
-
-now symlinks work.
+ old patch to get symlinks working:
+
+ http://www.mail-archive.com/bug-hurd@gnu.org/msg11844.html
+ --- node.c.orig 2005-07-24 09:56:39.000000000 -0400
+ +++ node.c 2005-07-24 09:55:46.000000000 -0400
+ @@ -330,6 +330,7 @@
+ create_symlink_hook (struct node *np, const char *target)
+ {
+ assert (np->dn->u.lnk == 0);
+ + np->dn_stat.st_size = strlen (target);
+ if (np->dn_stat.st_size > 0)
+ {
+ const size_t size = np->dn_stat.st_size + 1;
+ @@ -337,6 +338,7 @@
+ if (np->dn->u.lnk == 0)
+ return ENOSPC;
+ memcpy (np->dn->u.lnk, target, size);
+ + np->dn->type = DT_LNK;
+ adjust_used (size);
+ recompute_blocks (np);
+ }
+ @@ -380,8 +382,6 @@
+ error_t
+ diskfs_truncate (struct node *np, off_t size)
+ {
+ - if (np->allocsize <= size)
+ - return 0;
+
+ if (np->dn->type == DT_LNK)
+ {
+ @@ -392,6 +392,9 @@
+ return 0;
+ }
+
+ + if (np->allocsize <= size)
+ + return 0;
+ +
+ assert (np->dn->type == DT_REG);
+
+ if (default_pager == MACH_PORT_NULL)
+
+ now symlinks work.
4. can't write data to a file
---
+---
+
miscellaneous notes:
-diskfs_disk_name could be NULL, but it is "swap"
+`diskfs_disk_name` could be `NULL`, but it is `"swap"`
-using default_pager_object_set_size (np->dn->u.reg.memobj, size); to truncate and grow.
+using `default_pager_object_set_size (np->dn->u.reg.memobj, size);` to truncate and grow.
why are our blocks 512? shouldn't it something else? or at least settable?
-or does libdiskfs demand this?
+or does [[libdiskfs]] demand this?
-diskfs_get_filemap_pager_struct (struct node *np) returns null.
-shouldn't it return default_pager?
----
+`diskfs_get_filemap_pager_struct (struct node *np)` returns null.
+shouldn't it return `default_pager`?