From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out4-smtp.messagingengine.com ([66.111.4.28]:34445 "EHLO out4-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932287AbdK2LFd (ORCPT ); Wed, 29 Nov 2017 06:05:33 -0500 Date: Wed, 29 Nov 2017 11:55:46 +0100 From: Greg KH To: Christophe LEROY Cc: Matthew Wilcox , Alexander Viro , linux-fsdevel@vger.kernel.org Subject: Re: Question: how to retrieve drvdata from open() ? Message-ID: <20171129105546.GA15241@kroah.com> References: <20171127163825.GB8265@bombadil.infradead.org> <18ca88f1-b115-f8e8-f56f-a7b9a946e7cc@c-s.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <18ca88f1-b115-f8e8-f56f-a7b9a946e7cc@c-s.fr> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Tue, Nov 28, 2017 at 08:29:22AM +0100, Christophe LEROY wrote: > Hi, thanks for your answwer, > > Le 27/11/2017 � 17:38, Matthew Wilcox a �crit�: > > On Mon, Nov 27, 2017 at 04:18:42PM +0100, Christophe LEROY wrote: > > > When registering a device node with device_create(), it is possible to pass > > > a drvdata pointer. > > > > > > How can I retrieve that drvdata pointer from the open() fops ? I've not been > > > able to find any exemple. > > > > You're not supposed to do it that way ... assuming you're talking about > > a character device, you embed the cdev in your own data structure and > > do this: > > > > struct my_struct *my = container_of(inode->i_cdev, struct my_struct, cdev); > > > > after calling: > > > > cdev_init(&my->cdev, &my_dev_fops); > > > > You'll use the drvdata when trying to go from the struct device to > > 'my_struct'. There's no struct device in struct cdev. I mean, you > > could probably get to it, but it's easier if you just do it the way that > > everybody else does it. > > > > I see, you are right I'm talking about a character device. > > The driver I'm trying to clean is using __register_chrdev() which hides cdev > and cdev operations. Does it mean it has to be changed to do cdev operations > explicitely ? If you want to get access to that, probably. The cdev interface is messy and tricky and can be used in about 5 different ways right now. It's all up to what you need to do with it as to how to use it. Have a pointer to your code somewhere? thanks, greg k-h