Linux-Development-Sys Digest #177, Volume #7      Thu, 9 Sep 99 17:14:48 EDT

Contents:
  Re: threads (Kaz Kylheku)
  journaling: (was Re: EROS, persistency, ext3fs?) (Joseph H Allen)
  Atomic kernel-space sleep-till-condition in 2.2 ([EMAIL PROTECTED])
  Re: INODE Access under kernel 2.2x ([EMAIL PROTECTED])
  Re: loadkeys/compose (Dirk Foersterling)
  Re: Linux - Memory model / protection scheme (Bartosz Klimek)
  Re: glibc-2.1.2 ("Lawrence K. Chen, P.Eng.")
  Re: Linux + C + 2 serial port (Kaz Kylheku)
  Re: gcc compiler error (with tty_io.c) ([EMAIL PROTECTED])
  Re: Linux standards compliance (David Schwartz)
  Re: Figure Out The MS Source Code Yourself ("Fred Jackson")
  Re: Linux - Memory model / protection scheme (Kaz Kylheku)
  pci libraries ("Chris Naylor")
  Any floating point support in kernel ([EMAIL PROTECTED])
  Re: Atomic kernel-space sleep-till-condition in 2.2 (Kaz Kylheku)
  Re: where to find shared libraries HOWTO (Eric Marsden)
  Re: Shutdown Problem (Graffiti)
  Re: INODE Access under kernel 2.2x (Mark Vogelsberger)

----------------------------------------------------------------------------

From: [EMAIL PROTECTED] (Kaz Kylheku)
Subject: Re: threads
Reply-To: [EMAIL PROTECTED]
Date: Thu, 09 Sep 1999 16:05:29 GMT

On 8 Sep 1999 23:59:31 -0500, Peter Samuelson <[EMAIL PROTECTED]> wrote:
>[David Schwartz <[EMAIL PROTECTED]>]
>> One possible 'in-between' architecure would use a single
>> multithreaded master processes that managed I/O (with another process 
>> to restart it in case it died).  This process would handle send
>> queues and receive queues and farm 'complex' requests out to a pool
>> of processes that handle the more complex requests, probably using
>> shared memory to communicate. One advantage of this architecture is
>> that you can dramatically reduce process context switches if most of
>> the requests are 'simple'.
>
>What makes you think a process context switch is more expensive than a
>thread context switch?  If I understand correctly, in Linux they're
>almost the same (and quite low compared to, say, NT).  In any case they 
>aren't "dramatically" different.

Because a process context switch involves a change of address spaces.  This
means that the virtual address translation cache (also called the
TLB---translation lookaside buffer) has to be flushed. Thus when the process is
dispatched, it incurs misses in its translation cache.  Refilling the cache
requires the processor to walk the page tables. It's not necessarily as big a
deal as some people make it out to be.  Other caches may have to be flushed.
If your instruction or data caches use virtual addresses, they have
to be flushed too since their contents don't make sense anymore.

------------------------------

From: [EMAIL PROTECTED] (Joseph H Allen)
Subject: journaling: (was Re: EROS, persistency, ext3fs?)
Date: Thu, 9 Sep 1999 13:48:57 GMT

In article <ryjB3.6833$[EMAIL PROTECTED]>,
Christopher Browne <[EMAIL PROTECTED]> wrote:
>There is some ambiguity at this point as to just how much stuff is
>getting journalled; apparently keeping data/metadata in sync in a
>guaranteed-to-be-correct manner is a Bit Of A Challenge.

I'm in the process of writing a new database and have just realized that in
one form at least, this journaling stuff is almost trivial to implement. 
Somebody should make a patch for ext2 and get it over with.  All you do is
write backup copies of each block which gets modified for any particular
transaction along with a small header composed of the block no., a
transaction no. and a checksum of the block/header combination to the
fixed-length WADS (Write Ahead Data Set- a term borrowed from IBM's IMS
system and which is a more accurate term than "Journal" or "log") before you
let any of the dirty filesystem buffers to be written.  You also write an
end of transaction marker to the WADS which just has the transaction no. and
a count of the backup pages written to the WADS for that transaction (this
also must be written before the filesystem buffers are written).

When the WADS is nearly full (there must always be enough space to complete
the largest possible transaction), sync the filesystem completely before you
begin recycling the WADS.  The size of the WADS will determine the frequency
of these syncs.

When you reboot after a crash, write all complete sets of backup pages
(those sets of pages which belong to a particular transaction, which match
the count in the end of transaction marker, and which have verified
checksums) found in the WADS back to their original place in the filesystem. 
After this, the filesystem will then be in a correct state and no further
fscking is required.

Writing to the WADS first could either mean that the buffer code serializes
the writes (all buffers of a lower serial number must be written before any
of the next higher one), or simply that the WADS is fsynced after each
transaction.  This second is much easier to implement, but still does
require a small change in the buffer code- there must at least be a flag
which when set prevents dirty buffers for the filesystem from being written.
You could probably do it without this flag, but then the filesystem code
would need to be more extensively modified- it would need to make two passes
for each transaction- one to make the backup coppies and another to make the
actual changes for the transaction.

This method is nice, since no changes to the ext2 disk structure are
necessary and hence it would be fully backward compatible.  In fact this
method could be used for any filesystem- a journaled FAT filesystem anyone?
:-)

Writes would be slow if the fsync method is required, but it could be made
optional for people who care more about data integrity or fsck speed than
about the loss in write speed.  Actually, the fsync could be fast if the
WADS is on a seperate drive.  Notice also that the order of the pages
written to the WADS does not matter, so you could limit the WADS to being
one cylinder in size and write to whatever free sector is about to pass
under the heads (which you figure out approximately by recording a
microsecond timer value after each write- if the approximation is slightly
undervalued it will be good enough under heavy load conditions).  Another
option would be to use a battery backed up ram (or core memory) for the
WADS, if such a device exists.

Now we are left with what to define as a transaction.  Simple transactions
like unlink, mknode, etc. are easy and limited in size.  Data writes could
be broken into a seperate transaction for each block written, or perhaps be
simplified to include only those which cause meta-data changes.  This could
be an option.
-- 
/*  [EMAIL PROTECTED] (192.74.137.5) */               /* Joseph H. Allen */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}

------------------------------

From: [EMAIL PROTECTED]
Subject: Atomic kernel-space sleep-till-condition in 2.2
Date: Thu, 09 Sep 1999 16:54:31 GMT

Please be gentle... I'm new here.

I'm trying to port a custom driver for an industrial controller from
LynxOS to Linux.  The read call needs to atomically test if a queue is
empty and if so go to sleep.  The interrupt handler will then wake it up
-- the usual thing, I'm sure.

Obviously,

if (num_queued == 0)
  interruptible_sleep_on ...

is no good because the the process may never wake up if the interrupt
comes between the test and interruptible_sleep_on.

Rubini's book _Linux Device Drivers_ has code for a safe test-or-sleep
the uses add_wait_que after setting current->state=TASK_INTERRUPTIBLE.
I'm not sure if this method is still valid for the 2.2 kernels, as this
was written for 2.0.

LynxOS has kernel-space semaphores that allow for atomic test-or-sleep
-- you just call swait(sem) to go to sleep if the sem <= 0, then the int
handler calls ssignal(sem), etc.  Is there anything this
straight-forward for Linux?

I understand I've still got some homework to do to figure this out, but
would appreciate anyone's advice.


Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.

------------------------------

From: [EMAIL PROTECTED]
Subject: Re: INODE Access under kernel 2.2x
Date: Thu, 09 Sep 1999 17:14:21 GMT

In article <[EMAIL PROTECTED]>,
  Mark Vogelsberger <[EMAIL PROTECTED]> wrote:
> Hi,
>
> at the moment I code a module that hooks the SYS_execve system call.
In
> the hook I use the open() function on the file the userspace wants to
> execute. After opening the file I use
> the file structure supplied by the current structure to get
information
> on the file thats going to be executed.
> The problem I have is, that I cannot get the inode of the file ?? I
only
> get the inode of the path directory (file->f_dentry->d_inode). In
kernel

Are you sure file->f_dentry->d_inode is the inode of the path?  I've
been blindly coding a driver assuming I could get the minor number in
"read" from MINOR(file->f_dentry->d_inode->i_rdev)... Maybe I'm all
wrong though.

> 2.0x there was no problem getting the inode of a file : it was a part
of
> the file structure.
> Where can I get the inode of the file in the 2.2x kernel ?
>
> Thanks a lot
>


Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.

------------------------------

From: [EMAIL PROTECTED] (Dirk Foersterling)
Crossposted-To: comp.os.linux.setup
Subject: Re: loadkeys/compose
Date: 9 Sep 1999 17:09:19 GMT

On Thu, 9 Sep 1999 08:26:56 -0500, Bert Douglas
<[EMAIL PROTECTED]> wrote:
> Hi all,
>
> I am reading the info pages on loadkeys and "deadkeys" and diacritic marks and
> still have some questions.
>
> Basically I am trying to convert a KBD file from windows.  In windows the
> diacritics are typed as follows:
>
> type a "dead key" diacritic mark, nothing appears on screen
> then either
>   a) type an acceptable second key, and get a combined diacritic char on screen
>   b) type an unacceptable second key, get two separate characters on screen
>   c) type the same diacritic key a second time, and it appears on screen

Oops? I had in mind that pressing the space bar would yield the
diacritic itself... Boy, I had windows abstinence for too long ;-)

> Questions:
>
> 1) what is the <compose> key?  How do you know?

The <compose> key is some kind of special key. If you have the chance to
look at a Sun Workstation's keyboard or an old Terminal (say, DEC
VT100), you will also find an "compose" key. How to find compose in
Linux I will explain later...

The compose key allows the composition of any character that is not
present on the keyboard. For each character produced, you would need
three keypresses: compose-char1-char2. Example:

Press the <compose> key, then the double quotes (On my keyboard this is
<SHIFT+2>) and then press the 'a' key. If the composition table is set
up as "usual", this should have produced the character '�'. The
corresponding entry in the keytable definition is:

compose '"' 'a' to '�'

But where the heck is <compose>? Well, the standard PC keyboard does not
have any compose key. But if you like, you can define a key being
<compose>. My own keymap redefines the windows menu popup key (that is
the key between the right windows key and the right control key) like
follows:

keycode 127 = Compose

If you add this to your keymap file, you need to load the definition
with loadkeys. Then, you also have a compose key -- at least at the
console.

In X Window, you need to modify your ~/.Xmodmap to define your compose
key. For my setup I had to add the line

keycode 0x75 =  SunCompose

Please note that this time it is called "SunCompose". Hell knows why
the keycode 0x75=117 is different from the console keycode (127) for the
same key.

Beware that the X composition table is stored in another location and
may contain different composition entries. I don't know much about it
and how to change these definitions on a per-user basis, so if you want
to modify your compose tables for X11, you have to ask someone else.
Sorry. 

> 2) are you limited to one <compose> key in Linux?

You can do virtually anything with that one key. Why would you need a
second one? Maybe you ask yourself after you read what it really is.

  -dirk
  
-- 
                   D i r k   F "o r s t e r l i n g                  
[EMAIL PROTECTED]  ********  http://www.DeathsDoor.com/milliByte/
                           -------------
          "Da trennt sich dann die Spreuzen vom Wei!" - D. W.

------------------------------

From: Bartosz Klimek <[EMAIL PROTECTED]>
Subject: Re: Linux - Memory model / protection scheme
Date: Thu, 09 Sep 1999 13:49:15 GMT

David Schwartz wrote:
> 
> > This is wrong, actually. Every Linux process uses the same copy of libc in
> > memory. However, processes cannot write to the libc pages, since they are
> > setup with protections of read/execute only, and a write operation will
> > cause a processor exception. Linux will receive this and send a SIGSEGV to
> > the offending process.
> 
>         Actually, self modifying code is perfectly legal. So even the code is
> mapped read/write. However, it is copied on write, so if process
> corrupted the libc code, it would wind up corrupting a copy that was
> made just for the occasion.

Wow, I feel amazed. How can you modify the code of a process? I tried to
overwrite code area with some random values, and my process got a
SIGSEGV. I could read it, however.

This is the program:

#include <string.h>
int main() { *(int*)strtok = 0; }

Best regards,

-- 
Bartosz Klimek
mailto:[EMAIL PROTECTED]

------------------------------

From: "Lawrence K. Chen, P.Eng." <[EMAIL PROTECTED]>
Subject: Re: glibc-2.1.2
Date: Thu, 09 Sep 1999 10:35:51 -0400

Now that glibc-2.1.2 is released, anybody know when a COTS version of Linux
will be available based on this?

I've been tinkering around a little bit on my own time....I ran into bugs in
2.1.1 that prevented my application from working.....so I upped to 2.1.2-1 and
got everything working.  But, then a friend installed it on his system with
2.1.2-4 and it broke (specifically the Asynchronous I/O stuff).

Because other bugs in glibc got fixed along the way....breaking my
workarounds.

2.1.1 and early 2.1.2 had aio_read/aio_write returning 0 on fail and 1 on
succeed. (rather than the normal behaviour of -1 on fail and 0 on succeed).

Given all the problems I had installing prerelease versions of glibc-2.1.2
(which will probably still happen with the release version, given that fixing
bugs in glibc will break other apps that depend on those bugs)....such as
gnome breakage....I want to have an off-the-shelf version of Linux that works
as a baseline for my development activities.

-- 
    Who: Lawrence Chen, P.Eng.          Email: [EMAIL PROTECTED]
   What: Software Developer               URL: http://www.opentext.com/basis
  Where: Open Text, BASIS Division      Phone: 614-761-7449
         5080 Tuttle Crossing Blvd.       Fax: 614-761-7269
         Dublin, OH  43016                ICQ: 12129673

------------------------------

From: [EMAIL PROTECTED] (Kaz Kylheku)
Subject: Re: Linux + C + 2 serial port
Reply-To: [EMAIL PROTECTED]
Date: Thu, 09 Sep 1999 15:54:48 GMT

On Thu, 09 Sep 1999 12:29:51 GMT, Erol ELISABETH <[EMAIL PROTECTED]> wrote:
>I write an application that get information from a GPS on a serial Port
>/dev/ttyS0
>the application compute this information and send it to the second
>serial port
>/dev/ttyS1
>my problem is that i can't initialise the port the first time i use my
>little applicaiton
>I  have to lunch minicom to setup the serial port ??? (4800 8 N 1) the
>1st time i boot my system
>after my appli works fine

How are you initializing the port? It would help if you showed the code.
Obviously the initialization *can* be done because minicom manages it.

What termios flags are you using? What happens when you try to initialize it?
Does it hang on opening the port?

One potential snag is that the tty might have the CLOCAL flag turned off, which
will cause the open() system call to block until a carrier is detected!
Problem is, you can't set the CLOCAL flag until you have an open file
descriptor. So what you have to do is specify O_NONBLOCK when opening the tty.
This is what minicom does---you can see it if you do a system call trace.

>I want to setup the serial port whith my C prog or someting else whiout
>lunching minicom

You have to use the tcgetattr and tcsetattr functions.

------------------------------

From: [EMAIL PROTECTED]
Subject: Re: gcc compiler error (with tty_io.c)
Date: Thu, 09 Sep 1999 19:42:15 GMT



Hi,
   This problem is solved, because I happened to use the gcc boundled
   with a 3-rd party IDE development software.

   The only problem left to build 2.3.15/16/17 is the problem of the
   get_cached_page function was not found during the linking.

   Thanks...

Wayne


Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.

------------------------------

From: David Schwartz <[EMAIL PROTECTED]>
Subject: Re: Linux standards compliance
Date: Thu, 09 Sep 1999 12:56:05 -0700


Peter Samuelson wrote:

> If UDI were officially blessed by being in kernel source (be it Linus's
> or Red Hat's or whatever) there is the temptation of a hardware vendor
> to cut corners and release only a UDI driver and not a Linux driver for
> their board.  This would make it easy to deceive the public into
> thinking their hardware supports Linux to a greater degree than it
> does.  And if the trend were further encouraged to the point that
> *everyone* started writing UDI drivers, the relative inefficiency of
> the API would slow down people's Linux boxes and reflect poorly on the
> reputation Linux as a whole enjoys for its performance.

        I think they might do that anyway, including the UDI driver along with
their own driver. I don't think that helps anybody. Manufacturers can
already release low-quality, binary-only drivers and claim Linux
compatability. They don't need UDI for that.

        DS

------------------------------

From: "Fred Jackson" <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.development.apps,comp.os.linux.misc
Subject: Re: Figure Out The MS Source Code Yourself
Date: Thu, 9 Sep 1999 15:56:08 -0400

I hear you, but IMHO any prohibition on reverse engineering is horse
manure.  Reverse engineering is a natural right.  All reverse
engineering means is "figuring out how things work".  You might as
well tell me to turn off my brain and watch network TV as try to
tell me I can't reverse engineer anything I feel like.

I'd rather "forward engineer", though :-)  It's usually more satisfying.



Tim Roberts <[EMAIL PROTECTED]> wrote:
>
>The problem with reverse engineering something like Windows is two-fold.
First,
>it is illegal; the Windows license agreement prohibits it.  Second, Windows
is
>just too big.  Windows 2000 consists of something like 20 million lines of
>source code.
>
>--
>- Tim Roberts, [EMAIL PROTECTED]
>  Providenza & Boekelheide, Inc.




------------------------------

From: [EMAIL PROTECTED] (Kaz Kylheku)
Subject: Re: Linux - Memory model / protection scheme
Reply-To: [EMAIL PROTECTED]
Date: Thu, 09 Sep 1999 15:57:37 GMT

On Thu, 09 Sep 1999 13:49:15 GMT, Bartosz Klimek
<[EMAIL PROTECTED]> wrote:
>Wow, I feel amazed. How can you modify the code of a process? I tried to
>overwrite code area with some random values, and my process got a
>SIGSEGV. I could read it, however.

You have to take special steps. Modern processors have separate instruction and
data caches. The instruction cache won't necessarily be invalidated when you
overwrite code, so the processor won't reload the modifications.

(Also, if you are hacking self-modifying code for performance reasons, the
invalidation and reloading of the I cache will probably negate any advantages
gained).

>This is the program:
>
>#include <string.h>
>int main() { *(int*)strtok = 0; }

This fails because the pages are marked read-only.  You first have to lift the
protection using mprotect().

------------------------------

From: "Chris Naylor" <[EMAIL PROTECTED]>
Subject: pci libraries
Date: Thu, 9 Sep 1999 10:12:35 -0700

I am new to the group, so please excuse any ignorance on my part!

I have a problem that I'm sure has a very simple answer - I am developing a
device driver for a pci interface card.  As a result I am using functions in
the pci.h header.  My problem is that I don't know which libraries to
include for these functions - in fact, I can't even find the file where
these functions are implemented.  I have worked on this for a few days and
am getting nowhere - any help would be greatly appreciated!!

Thanks for your time,
Chris



------------------------------

From: [EMAIL PROTECTED]
Subject: Any floating point support in kernel
Date: Thu, 09 Sep 1999 19:38:16 GMT

Hi,

    Is there any floating point support in Linux kernel such as
    to save/restore the states of FP registers and allow usage
    of sin()/cos()/...etc.?

    Thanks

Wayne


Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.

------------------------------

From: [EMAIL PROTECTED] (Kaz Kylheku)
Subject: Re: Atomic kernel-space sleep-till-condition in 2.2
Reply-To: [EMAIL PROTECTED]
Date: Thu, 09 Sep 1999 17:18:49 GMT

On Thu, 09 Sep 1999 16:54:31 GMT, [EMAIL PROTECTED] <[EMAIL PROTECTED]>
wrote:
>Please be gentle... I'm new here.
>
>I'm trying to port a custom driver for an industrial controller from
>LynxOS to Linux.  The read call needs to atomically test if a queue is
>empty and if so go to sleep.  The interrupt handler will then wake it up
>-- the usual thing, I'm sure.
>
>Obviously,
>
>if (num_queued == 0)
>  interruptible_sleep_on ...
>
>is no good because the the process may never wake up if the interrupt
>comes between the test and interruptible_sleep_on.
>
>Rubini's book _Linux Device Drivers_ has code for a safe test-or-sleep
>the uses add_wait_que after setting current->state=TASK_INTERRUPTIBLE.
>I'm not sure if this method is still valid for the 2.2 kernels, as this
>was written for 2.0.

It's still valid.  Note that for atomicity across multiple processors you
should use a spinlock. That is, if you have to test a more complex predicate
involving the examination of multiple words.

>LynxOS has kernel-space semaphores that allow for atomic test-or-sleep
>-- you just call swait(sem) to go to sleep if the sem <= 0, then the int
>handler calls ssignal(sem), etc.  Is there anything this
>straight-forward for Linux?

Yes. There is a semaphore type which supports sem_up() and sem_down().  I've
also written a simple mutexes and conditions library ( for 2.2.x ) you can try.
This allows you to use mutexes for exclusive access to shared data and
conditions for sleeping/waking. The cond_wait() operation lets you atomically
give up a mutex and sleep. A condition can be fired by an interrupt.
http://users.footprints.net/~kaz/lmc.html


------------------------------

From: Eric Marsden <[EMAIL PROTECTED]>
Subject: Re: where to find shared libraries HOWTO
Date: 09 Sep 1999 18:28:23 +0200

>>>>> "cs" == Christoph Schon <Christoph> writes:

  cs> could someone point me to a shared lib HOWTO or something (not
  cs> man dlopen)?

Draft chapters of a book called "Linkers and Loaders" by John Levine
are online at 

   <URL:http://www.iecc.com/linker/>

where there is a good deal of information on shared libraries.

HTH,    
-- 
Eric Marsden
It's elephants all the way down

------------------------------

From: Graffiti <[EMAIL PROTECTED]>
Crossposted-To: comp.os.linux.development.apps,comp.os.linux.misc,comp.os.linux.x
Subject: Re: Shutdown Problem
Date: 9 Sep 1999 10:20:26 -0700

In article <7r6f6h$ohh$[EMAIL PROTECTED]>,
Victor Wagner <[EMAIL PROTECTED]> wrote:
[snip]
>Try mount /tmp with noexec option. (seems sensible security precaution,
>isn't it?) and see what breaks...

Unfortunately, it's usually not executable files that's copied there.
Such things as temporary data files and the like (lynx, as).

The main problem isn't the usage of /tmp so much as *how* it's being
used.  People don't use tmpnam(), and don't change the file permission
from the umask.  So depending on your umask, world-readable files
may be created in your home directory.  And if the attacker is lucky
enough, he may be able to make you overwrite your ~/.profile have you
execute arbitrary commands the next time you log in.

>orainst breaks, but there is no problem - you don't install Oracle every
>day, so you may remount /tmp just for installing Oracle.

I can run it out of /root, ~username, etc.

>But mc breaks - it executes external viewers from .mc/ext by creating
>and running scripts in /tmp. It is much worse. 

Considering I don't run mc, that's not much of a problem for me. :-)

>So, never never run mc as root if there are another users on machine.

Rather, never run anything as root that doesn't need to be.  You'll never
know where an actively exploited bug is hiding...

-- DN

------------------------------

From: Mark Vogelsberger <[EMAIL PROTECTED]>
Subject: Re: INODE Access under kernel 2.2x
Date: Thu, 09 Sep 1999 19:25:21 +0200

[EMAIL PROTECTED] wrote:
> 
> In article <[EMAIL PROTECTED]>,
>   Mark Vogelsberger <[EMAIL PROTECTED]> wrote:
> > Hi,
> >
> > at the moment I code a module that hooks the SYS_execve system call.
> In
> > the hook I use the open() function on the file the userspace wants to
> > execute. After opening the file I use
> > the file structure supplied by the current structure to get
> information
> > on the file thats going to be executed.
> > The problem I have is, that I cannot get the inode of the file ?? I
> only
> > get the inode of the path directory (file->f_dentry->d_inode). In
> kernel
> 
> Are you sure file->f_dentry->d_inode is the inode of the path?  I've
> been blindly coding a driver assuming I could get the minor number in
> "read" from MINOR(file->f_dentry->d_inode->i_rdev)... Maybe I'm all
> wrong though.
> 
Well perhaps you got the inode of the path, but it worked for you
because i_rdev is equal for the path and the actual file in your case. I
am not sure, but as far as I know file->f_dentry->d_inode is the inode
of the path the file (described by the file structure) is in...

Perhaps some one else can comment on that ?


Thanks a lot

------------------------------


** FOR YOUR REFERENCE **

The service address, to which questions about the list itself and requests
to be added to or deleted from it should be directed, is:

    Internet: [EMAIL PROTECTED]

You can send mail to the entire list (and comp.os.linux.development.system) via:

    Internet: [EMAIL PROTECTED]

Linux may be obtained via one of these FTP sites:
    ftp.funet.fi                                pub/Linux
    tsx-11.mit.edu                              pub/linux
    sunsite.unc.edu                             pub/Linux

End of Linux-Development-System Digest
******************************

Reply via email to