From: Miklos Szeredi on 19 Apr 2010 11:20 On Mon, 19 Apr 2010, Valerie Aurora wrote: > I don't recall there being any technical reason not to look up the > real inode number. I just wrote it that we because I was lazy. So I > like returning the directory's d_ino better than a single magic > number, but I'd at least like to try returning the real inode number > too. Note, "struct dirent" doesn't have d_dev, so you really can't return the "real" inode number, that's on a different filesystem and just a random number in the context of the the readdir in question. Thanks, Miklos -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Jamie Lokier on 20 Apr 2010 17:40 Miklos Szeredi wrote: > On Mon, 19 Apr 2010, Valerie Aurora wrote: > > I don't recall there being any technical reason not to look up the > > real inode number. I just wrote it that we because I was lazy. So I > > like returning the directory's d_ino better than a single magic > > number, but I'd at least like to try returning the real inode number > > too. > > Note, "struct dirent" doesn't have d_dev, so you really can't return > the "real" inode number, that's on a different filesystem and just a > random number in the context of the the readdir in question. Agree. Does this inappropriate inode number for the union mount's st_dev happen with stat() on the actual files too? That could be bad. -- Jamie -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: J. R. Okajima on 22 Apr 2010 06:40 Jamie Lokier: > Hmm. I smell potential confusion for some otherwise POSIX-friendly > userspaces. ::: > This plays into inotify, where you have to know if you are monitoring > every directory that contains a link to a file, to know if you need to > monitor the file itself directly instead. Addition to the inode number of fallthru/readdir, hardlink in union mount may be a problem. If you open a hardlinked file for writing or try chmod it, the internal copyup will happen and the hardlink will be destroyed. For instance, when fileA and fileB are hardlinked on the lower layer, and the contents of fileA is modifed (copyup happens). You will not see the latest contents via fileB. And the IN_CREATE event may be fired to the parent dir if you monitor it, I am afraid. (I have pointed out this issue before, but the posted document didn't seem to contain about it) J. R. Okajima -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Jan Blunck on 21 Apr 2010 04:50 On Tue, Apr 20, Jamie Lokier wrote: > Miklos Szeredi wrote: > > On Mon, 19 Apr 2010, Valerie Aurora wrote: > > > I don't recall there being any technical reason not to look up the > > > real inode number. I just wrote it that we because I was lazy. So I > > > like returning the directory's d_ino better than a single magic > > > number, but I'd at least like to try returning the real inode number > > > too. > > > > Note, "struct dirent" doesn't have d_dev, so you really can't return > > the "real" inode number, that's on a different filesystem and just a > > random number in the context of the the readdir in question. > > Agree. Does this inappropriate inode number for the union mount's > st_dev happen with stat() on the actual files too? That could be bad. No, for stat() you do a lookup and that is returning the correct dentry/inode for the filesystem the name is on. We just return the the fallthru directory entries to give userspace an offset that they can seekdir() to. Regards, Jan -- Jan Blunck <jblunck(a)suse.de> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Jamie Lokier on 21 Apr 2010 05:30 Jan Blunck wrote: > On Tue, Apr 20, Jamie Lokier wrote: > > > Miklos Szeredi wrote: > > > On Mon, 19 Apr 2010, Valerie Aurora wrote: > > > > I don't recall there being any technical reason not to look up the > > > > real inode number. I just wrote it that we because I was lazy. So I > > > > like returning the directory's d_ino better than a single magic > > > > number, but I'd at least like to try returning the real inode number > > > > too. > > > > > > Note, "struct dirent" doesn't have d_dev, so you really can't return > > > the "real" inode number, that's on a different filesystem and just a > > > random number in the context of the the readdir in question. > > > > Agree. Does this inappropriate inode number for the union mount's > > st_dev happen with stat() on the actual files too? That could be bad. > > No, for stat() you do a lookup and that is returning the correct > dentry/inode for the filesystem the name is on. Hmm. I smell potential confusion for some otherwise POSIX-friendly userspaces. When I open /path/to/foo, call fstat (st_dev=2, st_ino=5678), and then keep the file open, then later do a readdir which includes foo (dir.st_dev=1, d_ino=1234), I'm going to immediately assume a rename or unlink happened, close the file, abort streaming from it, refresh the GUI windows, refresh application caches for that name entry, etc. Because in the POSIX world I think open files have stable inode numbers (as long as they are open), and I don't think that an open file can have it's name's d_ino not match the inode number unless it's a mount point, which my program would know about. This plays into inotify, where you have to know if you are monitoring every directory that contains a link to a file, to know if you need to monitor the file itself directly instead. Now I think it's fair enough that a union mount doesn't play all the traditional rules :-) C'est la vie. This mismatch of (dir.st_dev,d_ino) and st_ino strongly resembles a file-bind-mount. Like bind mounts, it's quite annoying for programs that like to assume they've seen all of a file's links when they've seen i_nlink of them. Bind mounts can be detected by looking in /proc/mounts. st_dev changing doesn't work because it can be a binding of the same filesystem. How would I go about detecting when a union mount's directory entry has similar behaviour, without calling stat() on each entry? Is it just a matter of recognising a particular filesystem name in /proc/mounts, or something more? Thanks, -- Jamie -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|
Next
|
Last
Pages: 1 2 3 Prev: Fix typo in percpu.h Next: x86: correctly wire up the newuname system call |