On Fri, 2007-09-21 at 01:17 -0700, Andrew Morton wrote:Just brainstorming a bit... I tried just keeping a writer count in the superblock which we bump at the same time as the mnt->__mnt_writers, which makes it quite easy to check whenever we have the inode around. This causes quite a few false positives with journal code, and I think a few more with direct block device access. I think we can work around those, though. The true issue comes when we have a lot of users (more than one) of a superblock. If anybody has a write request outstanding, then the check I put in will get skipped. It's easy to mask real problems this way. Putting the "inodes allowed" list in the task (or probably signal struct to support threads) should be workable, but I worry a bit about the cases where fds are sent across sockets. We could also break up the mnt_want_write() requests into two classes, the common mnt_want_write() case and mnt_want_indefinite_write() or something. The plain (and common) case is the one for things like rmdir, mknod, or chmod where the write is confined to a single syscall. mnt_want_indefinite_write() would be for things that do an open() and later work on a file descriptor. Each of these cases could have a different variable or flag in (or hanging off) the task struct. In __mark_inode_dirty() we would first check to see if we are currently in one of the plain, more atomic, mnt_want_write() regions by checking a flag. If not, we go looking through the task's file descriptors and seeing if one of them is open for write on the inode. If both of these conditions fail, then we have a potential bug. -- Dave -
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| david | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Rob Landley | What still uses the block layer? |
git: | |
| Antonio Almeida | HTB accuracy for high speed |
| Alexey Dobriyan | Re: [GIT]: Networking |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
