From mboxrd@z Thu Jan 1 00:00:00 1970 From: "J. Bruce Fields" Subject: elementary d_move question Date: Wed, 23 Oct 2013 11:46:54 -0400 Message-ID: <20131023154654.GC30796@fieldses.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-fsdevel@vger.kernel.org To: Al Viro Return-path: Received: from fieldses.org ([174.143.236.118]:55889 "EHLO fieldses.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751504Ab3JWPqz (ORCPT ); Wed, 23 Oct 2013 11:46:55 -0400 Content-Disposition: inline Sender: linux-fsdevel-owner@vger.kernel.org List-ID: If I rename foo over bar, while holding bar open, then /proc//fd/ still shows me bar's old path: $ touch foo bar $ tail -f bar & [1] 23492 $ mv foo bar $ readlink /proc/23492/fd/3 /home/bfields/bar (deleted) The rename does a d_move(dentry, target) where I assume dentry is for "foo" and target for "bar", with target the same dentry that the file descriptor holds a reference on. But d_move() does switch_names(dentry, target); giving target name "foo". So how does readlink still get "bar"? I've clearly missed something obvious.... --b.