From: Al Viro Date: Thu, 4 Sep 2014 13:38:11 +0000 (-0400) Subject: udf: fix the udf_iget() vs. udf_new_inode() races X-Git-Tag: fixes-for-v3.18-merge-window~153^2~1 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b231509616feb911c2a7a8814d58c0014ef5b17f;p=pandora-kernel.git udf: fix the udf_iget() vs. udf_new_inode() races Currently udf_iget() (triggered by NFS) can race with udf_new_inode() leading to two inode structures with the same inode number: nfsd: iget_locked() creates inode nfsd: try to read from disk, block on that. udf_new_inode(): allocate inode with that inumber udf_new_inode(): insert it into icache, set it up and dirty udf_write_inode(): write inode into buffer cache nfsd: get CPU again, look into buffer cache, see nice and sane on-disk inode, set the in-core inode from it Fix the problem by putting inode into icache in locked state (I_NEW set) and unlocking it only after it's fully set up. Signed-off-by: Al Viro Signed-off-by: Jan Kara --- Reading git-diff-tree failed