From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ronghua Zhang Subject: problems in implementing a new file system Date: Mon, 17 Feb 2003 17:43:02 -0500 (EST) Sender: linux-fsdevel-owner@vger.kernel.org Message-ID: Mime-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-851401618-1045521782=:13225" Return-path: To: linux-fsdevel@vger.kernel.org, kernelnewbies@nl.linux.org List-Id: linux-fsdevel.vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---559023410-851401618-1045521782=:13225 Content-Type: TEXT/PLAIN; charset=US-ASCII I am implementing a new file system. As a prototype, only read_super and read_inode are implmented. What suprises me is that, when read_inode is called to read in root inode , inode->i_sb is _not_ the super block pointer passed to read_super function call. Can anybody kindly help me find the problem? My code is the following: #include #include #include #include static struct super_operations snet_sops = { read_inode: snet_read_inode, }; void snet_read_inode(struct inode *inode) { SNETFS_DEBUG("snet_read_inode, ino = %lu, sb = %p\n", inode->i_ino, inode->i_sb); if (inode->i_ino == 1){ inode->i_mode = S_IFDIR; } } struct super_block * snet_read_super(struct super_block * sb, void * data, int silent) { SNETFS_DEBUG("snet_read_super() called, sb = %p\n", sb); sb->s_magic = SNET_SUPER_MAGIC; sb->s_op = &snet_sops; sb->s_root = d_alloc_root(iget(sb, 1)); if (!sb->s_root){ printk("snet_read_super: get root inode failed\n"); return NULL; } return sb; } static DECLARE_FSTYPE(snet_fs_type, "simple", snet_read_super, 0); static int __init init_snet_fs(void) { return register_filesystem(&snet_fs_type); } static void __exit exit_snet_fs(void) { unregister_filesystem(&snet_fs_type); } EXPORT_NO_SYMBOLS; module_init(init_snet_fs) module_exit(exit_snet_fs) To test it, I first insmod snet.o, then run mount /dev/zero /mnt -t simple. dmesg show the following: snet_read_super() called, sb = d1f86800 snet_read_inode() called, sb = c02cd4a0 notice that two sb are different, which should not be. Thanks. rz ---559023410-851401618-1045521782=:13225 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="fs.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="fs.c" I2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPg0KI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPg0KI2luY2x1ZGUgPGxpbnV4L2ZzLmg+DQojaW5jbHVkZSA8bGlu dXgvc25ldF9mcy5oPg0KDQpzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlv bnMgc25ldF9zb3BzID0gew0KCXJlYWRfaW5vZGU6ICAgICBzbmV0X3JlYWRf aW5vZGUsDQp9Ow0KDQp2b2lkIHNuZXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5v ZGUgKmlub2RlKQ0Kew0KCVNORVRGU19ERUJVRygic25ldF9yZWFkX2lub2Rl LCBpbm8gPSAlbHUsIHNiID0gJXBcbiIsIGlub2RlLT5pX2lubywNCgkgICAg ICAgICAgICAgaW5vZGUtPmlfc2IpOw0KCWlmIChTTkVUX0lTX1JFU0VSVkVE X0RJUihpbm9kZS0+aV9pbm8pKXsNCgkJaW5vZGUtPmlfbW9kZSA9IFNfSUZE SVI7DQoJfQ0KfQ0KDQpzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzbmV0X3JlYWRf c3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsIHZvaWQgKiBkYXRhLCAN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2ls ZW50KQ0KewkNCglTTkVURlNfREVCVUcoInNuZXRfcmVhZF9zdXBlcigpIGNh bGxlZCwgc2IgPSAlcFxuIiwgc2IpOw0KCXNiLT5zX21hZ2ljID0gU05FVF9T VVBFUl9NQUdJQzsNCglzYi0+c19vcCA9ICZzbmV0X3NvcHM7DQoJc2ItPnNf cm9vdCA9IGRfYWxsb2Nfcm9vdChpZ2V0KHNiLCBTTkVUX1JPT1RfSU5PKSk7 DQoJaWYgKCFzYi0+c19yb290KXsNCgkJcHJpbnRrKCJzbmV0X3JlYWRfc3Vw ZXI6IGdldCByb290IGlub2RlIGZhaWxlZFxuIik7DQoJCXJldHVybiBOVUxM OyANCgl9DQoNCgkvKiBUT0RPOiBhbGxvY2F0ZSB0aGUgZmlyc3QgcGFnZSBm b3IgLywgL3JhdywgL2V2ZW50LCAvcHJvYyAqLw0KCVNORVRGU19ERUJVRygi c25ldF9yZWFkX3N1cGVyKCkgZG9uZVxuIik7DQoJcmV0dXJuIHNiOw0KfQ0K DQpzdGF0aWMgREVDTEFSRV9GU1RZUEUoc25ldF9mc190eXBlLCAic2ltcGxl Iiwgc25ldF9yZWFkX3N1cGVyLCAwKTsNCg0Kc3RhdGljIGludCBfX2luaXQg aW5pdF9zbmV0X2ZzKHZvaWQpDQp7DQoJU05FVEZTX0RFQlVHKCJpbml0X3Nu ZXRfZnMoKSBjYWxsZWRcbiIpOw0KDQoJcmV0dXJuIHJlZ2lzdGVyX2ZpbGVz eXN0ZW0oJnNuZXRfZnNfdHlwZSk7DQp9DQoNCnN0YXRpYyB2b2lkIF9fZXhp dCBleGl0X3NuZXRfZnModm9pZCkNCnsNCglTTkVURlNfREVCVUcoImV4aXRf c25ldF9mcygpIGNhbGxlZFxuIik7DQoJdW5yZWdpc3Rlcl9maWxlc3lzdGVt KCZzbmV0X2ZzX3R5cGUpOw0KfQ0KDQpFWFBPUlRfTk9fU1lNQk9MUzsNCg0K bW9kdWxlX2luaXQoaW5pdF9zbmV0X2ZzKQ0KbW9kdWxlX2V4aXQoZXhpdF9z bmV0X2ZzKQ0KDQo= ---559023410-851401618-1045521782=:13225--