From: Stef B. <st...@gm...> - 2010-06-04 14:35:45
|
Hello, as you may know I'm working on fusexmp_ll_fh. It works very good, but have some problem with creating a new file (or dir, does not matter). the function which does this creates a file in a seperate directory, changes the ownership, the permissions and then renamed. This works very good, but when the underlying fs is not on one device, this leads to errors. This is because rename simply refuses to rename a device over a device boundaries. The error is a invalid cross-device link. Now there are two sollutions: - maintain a list of "temporary" directories, one per device to create files/links/directories, and them rename them. the disadvantage is that extra administration is necessary. - rename in place. Just create the temporary file/dir/link in the directory where it belongs. Are there serious drawbacks when using the latest? (I've read also the man page of rsync, and this uses a simular construction, it has a option --inplace, and here is warning) Stef |
From: Miklos S. <mi...@sz...> - 2010-06-07 11:45:16
|
On Fri, 4 Jun 2010, Stef Bon wrote: > Hello, > > as you may know I'm working on fusexmp_ll_fh. > > It works very good, but have some problem with creating a new file (or > dir, does not matter). > > the function which does this creates a file in a seperate directory, > changes the ownership, the permissions and then renamed. > This works very good, but when the underlying fs is not on one device, > this leads to errors. > > This is because rename simply refuses to rename a device over a device > boundaries. The error is a invalid cross-device link. Don't rename them, just create them in place. You can control ownership with setfsuid() and setfsgid(). Thanks, Miklos |
From: Stef B. <st...@gm...> - 2010-06-07 13:58:53
|
Thanks a lot. Stef Bon 2010/6/7 Miklos Szeredi <mi...@sz...>: > On Fri, 4 Jun 2010, Stef Bon wrote: >> Hello, >> >> as you may know I'm working on fusexmp_ll_fh. >> >> It works very good, but have some problem with creating a new file (or >> dir, does not matter). >> >> the function which does this creates a file in a seperate directory, >> changes the ownership, the permissions and then renamed. >> This works very good, but when the underlying fs is not on one device, >> this leads to errors. >> >> This is because rename simply refuses to rename a device over a device >> boundaries. The error is a invalid cross-device link. > > Don't rename them, just create them in place. > > You can control ownership with setfsuid() and setfsgid(). > > Thanks, > Miklos > |
From: Stef B. <st...@gm...> - 2010-07-26 20:05:14
|
Hello, this message is very late, but I very much like to know what you mean with setfsgid and setfsuid. When I read the manpage I see: set user identity used for file system checks, but why should I use it? I'm now getting errors when my fs creates a new file. It works basically like: res=openat(fd, path, O_WRONLY | O_CREAT | O_EXCL, st->st_mode) if res!=-1 close(res) and res=fchownat(fd, path, st->st_uid, st->st_gid, AT_SYMLINK_NOFOLLOW) if res!=-1 res=fstatat(fd, path, &e->attr, AT_SYMLINK_NOFOLLOW) if successfull, fill in the rest: entry->inode->nlookup++; e->ino = entry->inode->ino; e->attr.st_ino = e->ino; e->generation = 0; e->attr_timeout = attr_timeout; e->entry_timeout = entry_timeout; But I get errors permissions denied. Strange enough this happens only when accessing another filesystem (mounted by autofs) I remembered your remark about setfsuid, and maybe it's related. Stef Bon 2010/6/7 Miklos Szeredi <mi...@sz...>: > On Fri, 4 Jun 2010, Stef Bon wrote: >> Hello, >> >> as you may know I'm working on fusexmp_ll_fh. >> >> It works very good, but have some problem with creating a new file (or >> dir, does not matter). >> >> the function which does this creates a file in a seperate directory, >> changes the ownership, the permissions and then renamed. >> This works very good, but when the underlying fs is not on one device, >> this leads to errors. >> >> This is because rename simply refuses to rename a device over a device >> boundaries. The error is a invalid cross-device link. > > Don't rename them, just create them in place. > > You can control ownership with setfsuid() and setfsgid(). > > Thanks, > Miklos > |