On 10/10/2016 04:55 AM, Jason Gunthorpe wrote: > On Sun, Oct 09, 2016 at 09:47:08AM +0530, Nayna wrote: > >>>> + const struct tpm_securityfs_data *sfs_data = >>>> + (const struct tpm_securityfs_data *)inode->i_private; >>>> + const struct seq_operations *seqops = sfs_data->seqops; >>> >>> You need a get_device(&chip->dev) here, and the matching put_device in >>> fops->release(). >>> >>>> + seq->private = sfs_data->log; >>> >>> So store the chip here > >> Sorry, I think I didn't understand the purpose of storing chip here. > > Since we need to do get_device in open() you need to do put_device > in release() > > How will you reliably do put_device if you do not store chip in the > seq_private?
We are storing tpm_securityfs_data in inode->private. Currently, tpm_securityfs_data is struct tpm_securityfs_data { struct tpm_bios_log *log; const struct seq_operations *seqops; }; This, I am changing in new version to struct tpm_securityfs_data { struct tpm_bios_log *chip; const struct seq_operations *seqops; }; And we pass this as private data to i_node in tpm_bios_log_setup. So, we are referring chip as i_node->i_private->chip. And both open() and release() gets i_node as input parameter. Thanks & Regards, - Nayna > > Jason > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ tpmdd-devel mailing list tpmdd-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tpmdd-devel