2008-09-09 00:04 yo 2008-09-09 00:17 ACTION starts writing encode_xattrs 2008-09-09 00:24 hmm, issue 2008-09-09 00:24 what endianness of xattr data? 2008-09-09 00:25 I suppose the filesystem does not care 2008-09-09 00:26 if the application cares, it better take care of it 2008-09-09 00:28 flips: unlink a 0 length file causes an infinite loop heh 2008-09-09 00:28 heh 2008-09-09 00:29 fixed yet? 2008-09-09 00:29 free <- [ffffdddddddddddd] 2008-09-09 00:29 bfree: block 0xffffdddddddddddd already free! 2008-09-09 00:29 free <- [ffffdddddddddddd] 2008-09-09 00:29 bfree: block 0xffffdddddddddddd already free! 2008-09-09 00:29 ACTION thinks about why that might be 2008-09-09 00:29 those dddddddd are uninited data 2008-09-09 00:29 shapor: that happens to me a lot 2008-09-09 00:29 bad 2008-09-09 00:29 you should complain more 2008-09-09 00:30 :D 2008-09-09 00:30 does tree_chop do the right thing if there is no data int he btree? 2008-09-09 00:30 hm 2008-09-09 00:30 and by 'that' I mean the infinite loop with the exact same values 2008-09-09 00:30 or is the way we're creating files in fuse broken 2008-09-09 00:31 /* let's clear out the buffer array and data and set to deadly data 0xdd */ 2008-09-09 00:31 memset(data_pool, 0xdd, max_buffers*bufsize); 2008-09-09 00:31 do you want me to fix it, or do you want to sniff first? 2008-09-09 00:31 it's deep in the poo 2008-09-09 00:32 no question its a tux3 bug 2008-09-09 00:32 i suspected fuse 2008-09-09 00:32 the d's above prove it 2008-09-09 00:32 hm 2008-09-09 00:32 should be able to reproduce easily either with tux3.c or inode.c 2008-09-09 00:33 hack the test a little 2008-09-09 00:33 starts out like this: 2008-09-09 00:33 ---- delete file ---- 2008-09-09 00:33 lookup inode 0x21, 0 + 21 2008-09-09 00:33 open_inode: found inode 0x21 2008-09-09 00:33 mode 0100666 uid 0 gid 0 root 21:1 2008-09-09 00:33 free <- [0] 2008-09-09 00:33 free <- [0] 2008-09-09 00:33 bfree: block 0x0 already free! 2008-09-09 00:33 free <- [0] 2008-09-09 00:33 bfree: block 0x0 already free! 2008-09-09 00:34 ffffdddddddddddd <- I'm surprised the allocator manages to deal with this 2008-09-09 00:34 that repeats for a while 2008-09-09 00:34 then 2008-09-09 00:34 filemap_blockio: read <0:bbbbbbbb> 2008-09-09 00:34 filemap_blockio: unmapped block bbbbbbbb 2008-09-09 00:34 free <- [ffffdddddddddddd] 2008-09-09 00:34 got to check some limits there 2008-09-09 00:34 bfree: block 0xffffdddddddddddd already free! 2008-09-09 00:34 and the loop begins 2008-09-09 00:34 it's possibly trying to treat a block of zeros a dleaf 2008-09-09 00:35 or it did a getblk where it should have done a bread 2008-09-09 00:35 something :-) 2008-09-09 00:35 is this the first tux3 bug fuse has found? 2008-09-09 00:35 think so 2008-09-09 00:36 actually, fuse found a couple bugs in dir.c 2008-09-09 00:40 ah i see 2008-09-09 00:40 so soon? 2008-09-09 00:40 reproduced the bug by adding a test case to dleaf.c 2008-09-09 00:40 and running make dleaftest 2008-09-09 00:40 your favorite file 2008-09-09 00:41 empty dleaf is the culprit 2008-09-09 00:41 and the fix? 2008-09-09 00:42 fix? 2008-09-09 00:42 its more fun to break! 2008-09-09 00:42 :P 2008-09-09 00:42 so we allocate a dleaf even for a 0 length file? 2008-09-09 00:43 that is something that will be optimized away right? 2008-09-09 00:44 143 /* 2008-09-09 00:44 144 * Reasons this dleaf truncater sucks: 2008-09-09 00:44 yes 2008-09-09 00:44 haha 2008-09-09 00:44 it will be optimized away 2008-09-09 00:44 good thing we aren't doing premature optimization 2008-09-09 00:44 very good 2008-09-09 00:45 bug wouldnt be noticed 2008-09-09 00:45 flips: were you high when you wrote this? 2008-09-09 00:45 quite 2008-09-09 00:45 konrad was complicit 2008-09-09 00:46 so what is the condition it doesn't handle? 2008-09-09 00:46 heh 2008-09-09 00:46 empty dleaf, but initialized? 2008-09-09 00:46 where did those ddddddd's come from? 2008-09-09 00:46 nah it just overflowed 2008-09-09 00:47 to some other area 2008-09-09 00:47 at first it was all zeros 2008-09-09 00:48 flips: in general how are we going to deal with corruption 2008-09-09 00:48 we need a lot more integrity checking 2008-09-09 00:48 it will slow it down 2008-09-09 00:48 yes 2008-09-09 00:48 that's life 2008-09-09 00:49 the rule is: you should be able to randomize any block and not cause an oops 2008-09-09 00:49 everything has to fail on nasty random disk data 2008-09-09 00:49 definitely 2008-09-09 00:49 filesystems are hard 2008-09-09 00:49 that can be pretty lightweight checking 2008-09-09 00:49 see dir.c 2008-09-09 00:49 very mature code 2008-09-09 00:49 has obviously gone through a lot of fixes in that regard 2008-09-09 00:50 not nice code mind you 2008-09-09 00:50 just heavily fixed 2008-09-09 00:51 so i was able to find that bug anyway 2008-09-09 00:51 because "touch file" is working in my repo :) 2008-09-09 00:52 :-) 2008-09-09 00:53 well sort-of working 2008-09-09 00:53 the mtime is wrong 2008-09-09 00:53 expected 2008-09-09 00:54 ah duh 2008-09-09 00:54 is getaatr just broken? 2008-09-09 00:54 hm 2008-09-09 00:54 could be 2008-09-09 00:54 i'm calling store_inode after setting the i_mtime 2008-09-09 00:54 er save_inode 2008-09-09 00:55 it does seem to be doing it by looking at the debug info 2008-09-09 00:55 huh, the xattr encoder seems to work 2008-09-09 00:55 you also have to set the ->present bit for the mtime 2008-09-09 00:56 I don't think anything does that for you 2008-09-09 00:58 i thought i saw something in inode.c 2008-09-09 00:58 hrm 2008-09-09 00:59 way back 2008-09-09 00:59 then it became discretionary 2008-09-09 00:59 without a test case ;-) 2008-09-09 00:59 oh 2008-09-09 00:59 tisk tisk 2008-09-09 01:12 ? 2008-09-09 01:12 encode_xattrs is functional, now for decode 2008-09-09 01:14 flips: you can pull fuse utime support + dealf bug test from me 2008-09-09 01:14 ok, need a place to decode the xattrs to 2008-09-09 01:14 hmm 2008-09-09 01:14 kay 2008-09-09 01:14 no fix yet, been dicking with the mtime issue 2008-09-09 01:14 you just want to send your cruft over? 2008-09-09 01:14 oh 2008-09-09 01:14 utime 2008-09-09 01:14 its annoying me that everything is 1969 2008-09-09 01:15 epoch 2008-09-09 01:15 we need the logic to make the timestamps default to eachother 2008-09-09 01:15 but thats not even the issue 2008-09-09 01:15 even the ctime is broken 2008-09-09 01:15 have you thought about setting up a dedicated repo for me to pull from, into which you only pull one head? 2008-09-09 01:15 or do you want your dicking around recorded for posterity ;-) 2008-09-09 01:16 theres only one head in my repo 2008-09-09 01:16 because you merged 2008-09-09 01:16 but all your merges show up over here 2008-09-09 01:16 ah, annoying 2008-09-09 01:16 why is hg such a pita 2008-09-09 01:16 unless you do that version specific pull 2008-09-09 01:16 this is supposed to just work 2008-09-09 01:16 git is identical 2008-09-09 01:17 well its not really wrong 2008-09-09 01:17 cant you cherry pick my change? 2008-09-09 01:17 yes 2008-09-09 01:17 but its time consuming 2008-09-09 01:17 should be oneliner 2008-09-09 01:17 much more efficient for you to just pull your time to a dedicated repo. that can be automatic 2008-09-09 01:17 pull your tip 2008-09-09 01:17 well 2008-09-09 01:18 not much difference 2008-09-09 01:18 try hg view 2008-09-09 01:18 you'll see all the extra stuff 2008-09-09 01:20 shapor, the times are all broken because they are never set 2008-09-09 01:20 you can see where to set them in inode.c 2008-09-09 01:20 there's a gettime available I think 2008-09-09 01:20 http://www.selenic.com/mercurial/wiki/index.cgi/CommunicatingChanges#line-63 2008-09-09 01:20 would that be easier? 2008-09-09 01:21 doesn't decode_attrs set them in struct inode? 2008-09-09 01:21 gets called in open_inode 2008-09-09 01:22 they never get set to an actual time 2008-09-09 01:23 they should now with my utime code though 2008-09-09 01:23 not sure why its not working 2008-09-09 01:23 hrm 2008-09-09 01:23 too many interfaces 2008-09-09 01:24 bah 2008-09-09 01:24 way too many 2008-09-09 01:24 inode->i_mtime = inode->i_ctime = inode->i_atime = iattr->mtime; ><- this is where to set the time 2008-09-09 01:24 in inode.c 2008-09-09 01:25 I thought some of the times were stored differently (lower resolution) 2008-09-09 01:25 brings up the question: what is the format of a tux3 time? 2008-09-09 01:25 yeah 2008-09-09 01:25 yes 2008-09-09 01:25 so, I'd like to get away from the traditional decimal encoding 2008-09-09 01:25 were the fraction is millionths or billionths 2008-09-09 01:25 and use strictly binary 2008-09-09 01:26 that means multiplying and dividing to convert to the braindamaged linux format 2008-09-09 01:26 not sure whether this is wise 2008-09-09 01:27 hrm 202 u64 i_size, i_mtime, i_ctime, i_atime; 2008-09-09 01:27 u64? 2008-09-09 01:28 that's just in the inode, the memory version 2008-09-09 01:28 on disk it gets sqzed, maybe 2008-09-09 01:28 yeah but still 2008-09-09 01:28 whats the point of u64 in memory even? 2008-09-09 01:28 u32 is too small 2008-09-09 01:28 and c doesn't play well with others 2008-09-09 01:28 so we have our own format? 2008-09-09 01:29 we have to use the linux format there 2008-09-09 01:29 when we got to kernel 2008-09-09 01:29 hm 2008-09-09 01:29 because those are in the generic part of the inode 2008-09-09 01:29 i'm getting tired 2008-09-09 01:29 I haven't divided up the inode into generic and filesystem specific parts yet 2008-09-09 01:29 i think my changes are crap, might not want to merge them 2008-09-09 01:29 they dont add much 2008-09-09 01:29 other than sort-of working touch 2008-09-09 01:29 sleep on it 2008-09-09 01:29 fly away 2008-09-09 01:29 hack onthe plane 2008-09-09 01:30 see how nicely encode_xattrs came out 2008-09-09 01:30 in iattr.c 2008-09-09 01:31 decode_xattrs is a little messier because we have to guess how big to make the cache 2008-09-09 01:31 I suppose I'd better run a size-guessing pass first to know the size for thecache 2008-09-09 02:30 -!- kbingham(~kbingham@193.132.141.186) has joined #tux3 2008-09-09 02:32 -!- MaZe(~MaZe@c-24-6-86-168.hsd1.ca.comcast.net) has joined #tux3 2008-09-09 02:52 development is going pretty well 2008-09-09 03:02 I'd say 2008-09-09 04:42 konrad, your fuse post got linked from lwn.net: http://lwn.net/Articles/297308/ 2008-09-09 04:42 jesus 2008-09-09 04:43 night 2008-09-09 04:43 night 2008-09-09 04:55 where'd that get linked from? 2008-09-09 06:31 -!- MaZe(~MaZe@c-24-6-86-168.hsd1.ca.comcast.net) has joined #tux3 2008-09-09 12:17 -!- RazvanM(~RazvanM@dazzler.isi.jhu.edu) has joined #tux3 2008-09-09 12:41 nice 2008-09-09 14:22 ACTION makes another cuppa before pulling the trigger on the "one less feature" psot 2008-09-09 14:22 post 2008-09-09 14:41 flips: by depending so much on LVM, aren't you limiting the OSs on top of tux3 can be run? What if I want to use tux3 with Solaris, FreeBSD or HP-UX? 2008-09-09 14:42 by "limiting the OSs" I mean "it will require a lot of work to make tux3 work with non-Linux OSs" 2008-09-09 14:43 they will have a lot of work anyway 2008-09-09 14:43 gpl license is incompatible with all those 2008-09-09 14:43 but if tux3 catches on in linux then they will just have to do it 2008-09-09 14:44 pgquiles, you mean to say you already read the one less feature post? 2008-09-09 14:46 ACTION thinks about making it an early sk8 day 2008-09-09 14:46 flips: yes 2008-09-09 14:47 anyway, this isn't more than people already depend on lvm 2008-09-09 14:47 ah, ok 2008-09-09 14:48 what I don't want to do is depend on an lvm built into a filesystem, maintained by a very small group of developers and used by only one application 2008-09-09 14:48 it's bad enough depending on my generic btree code ;-) 2008-09-09 14:49 :-) 2008-09-09 14:50 I'm really impressed at how much you do in so few lines of code 2008-09-09 14:50 easy when you leave out the error handling :-) 2008-09-09 14:50 well 2008-09-09 14:51 you make filesystem development sound easy, like "hey, this morning I feel like I'm going to write my filesystem" :-) 2008-09-09 14:51 trying to put some of that in too 2008-09-09 14:51 that's how I felt 6 weeks ago 2008-09-09 14:51 thought it could be prototyped in 2 weeks 2008-09-09 14:51 I was wrong 2008-09-09 14:51 looks like 8 weeks 2008-09-09 14:52 and that is only with the unexpected help of fuse 2008-09-09 14:52 and of course with the help of all the helpers 2008-09-09 14:52 are seem to be increasing exponentially 2008-09-09 14:53 who seem I mean 2008-09-09 14:54 timothy has a baby girl 2008-09-09 14:54 newborn? 2008-09-09 14:56 they are very nice while in the poop-machine age 2008-09-09 14:57 when teeth show... they cry all the time :-) 2008-09-09 14:58 newborn indeed 2008-09-09 14:58 it's worth the effort 2008-09-09 14:59 it is, indeed 2008-09-09 15:00 until they are 12 years old and start behaving like young terrorists :-D 2008-09-09 15:00 lkml is running slow today 2008-09-09 15:05 bedtime 2008-09-09 15:07 bye 2008-09-09 15:07 adios 2008-09-09 15:44 -!- kbingham(~kbingham@92.8.9.246) has joined #tux3 2008-09-09 15:44 finally showed up on lkml: http://lkml.org/lkml/2008/9/9/402 2008-09-09 15:45 "Tux3 Report: One less feature" 2008-09-09 16:15 new file 2008-09-09 16:15 xattr.c 2008-09-09 16:16 will skate first then make atom resolution actually work 2008-09-09 16:25 a quick q: is it ok to submit some patches to allow tux3 to compile on mac? :P 2008-09-09 16:34 if you can work out the license issues 2008-09-09 16:34 not sure how you'd do that 2008-09-09 16:34 compile under a linux emulator maybe 2008-09-09 16:36 I'm only interested in running tux3 in userspace 2008-09-09 16:36 does this conflict with any license? 2008-09-09 16:37 not that I know of 2008-09-09 16:38 good :D 2008-09-09 16:38 sounds like a cool project 2008-09-09 16:39 the fuse lib you link with will need to be gpl 2008-09-09 16:39 or compatible 2008-09-09 16:39 gpl v3 compatible, which is a little easier than v2 2008-09-09 16:39 I don't want to link to fuse actually 2008-09-09 16:40 directly using kernel calls is traditionally ok 2008-09-09 16:40 you're probably using libc, right? 2008-09-09 16:40 I think macos uses libc 2008-09-09 16:40 that's compatible 2008-09-09 16:40 true 2008-09-09 16:40 some things are not quite the same 2008-09-09 16:41 the libc is deeply embedded in mac 2008-09-09 16:41 I can imagine 2008-09-09 16:41 obviously, tux3 will really need forks now ;-) 2008-09-09 16:41 tux3 xattrs are intended to be forks as well 2008-09-09 16:41 one cool thing I want to accomplish to be able to run an FTP server to expose the tux3 ;-) 2008-09-09 16:42 don't be in a big rush to do that unless you are great at debugging 2008-09-09 16:42 well... I am actually attempting this for some linux fs anyway 2008-09-09 16:43 doing it also for tux3 fits well :D 2008-09-09 16:43 ftp load is fairly forgiving 2008-09-09 16:43 read mostly 2008-09-09 16:44 ok, I'd better get my skate in 2008-09-09 16:44 promised to do a tux3 university session tonight at 8 2008-09-09 16:46 amazing how many more penis extension spams I get when I am actively posting about Tux3, I wonder if there is a relation 2008-09-09 16:46 8pm? (like in 15 minutes?) 2008-09-09 16:47 ohh... the other coast 2008-09-09 16:47 right 2008-09-09 16:48 great! we have time to go home and eat till then :P 2008-09-09 16:49 do we need to review some material before showing up? :D 2008-09-09 16:50 optional 2008-09-09 16:50 if you have time, read "understanding the linux kernel" and "linux device drivers" ;-) 2008-09-09 16:50 haha 2008-09-09 16:50 understanding is on my right, the ldd is at home :P 2008-09-09 16:51 I found the "understanding..." more useful so that's why I hauled it to school 2008-09-09 16:52 linux device drivers will grow on you 2008-09-09 16:52 this 3rd edition really put some weight 2008-09-09 16:52 it's the deeper of the two 2008-09-09 16:52 lets see which edition I have 2008-09-09 16:52 LDD is the first one I got in touch actually 2008-09-09 16:52 the first edition 2008-09-09 16:52 some years ago :D 2008-09-09 16:53 3rd, and I still find it on the superficial side 2008-09-09 16:53 for fs stuff or in general? 2008-09-09 16:57 in general 2008-09-09 16:57 vfs, vm, whatever 2008-09-09 16:58 :D 2008-09-09 17:31 damn... looks like 8pm your time is about 4am in uk :S 2008-09-09 17:33 i'll have to be a passive observer in the morning :) 2008-09-09 18:46 back 2008-09-09 18:46 what's wrong with being up at 4 a.m? 2008-09-09 19:11 mmm, a little sake and sushi to get focussed 2008-09-09 19:11 -!- vcgomes(~vcgomes@li17-238.members.linode.com) has joined #tux3 2008-09-09 19:50 -!- RazvanM(~RazvanM@pool-151-196-118-156.balt.east.verizon.net) has joined #tux3 2008-09-09 19:55 who's here and awake? 2008-09-09 19:56 I am ;-) 2008-09-09 19:56 that's a quorum 2008-09-09 19:56 mmm, sake and sushi... 2008-09-09 19:57 was good 2008-09-09 19:57 well 2008-09-09 19:57 I better heat up another one 2008-09-09 19:58 ACTION is also awake 2008-09-09 19:59 got a browser ready? 2008-09-09 20:00 always... 2008-09-09 20:00 lxr? :P 2008-09-09 20:00 http://lxr.linux.no/linux <- ok, open this 2008-09-09 20:00 of course 2008-09-09 20:00 as expected 2008-09-09 20:00 -!- RalucaME(~ral@pool-151-196-118-156.balt.east.verizon.net) has joined #tux3 2008-09-09 20:00 -!- nataliep(~nataliep@72.14.224.1) has joined #tux3 2008-09-09 20:00 hi natalie 2008-09-09 20:00 hi dan 2008-09-09 20:01 max, have you met natalie? 2008-09-09 20:01 maze? 2008-09-09 20:01 flips: http://lxr.linux.no/linux <- ok, open this 2008-09-09 20:01 hmm? 2008-09-09 20:01 http://lxr.linux.no/linux+v2.6.26.5/fs/open.c#L1106 <- let's start with sys_open 2008-09-09 20:02 everybody see it? 2008-09-09 20:02 yes - we should perhaps first ask though how many people are listnening 2008-09-09 20:02 ACTION nods 2008-09-09 20:02 ACTION nods too 2008-09-09 20:02 3 is fine with me 2008-09-09 20:02 ACTION nods sagely 2008-09-09 20:02 nods :) 2008-09-09 20:03 it's logged anyway 2008-09-09 20:03 true 2008-09-09 20:03 ok, every syscall in linux starts with sys_ 2008-09-09 20:03 and continues with the name you get from man 2008-09-09 20:03 so man 2 open 2008-09-09 20:03 all it does is a little linkage 2008-09-09 20:04 then real action starts in do_sys_open 2008-09-09 20:04 so lets go there by clicking on it 2008-09-09 20:04 and click on the Function link 2008-09-09 20:04 http://lxr.linux.no/linux+v2.6.26.5/fs/open.c#L1084 2008-09-09 20:04 why isn't sys_open isn't just a call to sys_openat(AT_FDCWD, ...)? 2008-09-09 20:04 we're still in the same file 2008-09-09 20:04 good question 2008-09-09 20:05 ask al viro and add some epithet on the end ;-) 2008-09-09 20:05 can sys_* never call sys_* ? 2008-09-09 20:05 or is this something that could be cleaned up? 2008-09-09 20:05 syscalls use a weird linkage 2008-09-09 20:05 gcc and do it, but its odd 2008-09-09 20:05 can do it 2008-09-09 20:05 sys_creat calls sys_open 2008-09-09 20:05 so it could probably be replaced 2008-09-09 20:06 I open call sys_ functions from deep in kernel 2008-09-09 20:06 often 2008-09-09 20:06 let me recant 2008-09-09 20:06 syscalls _sometimes_ use a weird linkage 2008-09-09 20:06 so yes you could nest them 2008-09-09 20:06 al doesn't for no reason I know 2008-09-09 20:07 it's like "yuck, is a nasty top level entry point" 2008-09-09 20:07 gcc and do it, but its odd - what did you mean? 2008-09-09 20:07 I was rambling 2008-09-09 20:07 ;-) 2008-09-09 20:07 the weird stuff happens before we even get there 2008-09-09 20:07 in the syscall table 2008-09-09 20:08 so by the time we hit sys_* we're in pure C land? 2008-09-09 20:08 #ok, so we're in a different address space than we were a nanosceond 2008-09-09 20:08 yes 2008-09-09 20:08 usually 2008-09-09 20:08 some syscalls have strange register linkage 2008-09-09 20:08 anyway the vfs doesn't much care about that 2008-09-09 20:08 it gets away from syscall land as soon as it can 2008-09-09 20:09 what we are going to see, is a lot of messing around with user addresses 2008-09-09 20:09 because a nanosecond ago or so, we were in processor ring 3 2008-09-09 20:09 userspace 2008-09-09 20:09 now we're in ring 0 2008-09-09 20:09 different address space 2008-09-09 20:09 kind of 2008-09-09 20:10 different priveledge level 2008-09-09 20:10 that too 2008-09-09 20:10 everthing is a little different 2008-09-09 20:10 kind of like the twilight zone 2008-09-09 20:10 we're on the inside of the glass looking out now, like in that harry potter movie 2008-09-09 20:10 ok 2008-09-09 20:10 so we have to get the name for the open 2008-09-09 20:10 it's in a different address space 2008-09-09 20:11 so we do copy_from_user to get it 2008-09-09 20:11 just looking for the def of getname 2008-09-09 20:11 it's not very interesting actually 2008-09-09 20:11 it stores the name on a full page of kernel memory 2008-09-09 20:12 or it used to 2008-09-09 20:12 now I see we use a kmem cache for it 2008-09-09 20:12 http://lxr.linux.no/linux+v2.6.26.5/fs/namei.c#L141 2008-09-09 20:12 http://lxr.linux.no/linux+v2.6.26.5/include/linux/fs.h#L1615 2008-09-09 20:12 thanks 2008-09-09 20:12 and an audit hook 2008-09-09 20:13 things change around in here fairly frequently 2008-09-09 20:13 it's usually worth starting from the top in lxr every time 2008-09-09 20:13 just so you can check for details that changed 2008-09-09 20:13 by the top you mean all the way from sys_open or some other top? 2008-09-09 20:13 that audit thingy is new 2008-09-09 20:13 right 2008-09-09 20:14 like I said, getname is boring 2008-09-09 20:14 let's go back to do_ _open 2008-09-09 20:14 perhaps, another question: how much of a fs is driven by userspace triggered syscalls? 2008-09-09 20:14 nearly all of it 2008-09-09 20:14 particularly for traditional fs's 2008-09-09 20:14 new ones tend to have some daemons helping 2008-09-09 20:15 generally, the more daemons, the less reliable 2008-09-09 20:15 which are effectively kernel threads doing syscalls? 2008-09-09 20:15 not doing syscalls 2008-09-09 20:15 using internal interfaces 2008-09-09 20:15 using syscalls internally sucks, because of being in the wrong address space 2008-09-09 20:15 the syscall expects to get its data from userspace 2008-09-09 20:15 oh, right the copy_from_user stuff 2008-09-09 20:15 right 2008-09-09 20:16 anyway you're using syscalls internally, something linux is broken 2008-09-09 20:16 or you're stupid 2008-09-09 20:16 heh 2008-09-09 20:16 about 50/50 2008-09-09 20:16 the next interesting place is do_filp_open 2008-09-09 20:17 lxr is a little funky indexing some of these 2008-09-09 20:17 would do_filp_open be the kernel-internal interface to open? 2008-09-09 20:18 factoring is a little arbitrary 2008-09-09 20:18 [ie. would this be what you would call from above mentioned kernel threads/daemons?] 2008-09-09 20:18 it's another helper that happens to do almost all the work 2008-09-09 20:18 yes you can 2008-09-09 20:18 if its not static, then something is using it 2008-09-09 20:18 often something bogus 2008-09-09 20:18 something external that is 2008-09-09 20:18 not statie = part of kernel api 2008-09-09 20:19 often unwisely ;-) 2008-09-09 20:19 http://lxr.linux.no/linux+v2.6.26.5/fs/namei.c#L1761 2008-09-09 20:19 I wish lxr was smarter about finding defs of extern functions 2008-09-09 20:19 I went to usage, then to the first reference onthe list 2008-09-09 20:19 now things are happening 2008-09-09 20:20 [actually filp_open seems to be the kernel-interface, not that it much matters] 2008-09-09 20:20 that is true 2008-09-09 20:20 see "arbitrary factoring" above 2008-09-09 20:20 it's kind of a pile is some ways ;-) 2008-09-09 20:20 in other ways it's beautiful 2008-09-09 20:20 only about 3 of those ;-) 2008-09-09 20:21 we'll get to some scary code now 2008-09-09 20:21 do_filp_open is pretty big... 2008-09-09 20:21 path_lookup_open 2008-09-09 20:22 it;'s big because it's implementing all of unix semantics + all of linux semantics + historical cruft + arcane voodooism nobody is quite sure about 2008-09-09 20:22 http://lxr.linux.no/linux+v2.6.26.5/fs/namei.c#L1238 2008-09-09 20:23 so the vfs layer does permissions checking... not the fs itself? 2008-09-09 20:23 we're going to stay away from path lookup to avoid brain damage 2008-09-09 20:23 that is correct 2008-09-09 20:23 the vfs checks permissions and does a lot of locking too 2008-09-09 20:23 also implements the namespace caching 2008-09-09 20:23 it does a huge amount of work 2008-09-09 20:24 what's namespace caching? 2008-09-09 20:24 dentry cache 2008-09-09 20:24 every time you open a file, linux creates a dentry for the name 2008-09-09 20:24 that lives in cache 2008-09-09 20:24 dentry points at inode 2008-09-09 20:24 so what does the dentry cache map between? 2008-09-09 20:24 dentries are pretty big, inodes are pretty big memory structures too 2008-09-09 20:25 filename and inode (possibly lack of inode)? 2008-09-09 20:25 the dentry maps filename -> inode 2008-09-09 20:25 in cache 2008-09-09 20:25 does filename include full path? 2008-09-09 20:25 only when tere is a miss in the dentry cache does the vfs go to the filesystem 2008-09-09 20:25 no, not the full path 2008-09-09 20:25 Important sizes: 2008-09-09 20:25 block 1024 2008-09-09 20:25 inode 300 2008-09-09 20:25 dentry 128 2008-09-09 20:25 bh 56 2008-09-09 20:25 kmem_cache 12 2008-09-09 20:25 the parent inode and the filename 2008-09-09 20:25 relative to the fs root? 2008-09-09 20:25 ah 2008-09-09 20:25 razvanm, nice 2008-09-09 20:26 flips might want to correct me ;-) 2008-09-09 20:26 so every time you open a file, you get a dentry+inode+file 2008-09-09 20:26 already a lot of cache memory 2008-09-09 20:26 for a tiny thing maybe 2008-09-09 20:26 with 6 btyes in it echo hello >foo 2008-09-09 20:26 oh thats why it gets pretty big 2008-09-09 20:27 it's only the beginning 2008-09-09 20:27 among other slabs 2008-09-09 20:27 you also get an "address_space" for the inode 2008-09-09 20:27 misnamed 2008-09-09 20:27 that is the radix tree 2008-09-09 20:27 so if the file is opened, the dentry + inode are locked in cache? 2008-09-09 20:27 yes 2008-09-09 20:27 and the whole chain of parents 2008-09-09 20:27 up to the superblock of the fs 2008-09-09 20:27 not locked 2008-09-09 20:28 they can be evicted 2008-09-09 20:28 usage count increased? 2008-09-09 20:28 only until the inode goes away 2008-09-09 20:28 sorry 2008-09-09 20:28 you've lost me then. 2008-09-09 20:28 the inode's use count is elevated 2008-09-09 20:28 until the dentry goes away 2008-09-09 20:28 it's about the nastiest part of the whole vfs 2008-09-09 20:28 and we're here already 2008-09-09 20:29 so dentries can come and go as they please? 2008-09-09 20:29 what happens is, dentries spend a lot of their life sitting around in cache with zero use count 2008-09-09 20:29 that's what happens if you open a file, do something, and close it 2008-09-09 20:29 $ cat /proc/slabinfo | egrep 'dentry|#' 2008-09-09 20:29 # name : tunables : slabdata 2008-09-09 20:29 dentry 253015 253576 132 29 1 : tunables 120 60 8 : slabdata 8744 8744 0 2008-09-09 20:29 only when the vm comes along and tries to shrink the caches to recover memory do the dentries and inodes go away 2008-09-09 20:29 note 132 2008-09-09 20:30 yes, something ahs been pushing stuff out 2008-09-09 20:30 it changes from time to time 2008-09-09 20:30 these days, linux pushes too much cache out at the wrong times 2008-09-09 20:30 you will notice that if you run on a slow machine 2008-09-09 20:30 see, this is the real vfs course ;-) 2008-09-09 20:31 ok, lifetime of objects in cache is one of the biggest touchy spots in linux 2008-09-09 20:31 it's often very hard to know what owns what 2008-09-09 20:31 there's no way to tell the vfs you're doing a bg filesystem scan and to not cache for eternity? 2008-09-09 20:31 and yet, you have to when you work on fs code 2008-09-09 20:32 there are various ways to tell it that 2008-09-09 20:32 good ways is another question 2008-09-09 20:32 we have the concept of hot and cold ends of lru list 2008-09-09 20:32 when something is gets accessed, it gets moved to the hot end 2008-09-09 20:32 and stuff is evicted from the cold end 2008-09-09 20:32 in theory 2008-09-09 20:32 in practice... well 2008-09-09 20:33 linux has been benchmarked as worse than random replacement policy 2008-09-09 20:33 somebody needs to go in and fix that 2008-09-09 20:33 so a queue basically 2008-09-09 20:33 the only way i'm aware of to inform the kernel about your intentions is posix_fadvise, and that doesnt let you do much 2008-09-09 20:33 a lru list, yes 2008-09-09 20:33 acts like a queue 2008-09-09 20:33 certainly nothing related to dentries 2008-09-09 20:33 old stuff is supposed to move down to the cold end and get evicted 2008-09-09 20:34 shapor, though you were on a plane 2008-09-09 20:34 just a sec 2008-09-09 20:34 not yet 2008-09-09 20:34 back 2008-09-09 20:34 is there one global dentry cache? per cpu? per socket? per fs? per inode? 2008-09-09 20:34 ok, we're not doing vm 2008-09-09 20:34 this is vfs ;-) 2008-09-09 20:34 is global, right? :P 2008-09-09 20:34 there is one global dentry cache 2008-09-09 20:35 it is indexed by fs*dir*name 2008-09-09 20:35 so it acts like one per fs 2008-09-09 20:35 so it maps superblock:inode:filename -> inode? 2008-09-09 20:35 the only way i know of purging it is umount(), right flips? 2008-09-09 20:35 yes 2008-09-09 20:35 in general,yes 2008-09-09 20:35 there are internal interfaces for purging 2008-09-09 20:36 a fs has access to that 2008-09-09 20:36 but almost nobody understands how to use that or cares to find out 2008-09-09 20:36 if you get it wrong, al will bark at you 2008-09-09 20:36 aren't we wasting a lot of memory by continuously keeping the 'fs' in there? most systems don't have that many mounted filesystems 2008-09-09 20:36 we waste huge buckets of memory 2008-09-09 20:37 yes, linux is a little special in this regard 2008-09-09 20:37 dentry cache is a linux only thing 2008-09-09 20:37 it gives a performance advantage in general 2008-09-09 20:37 but it uses massive gobs of memory 2008-09-09 20:37 it's tricky 2008-09-09 20:38 you can always print out the path a file was opened by 2008-09-09 20:38 other OSs doesn't cache the dentries? 2008-09-09 20:38 by following parent links in the dentry cache 2008-09-09 20:38 I don't think other os's have dentries? 2008-09-09 20:38 I'm not _that_ familiar with bsd etc 2008-09-09 20:38 but I think not 2008-09-09 20:38 earlier you'd said the dentries could be evicted? 2008-09-09 20:38 the above gets interesting when the namespace topology is changing while you follow links 2008-09-09 20:39 they can 2008-09-09 20:39 let's go find the dentry cache 2008-09-09 20:39 so how does that match up with being able to follow the parent links in the dentry cache? 2008-09-09 20:39 2008-09-09 20:40 hmm, no dentry.c 2008-09-09 20:40 http://lxr.linux.no/linux+v2.6.26.5/include/linux/dcache.h#L81 2008-09-09 20:40 there's a dcache.h 2008-09-09 20:41 ok, namei.c is the home of the dentry cache 2008-09-09 20:41 inconsistent naming 2008-09-09 20:42 struct dentry is defined in dcache.h though 2008-09-09 20:42 in general in linux, you want to be looking for "get" and "put" operations 2008-09-09 20:42 get means in object count, put means dec 2008-09-09 20:42 strange terminology, made in linux I think 2008-09-09 20:43 dache.c 2008-09-09 20:43 http://lxr.linux.no/linux+v2.6.26.5/fs/dcache.c 2008-09-09 20:43 so, dput 2008-09-09 20:43 http://lxr.linux.no/linux+v2.6.26.5/fs/dcache.c#L185 2008-09-09 20:44 big mess 2008-09-09 20:44 but you have to get familiar with it 2008-09-09 20:44 we also have iput, drop usage count of an inode 2008-09-09 20:45 is this too much down inthe nitty gritty? 2008-09-09 20:45 nope 2008-09-09 20:45 speaking for myself only of course - but the nitty gritty is always what I failed to grasp 2008-09-09 20:45 figuring out how an inode gets released is challenging 2008-09-09 20:46 look at iput, then iput_final 2008-09-09 20:46 http://lxr.linux.no/linux+v2.6.26.5/fs/inode.c#L1149 2008-09-09 20:46 generally, if the fs does not want to take care of something, the vfs will do it for it 2008-09-09 20:46 this is the case in iput_final 2008-09-09 20:47 normally, inodes are dropped by generic_drop_inode 2008-09-09 20:47 there we see some classic unix 2008-09-09 20:48 the decision whether to delete an unlinked inode or not 2008-09-09 20:48 by this time, the dentry is long gone 2008-09-09 20:48 so is the directory entry, if i_nlink is zero 2008-09-09 20:48 we're nearly done for today 2008-09-09 20:49 I'm a little surpised by the fact than op can be null.. 2008-09-09 20:49 hour is coming up 2008-09-09 20:49 we still have 10 more minutes! :D 2008-09-09 20:49 the op can be null because the vfs does it in that case 2008-09-09 20:49 I'm going to answer questions for the next 10 minutes 2008-09-09 20:49 ACTION was about to ask about about deleting a directory 2008-09-09 20:50 so you than have a null op in the superblock operations and instead have it handled through such if statements all over the place? 2008-09-09 20:50 ok, let's go look a file_operations 2008-09-09 20:50 that seems like very non-OO 2008-09-09 20:50 maze, correy 2008-09-09 20:50 correct 2008-09-09 20:50 it's oo linux style 2008-09-09 20:50 very few linux hackers known any oo language 2008-09-09 20:50 is there a reason for that? that also seems worse performance wise... 2008-09-09 20:51 since we then have the if instead of just calling the method 2008-09-09 20:51 it doesn't cost much cpu 2008-09-09 20:51 it's sloppy 2008-09-09 20:51 and looks ugly 2008-09-09 20:51 and is inconsistent 2008-09-09 20:51 it's another branch that can be mispreditcted though 2008-09-09 20:51 every operation has its own custom way of doing things, usually 2008-09-09 20:51 if the branch matters, we tell the compiler not to mispredict 2008-09-09 20:52 ugh... 2008-09-09 20:52 see "likely/uinlikely" 2008-09-09 20:52 unlikely 2008-09-09 20:52 yeah, I know 2008-09-09 20:52 the inefficiencies here are somewhat covered up by the fact that there are slow disks underneath 2008-09-09 20:52 and then, it's not really inefficient 2008-09-09 20:53 the stuff that _can_ cost lots of cpu has been profiled and fixed long ago 2008-09-09 20:53 ok, so it's just disgusting and extra code complexity ;-) 2008-09-09 20:53 these days, it costs a lot more to contend a spinlock than mispredict a branch 2008-09-09 20:53 yes, it's fairly disgusting 2008-09-09 20:53 one never learns to love it ;-) 2008-09-09 20:53 respect it, yes 2008-09-09 20:54 it does a lot, has a huge amount of flexibility 2008-09-09 20:54 ok, there was a question 2008-09-09 20:54 let's go look at how ext2 deletes a directory 2008-09-09 20:54 is stuff like this not fixable? 2008-09-09 20:54 right, delete a directory. 2008-09-09 20:54 the right person could fix it 2008-09-09 20:54 you have to have memorized stevens 2008-09-09 20:55 and you have to like fighting in pig shit 2008-09-09 20:55 do you llike fighting in pig shit? 2008-09-09 20:55 because you have some of the other qualifications ;-) 2008-09-09 20:56 I have a tendency to fight uphill battles, yes. 2008-09-09 20:56 http://lxr.linux.no/linux+v2.6.26.5/fs/ext2/namei.c#L275 <- ext2_rmdir 2008-09-09 20:56 pretty easy to read 2008-09-09 20:56 and write for that matter 2008-09-09 20:56 I didn't say uphill ;-) 2008-09-09 20:56 it's not a hill 2008-09-09 20:57 it's a ditch at the bottom of the farm 2008-09-09 20:57 flips: ack 2008-09-09 20:57 ah, but sh*t flows downhill, and if you're at the bottom 2008-09-09 20:57 stevens - which book is that referring to? 2008-09-09 20:57 when I asked the question I did not remember that the OS will refuse to delete a non-empty dir :P 2008-09-09 20:57 ext2_rmdir is plugged into this thing: http://lxr.linux.no/linux+v2.6.26.5/fs/ext2/namei.c#L376 2008-09-09 20:57 and *_operations structure 2008-09-09 20:58 passes for an instance of a class in linux 2008-09-09 20:58 Advanced Programming in the UNIX Environment, Addison-Wesley, 1992. 2008-09-09 20:59 ok, now that we have found what ext2_rmdir is plugged into, we can follow it back up into the vfs 2008-09-09 20:59 clock on ext2_dir_inode_operations 2008-09-09 21:00 sorry 2008-09-09 21:00 clock on inode_operations 2008-09-09 21:00 http://lxr.linux.no/linux+v2.6.26.5/include/linux/fs.h#L1250 2008-09-09 21:00 then usage 2008-09-09 21:01 lxr is spinning 2008-09-09 21:01 this is the slowest operations... 2008-09-09 21:01 yes, and 3 doing it at the same time is enough to bring it to its knees 2008-09-09 21:01 apparently 2008-09-09 21:02 actually, I would say is as slow as usual 2008-09-09 21:02 as you can see, this is a popular struct 2008-09-09 21:02 true 2008-09-09 21:02 your are looking for the instances that are _not_ in a specific filesystem 2008-09-09 21:03 fs/namei.c, line 2971 2008-09-09 21:03 for example 2008-09-09 21:03 whoops, not interesting 2008-09-09 21:03 bad_inode.c inode.c libfs.c 2008-09-09 21:03 razvanm probably had the right idea 2008-09-09 21:04 yes, inode.c is good 2008-09-09 21:04 http://lxr.linux.no/linux+v2.6.26.5/fs/inode.c#L114 2008-09-09 21:05 uhh... we're 5 minutes over time :P 2008-09-09 21:05 ACTION says big thanks! 2008-09-09 21:05 ;-) 2008-09-09 21:05 yep 2008-09-09 21:05 so homework: 2008-09-09 21:05 find out were inode_operations->rmdir is called 2008-09-09 21:06 it isn't spelled that way 2008-09-09 21:06 this is what makes linux fun ;-) 2008-09-09 21:06 very little is spelled the way you would expect 2008-09-09 21:06 :D 2008-09-09 21:06 ok, did we have fun today? 2008-09-09 21:06 that was awesome, too short :) thanks to all... i love the format of this class :) 2008-09-09 21:06 ACTION did had fun :-) 2008-09-09 21:07 thanks natalie :-) 2008-09-09 21:07 thanx flips, was cool 2008-09-09 21:07 the most important item is how to navigate lxr 2008-09-09 21:07 welcome, ralucame 2008-09-09 21:07 ACTION is RalucaME's twin ;-) 2008-09-09 21:07 :) 2008-09-09 21:07 where it's called from outside of fs'es? or within? 2008-09-09 21:08 way too short - agreed. 2008-09-09 21:08 at this rate we'll need more than a few of these ;-) 2008-09-09 21:08 Thanks! 2008-09-09 21:08 aha 2008-09-09 21:08 from the vfs 2008-09-09 21:08 that is, outside the fs 2008-09-09 21:08 things eventually start to fit a pattern 2008-09-09 21:09 and you don't need me to suggest how to follow the twisty paths any more 2008-09-09 21:09 at first it looks like random gibberish 2008-09-09 21:09 then later, you learn it is actually random gibberish 2008-09-09 21:09 :-) 2008-09-09 21:09 but it is fast and flexible gibberish 2008-09-09 21:09 flips: i_op->rmdir ? 2008-09-09 21:10 sounds good 2008-09-09 21:10 ups ;-) 2008-09-09 21:10 aww 2008-09-09 21:10 I personally always spell my ops "ops" 2008-09-09 21:10 makes it much easier to navitage 2008-09-09 21:10 so you look for ops->rmdir and you always find it 2008-09-09 21:11 the code was "inode->i_op = &empty_iops;" in alloc_inode 2008-09-09 21:11 boring 2008-09-09 21:11 haven't found the real one nwo 2008-09-09 21:11 yet I mean 2008-09-09 21:12 http://lxr.linux.no/linux+v2.6.26.5/fs/namei.c#L2256 2008-09-09 21:13 that's it 2008-09-09 21:13 gold star 2008-09-09 21:14 :P 2008-09-09 21:16 oh, lol 2008-09-09 21:16 more homework? 2008-09-09 21:16 and I just sent it via pm 2008-09-09 21:16 figure out how a struct inode gets deleted ;-) 2008-09-09 21:17 ACTION will do pm next time 2008-09-09 21:17 wild guess: iput gets called? 2008-09-09 21:17 thursday again ok? 2008-09-09 21:17 at 8pm? 2008-09-09 21:17 maze, that's a good first order approximation 2008-09-09 21:17 yes 2008-09-09 21:17 sounds good 2008-09-09 21:18 see you then! 2008-09-09 21:19 cu 2008-09-09 21:41 -!- nataliep(~nataliep@72.14.224.1) has left #tux3 2008-09-09 22:09 -!- pranith(~ca4bcee2@66.90.73.223) has joined #tux3 2008-09-09 22:14 -!- pranith(~ca4bcee2@66.90.73.223) has joined #tux3 2008-09-09 22:15 hello 2008-09-09 22:15 anyone here? 2008-09-09 22:21 hi 2008-09-09 22:23 hi flips 2008-09-09 22:23 what's up? 2008-09-09 22:23 are u daniel phillips? 2008-09-09 22:23 yes 2008-09-09 22:24 ok, i mailed you yesterday about tux3 :) 2008-09-09 22:24 I remember 2008-09-09 22:24 welcome to #tux3 2008-09-09 22:24 thank you :) 2008-09-09 22:24 have you been reading the mailing list archives? 2008-09-09 22:24 hmm, not much actually 2008-09-09 22:25 that is a very good place to start 2008-09-09 22:25 im joining it now.. 2008-09-09 22:25 http://tux3.org/pipermail/tux3/ 2008-09-09 22:26 ok 2008-09-09 22:28 flips, any particular mail you want me to start with? 2008-09-09 22:28 any order 2008-09-09 22:28 just poke around until you find one that interests yhou 2008-09-09 22:29 and follow the thread 2008-09-09 22:29 see what people are doing 2008-09-09 22:29 the fuse stuff is very interesting 2008-09-09 22:29 ok 2008-09-09 22:35 excellent ramen 2008-09-09 22:35 that japanese store wasn't kidding when they said it was "a little spicy" 2008-09-09 22:36 hmm 2008-09-09 22:46 flips, do u think i need to have some background about file systems to start with? 2008-09-09 22:46 always helpful 2008-09-09 22:46 as i mentioned, i've just recently started going throught the design book... 2008-09-09 22:46 there is a lot written on it 2008-09-09 22:47 a linux specific book would be good too 2008-09-09 22:47 I never read the beos book 2008-09-09 22:47 or any book on filesystem design ;-) 2008-09-09 22:47 i couldn't find any linux specific os book :( 2008-09-09 22:47 filesystem* 2008-09-09 22:47 "understanding the linux kernel" 2008-09-09 22:47 probably best for this 2008-09-09 22:48 for filesystems? 2008-09-09 22:48 wikipedia is good too 2008-09-09 22:48 yes 2008-09-09 22:48 ok 2008-09-09 22:48 http://www.yolinux.com/TUTORIALS/LinuxClustersAndFileSystems.html 2008-09-09 22:48 any concepts i need to pay particular attention to? 2008-09-09 22:48 vfs 2008-09-09 22:48 locking 2008-09-09 22:48 struct bio 2008-09-09 22:49 struct page 2008-09-09 22:49 struct inode 2008-09-09 22:49 struct dentry 2008-09-09 22:49 struct buffer_head 2008-09-09 22:50 http://en.wikipedia.org/wiki/Filesystem 2008-09-09 22:50 http://en.wikipedia.org/wiki/Ext2 2008-09-09 22:50 http://en.wikipedia.org/wiki/Ext3 2008-09-09 22:51 http://en.wikipedia.org/wiki/Journaling_file_system 2008-09-09 22:51 http://en.wikipedia.org/wiki/Comparison_of_file_systems 2008-09-09 22:51 http://en.wikipedia.org/wiki/ACID 2008-09-09 22:51 <- very important 2008-09-09 22:51 hmm, ACID? first time i'm hearing about this 2008-09-09 22:52 it is the most important concept of all 2008-09-09 22:52 ohk, i knew abt these. just never heard the term ACID :) 2008-09-09 22:53 knew in the sense, i heard abt them. not "know" knowing :) 2008-09-09 22:53 need to memorize those concepts 2008-09-09 22:53 ok 2008-09-09 23:14 feh I just got bitten by the stupid ext2 convention than zero inode means deleted entry 2008-09-09 23:14 what's the matter with having an inode numbered zero again? 2008-09-09 23:14 zero inode? 2008-09-09 23:14 inum = 0 2008-09-09 23:15 hmm 2008-09-09 23:15 that's what ext2 uses to determine a dirent is deleted 2008-09-09 23:15 a little better than DOS, which sets the first character of the filename to 'e' 2008-09-09 23:15 but not much 2008-09-09 23:16 why not rely on name_len = zero instead? 2008-09-09 23:16 dumb 2008-09-09 23:16 I might change that for tux3 2008-09-09 23:16 u better do :) 2008-09-09 23:17 can't call it ext2_create_entry any more then ;-) 2008-09-09 23:17 so far it's exactly compatible 2008-09-09 23:17 but this is annoying 2008-09-09 23:18 I think I will at least create an is_deleted macro 2008-09-09 23:18 everywhere it relies on inum = 0 2008-09-09 23:18 might sound stupid, but i dont know.. whats the need for a deleted dirent? 2008-09-09 23:18 so you can recover the space to use for some other filename 2008-09-09 23:19 isn't that recovered during deletion time? 2008-09-09 23:19 that's the code I'm working on 2008-09-09 23:20 oh! :) 2008-09-09 23:20 and inum is what? the number of inodes? 2008-09-09 23:22 static inline int is_deleted(ext2_dirent *dirent) 2008-09-09 23:22 { 2008-09-09 23:22 return !dirent->inum; 2008-09-09 23:22 } 2008-09-09 23:23 hmm 2008-09-09 23:23 thats nice 2008-09-09 23:45 -!- cdk(~chinmay@121.246.36.139) has joined #tux3 2008-09-09 23:46 can now find/create xattr atoms in the atom table 2008-09-09 23:46 enough for today 2008-09-09 23:48 sleeping? 2008-09-09 23:50 soon 2008-09-09 23:57 which place? 2008-09-09 23:59 santa monica, CA 2008-09-09 23:59 and you?