On Wed, 18 Mar 2009 20:08:49 +0200 Boaz Harrosh <bharrosh@xxxxxxxxxxx> wrote: > implementation of directory and inode operations. > > * A directory is treated as a file, and essentially contains a list > of <file name, inode #> pairs for files that are found in that > directory. The object IDs correspond to the files' inode numbers > and are allocated using a 64bit incrementing global counter. > * Each file's control block (AKA on-disk inode) is stored in its > object's attributes. This applies to both regular files and other > types (directories, device files, symlinks, etc.). > > > ... > > +static inline unsigned long dir_pages(struct inode *inode) > +{ > + return (inode->i_size + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; > +} Do we need i_size_read() here? Probably not if it's always called under i_mutex. Needs checking and commenting please. > +static unsigned exofs_last_byte(struct inode *inode, unsigned long page_nr) > +{ > + unsigned last_byte = inode->i_size; > + > + last_byte -= page_nr << PAGE_CACHE_SHIFT; hm. Strange to left-shift an unsigned long and then copy it to a smaller type. Are the types here appropriately chosen? > + if (last_byte > PAGE_CACHE_SIZE) > + last_byte = PAGE_CACHE_SIZE; > + return last_byte; > +} > + > +static int exofs_commit_chunk(struct page *page, loff_t pos, unsigned len) > > ... > This all looks vaguely familiar :) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html