From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Dilger Subject: Re: i_mutex locking in generic_file_splice_write() Date: Mon, 16 Oct 2006 11:58:08 -0600 Message-ID: <20061016175808.GH6221@schatzie.adilger.int> References: <20061012125409.40bd1fb1.akpm@osdl.org> <20061013001715.GV6485@ca-server1.us.oracle.com> <20061013074516.GY6515@kernel.dk> <20061013011129.42a757fb.akpm@osdl.org> <20061013081855.GG6515@kernel.dk> <20061013194442.GA2954@ca-server1.us.oracle.com> <20061015180520.GC14399@kernel.dk> <20061015195657.GA13426@ca-server1.us.oracle.com> <20061015200828.GO14399@kernel.dk> <20061015201415.GB13426@ca-server1.us.oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Jens Axboe , Andrew Morton , linux-fsdevel@vger.kernel.org, Michael Halcrow Return-path: Received: from mail.clusterfs.com ([206.168.112.78]:45472 "EHLO mail.clusterfs.com") by vger.kernel.org with ESMTP id S1161041AbWJPR6K (ORCPT ); Mon, 16 Oct 2006 13:58:10 -0400 To: Mark Fasheh Content-Disposition: inline In-Reply-To: <20061015201415.GB13426@ca-server1.us.oracle.com> Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org On Oct 15, 2006 13:14 -0700, Mark Fasheh wrote: > +void inode_double_lock(struct inode *inode1, struct inode *inode2) > +{ > + if (!inode1 || !inode2) { > + if (inode1) > + mutex_lock(&inode1->i_mutex); > + else if (inode2) > + mutex_lock(&inode2->i_mutex); > + return; > + } > + > + if (inode1 == inode2) { > + mutex_lock(&inode1->i_mutex); Could be a tiny bit cleaner if you put the "inode1 == inode2" case above: void inode_double_lock(struct inode *inode1, struct inode *inode2) { if (inode1 == NULL || inode2 == NULL || inode1 == inode2) { if (inode1) mutex_lock(&inode1->i_mutex); else if (inode2) mutex_lock(&inode2->i_mutex); return; } if (inode1 < inode2) { mutex_lock_nested(&inode1->i_mutex, I_MUTEX_PARENT); mutex_lock_nested(&inode2->i_mutex, I_MUTEX_CHILD); } else { mutex_lock_nested(&inode2->i_mutex, I_MUTEX_PARENT); mutex_lock_nested(&inode1->i_mutex, I_MUTEX_CHILD); } } Cheers, Andreas -- Andreas Dilger Principal Software Engineer Cluster File Systems, Inc.