From: Al Viro Date: Mon, 7 Jun 2010 03:49:18 +0000 (-0400) Subject: try to get rid of races in hostfs open() X-Git-Tag: v2.6.36-rc1~304^2~36 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8ad850f11e11d10e7de1a16ca53cb193afc9313;p=pandora-kernel.git try to get rid of races in hostfs open() In case of mode mismatch, do *not* blindly close the descriptor another openers might be using right now. Open the underlying file with currently sufficient mode, then * if current mode has grown so that it's sufficient for us now, just close our new fd * if current mode has grown and our fd is *not* enough to cover it, close and repeat. * otherwise, install our fd if the file hadn't been opened at all or dup2() our fd over the current one (and close our fd). Critical section is protected by mutex; yes, system-wide. All we do under it is a bunch of comparison and maybe an overwriting dup2() on host. Signed-off-by: Al Viro --- Reading git-diff-tree failed