From owner-freebsd-hackers Tue May 30 13:21:14 2000 Delivered-To: freebsd-hackers@freebsd.org Received: from kcmso1.proxy.att.com (kcmso1.att.com [192.128.133.69]) by hub.freebsd.org (Postfix) with ESMTP id B90F037B9AF; Tue, 30 May 2000 13:21:03 -0700 (PDT) (envelope-from myevmenkin@att.com) Received: from gab200r1.ems.att.com ([135.37.94.32]) by kcmso1.proxy.att.com (AT&T IPNS/MSO-2.2) with ESMTP id QAA23223; Tue, 30 May 2000 16:20:57 -0400 (EDT) Received: from njb140bh2.ems.att.com by gab200r1.ems.att.com (8.8.8+Sun/ATTEMS-1.4.1 sol2) id QAA20064; Tue, 30 May 2000 16:22:25 -0400 (EDT) Received: by njb140bh2.ems.att.com with Internet Mail Service (5.5.2650.21) id ; Tue, 30 May 2000 16:20:56 -0400 Message-ID: From: "Yevmenkin, Maksim N, CSCIO" To: "'Zhihui Zhang'" Cc: "'freebsd-hackers@freebsd.org'" , "'freebsd-current@freebsd.org'" Subject: RE: stupid FS questions Date: Tue, 30 May 2000 16:20:53 -0400 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2650.21) Content-Type: text/plain; charset="koi8-r" Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG i know that :) i guess my questions were 1) why the same piece of code duplicated in all ``mount_xxx'' utilities? 2) if we are loading fs kernel module from ``mount_xxx'' why we have to do it again in kernel? if i'm not missing anything, by the time we reach ``mount'' function, fs module will be in the memory and this code will never be executed. thanks, emax > I believe that it is used to dynamic load filesystem modules. > Please read > the following pages to understand what is a kernel module: > > http://thc.inferno.tusculum.edu/files/thc/bsdkern.html > > > i've been looking at ``mount_xxx'' code and have noticed > "strange" thing. > > all ``mount_xxx'' utilities have common part of code, like > > > > error = getvfsbyname("xxx", &vfc); > > if (error && vfsisloadable("xxx")) { > > if (vfsload("xxx")) > > err(EX_OSERR, "vfsload(xxx)"); > > endvfsent(); /* flush cache */ > > error = getvfsbyname("xxx", &vfc); > > } > > if (error) > > errx(1, "xxx filesystem is not available"); > > > > if (mount(vfc.vfc_name, dir, mntflags, &args) < 0) > > err(1, NULL); > > > > 1) what is the reason for this? why can't move this code to > ``mount''? > > 2) what is the purpose of the following code in > > ``/sys/kern/vfs_syscalls.c''? > > > > ... > > for (vfsp = vfsconf; vfsp; vfsp = vfsp->vfc_next) > > if (!strcmp(vfsp->vfc_name, fstypename)) > > break; > > if (vfsp == NULL) { > > linker_file_t lf; > > > > /* Refuse to load modules if securelevel raised */ > > if (securelevel > 0) { > > vput(vp); > > return EPERM; > > } > > /* Only load modules for root (very important!) */ > > if ((error = suser(p)) != 0) { > > vput(vp); > > return error; > > } > > error = linker_load_file(fstypename, &lf); > > if (error || lf == NULL) { > > vput(vp); > > if (lf == NULL) > > error = ENODEV; > > return error; > > } > > ... > > > > from my understanding this is done to load FS module. > > or did i miss someting? To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message