From: Ben O. <ben...@us...> - 2002-02-10 21:59:27
|
Update of /cvsroot/njbfs/njbfs In directory usw-pr-cvs1:/tmp/cvs-serv22292 Modified Files: automount.c cache.c dir.c driver.c file.c inode.c njb_usb.c njbfs.h njbfs_cache.h njbfs_proc.h nomad.c nomad_usb.h playlist.c playlist.h proc.c symlink.c track.c track.h Log Message: run indent -kr -i 8 on the whole shebang Index: automount.c =================================================================== RCS file: /cvsroot/njbfs/njbfs/automount.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** automount.c 4 Nov 2001 13:46:00 -0000 1.1.1.1 --- automount.c 10 Feb 2002 21:59:23 -0000 1.2 *************** *** 26,40 **** #include <string.h> ! int main(int argc, char **argv){ ! char *virtualdirectory; /* "tracks", "playlists", "artists", "albums" */ if ((argc < 2) || ! (strcmp("tracks", argv[1]) && ! strcmp("playlists", argv[1]) && ! strcmp("artists", argv[1]) && ! strcmp("albums", argv[1])) ) { ! fprintf(stderr, "Need virtual directory name here: 'tracks', 'playlists', 'albums' or 'artists'\n"); exit(-1); } --- 26,41 ---- #include <string.h> ! int main(int argc, char **argv) ! { ! char *virtualdirectory; /* "tracks", "playlists", "artists", "albums" */ if ((argc < 2) || ! (strcmp("tracks", argv[1]) && ! strcmp("playlists", argv[1]) && ! strcmp("artists", argv[1]) && strcmp("albums", argv[1]))) { ! fprintf(stderr, ! "Need virtual directory name here: 'tracks', 'playlists', 'albums' or 'artists'\n"); exit(-1); } *************** *** 44,46 **** return 0; } - --- 45,46 ---- Index: cache.c =================================================================== RCS file: /cvsroot/njbfs/njbfs/cache.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** cache.c 4 Dec 2001 21:09:31 -0000 1.3 --- cache.c 10 Feb 2002 21:59:23 -0000 1.4 *************** *** 39,47 **** #define dir_cache info->cache ! void njbfs_cache_init(struct njbfs_sb_info *info){ memset(&dir_cache, 0, sizeof(struct njbfs_dir_cache)); } ! unsigned long njbfs_cache_hash(char *name){ unsigned long hash = 0; int i; --- 39,49 ---- #define dir_cache info->cache ! void njbfs_cache_init(struct njbfs_sb_info *info) ! { memset(&dir_cache, 0, sizeof(struct njbfs_dir_cache)); } ! unsigned long njbfs_cache_hash(char *name) ! { unsigned long hash = 0; int i; *************** *** 56,63 **** struct njbfs_dirlist_node *p, *q; ! if (!n) return -1; for (p = n->directory.head; p != NULL; p = q) { q = p->next; ! if(p->entry.name != NULL){ kfree(p->entry.name); p->entry.name = NULL; --- 58,66 ---- struct njbfs_dirlist_node *p, *q; ! if (!n) ! return -1; for (p = n->directory.head; p != NULL; p = q) { q = p->next; ! if (p->entry.name != NULL) { kfree(p->entry.name); p->entry.name = NULL; *************** *** 67,73 **** kfree(n->directory.name); ! if(n->prev != NULL) n->prev->next = n->next; ! if(n->next != NULL) n->next->prev = n->prev; return 0; --- 70,76 ---- kfree(n->directory.name); ! if (n->prev != NULL) n->prev->next = n->next; ! if (n->next != NULL) n->next->prev = n->prev; return 0; *************** *** 75,79 **** int njbfs_cache_infront(unsigned long hsh, struct njbfs_hashlist_node *n, ! struct njbfs_sb_info *info) { unsigned long h; --- 78,82 ---- int njbfs_cache_infront(unsigned long hsh, struct njbfs_hashlist_node *n, ! struct njbfs_sb_info *info) { unsigned long h; *************** *** 101,105 **** struct njbfs_hashlist_node *p; ! if (dir_cache.len[hsh] == 0) return -1; for (p = dir_cache.hash[hsh]; p->next != NULL; p = p->next); njbfs_cache_deldir(p); --- 104,109 ---- struct njbfs_hashlist_node *p; ! if (dir_cache.len[hsh] == 0) ! return -1; for (p = dir_cache.hash[hsh]; p->next != NULL; p = p->next); njbfs_cache_deldir(p); *************** *** 109,113 **** } ! int njbfs_cache_add(struct njbfs_sb_info *info, char *name, struct njbfs_directory **dir) { unsigned long hsh; --- 113,118 ---- } ! int njbfs_cache_add(struct njbfs_sb_info *info, char *name, ! struct njbfs_directory **dir) { unsigned long hsh; *************** *** 119,123 **** while (dir_cache.len[hsh] >= NJBFS_CACHE_LEN) njbfs_cache_shrink(hsh, info); ! p = (struct njbfs_hashlist_node *)kmalloc(sizeof(struct njbfs_hashlist_node), GFP_KERNEL); if (!p) { res = -1; --- 124,130 ---- while (dir_cache.len[hsh] >= NJBFS_CACHE_LEN) njbfs_cache_shrink(hsh, info); ! p = ! (struct njbfs_hashlist_node *) ! kmalloc(sizeof(struct njbfs_hashlist_node), GFP_KERNEL); if (!p) { res = -1; *************** *** 129,133 **** p->directory.valid = 1; p->directory.time = CURRENT_TIME; ! p->directory.name = (char*)kmalloc(strlen(name) + 1, GFP_KERNEL); if (!p->directory.name) { err("kmalloc error!"); --- 136,140 ---- p->directory.valid = 1; p->directory.time = CURRENT_TIME; ! p->directory.name = (char *) kmalloc(strlen(name) + 1, GFP_KERNEL); if (!p->directory.name) { err("kmalloc error!"); *************** *** 137,141 **** strcpy(p->directory.name, name); ! info("cache_add: loading directory '%s'....", name); if ((res = njbfs_loaddir(info, name, &p->directory)) < 0) { err("cache_add: couldn't load directory"); --- 144,148 ---- strcpy(p->directory.name, name); ! info("cache_add: loading directory '%s'....", name); if ((res = njbfs_loaddir(info, name, &p->directory)) < 0) { err("cache_add: couldn't load directory"); *************** *** 151,163 **** *dir = &p->directory; return 0; ! out2: kfree(p->directory.name); ! out1: kfree(p); ! out: return res; } ! int njbfs_cache_get(struct njbfs_sb_info *info, char *name, struct njbfs_directory **dir) { struct njbfs_hashlist_node *p; --- 158,171 ---- *dir = &p->directory; return 0; ! out2: kfree(p->directory.name); ! out1: kfree(p); ! out: return res; } ! int njbfs_cache_get(struct njbfs_sb_info *info, char *name, ! struct njbfs_directory **dir) { struct njbfs_hashlist_node *p; *************** *** 166,173 **** hsh = njbfs_cache_hash(name); for (p = dir_cache.hash[hsh]; p != NULL; p = p->next) ! if ((strcmp(name, p->directory.name) == 0)&&(p->directory.valid)) { ! if(CURRENT_TIME - p->directory.time > NJBFS_CACHE_TTL) { ! /* entry too old */ ! //return njbfs_cache_add(info, name, dir); } njbfs_cache_infront(hsh, p, info); --- 174,183 ---- hsh = njbfs_cache_hash(name); for (p = dir_cache.hash[hsh]; p != NULL; p = p->next) ! if ((strcmp(name, p->directory.name) == 0) ! && (p->directory.valid)) { ! if (CURRENT_TIME - p->directory.time > ! NJBFS_CACHE_TTL) { ! /* entry too old */ ! //return njbfs_cache_add(info, name, dir); } njbfs_cache_infront(hsh, p, info); *************** *** 176,185 **** } ! return njbfs_cache_add(info, name, dir); } int njbfs_cache_empty(struct njbfs_sb_info *info) { ! int i,j; struct njbfs_hashlist_node *p; --- 186,195 ---- } ! return njbfs_cache_add(info, name, dir); } int njbfs_cache_empty(struct njbfs_sb_info *info) { ! int i, j; struct njbfs_hashlist_node *p; *************** *** 196,200 **** { struct super_block *sb = dentry->d_inode->i_sb; ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; struct njbfs_hashlist_node *p; --- 206,211 ---- { struct super_block *sb = dentry->d_inode->i_sb; ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; struct njbfs_hashlist_node *p; *************** *** 210,212 **** } } - --- 221,222 ---- Index: dir.c =================================================================== RCS file: /cvsroot/njbfs/njbfs/dir.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** dir.c 4 Dec 2001 21:09:31 -0000 1.2 --- dir.c 10 Feb 2002 21:59:23 -0000 1.3 *************** *** 36,86 **** #include "njbfs_proc.h" ! static int njbfs_lookup_validate(struct dentry*, int); ! static int njbfs_hash_dentry(struct dentry*, struct qstr*); ! static int njbfs_compare_dentry(struct dentry*, struct qstr*, struct qstr*); ! static int njbfs_delete_dentry(struct dentry*); static struct dentry_operations njbfs_dentry_operations = { ! d_revalidate: njbfs_lookup_validate, ! d_hash: njbfs_hash_dentry, ! d_compare: njbfs_compare_dentry, ! d_delete: njbfs_delete_dentry, }; ! static int njbfs_readdir(struct file*, void*, filldir_t); ! static int njbfs_dir_open(struct inode*, struct file*); ! static struct dentry *njbfs_lookup(struct inode*, struct dentry*); ! static int njbfs_mkdir(struct inode*, struct dentry*, int); ! static int njbfs_create(struct inode*, struct dentry*, int); ! static int njbfs_rmdir(struct inode*, struct dentry*); ! static int njbfs_rename(struct inode*, struct dentry*, struct inode*, struct dentry*); ! static int njbfs_unlink(struct inode*, struct dentry*); ! struct file_operations njbfs_dir_operations = { ! read: generic_read_dir, ! readdir: njbfs_readdir, ! open: njbfs_dir_open, }; struct inode_operations njbfs_dir_inode_operations = { ! create: njbfs_create, ! lookup: njbfs_lookup, ! unlink: njbfs_unlink, ! mkdir: njbfs_mkdir, ! rmdir: njbfs_rmdir, ! rename: njbfs_rename, }; ! static int ! njbfs_lookup_validate(struct dentry* dentry, int flags) { struct inode *inode = dentry->d_inode; int valid = 0; ! if(inode){ lock_kernel(); ! if(is_bad_inode(inode)) valid = 0; unlock_kernel(); --- 36,87 ---- #include "njbfs_proc.h" ! static int njbfs_lookup_validate(struct dentry *, int); ! static int njbfs_hash_dentry(struct dentry *, struct qstr *); ! static int njbfs_compare_dentry(struct dentry *, struct qstr *, ! struct qstr *); ! static int njbfs_delete_dentry(struct dentry *); static struct dentry_operations njbfs_dentry_operations = { ! d_revalidate:njbfs_lookup_validate, ! d_hash:njbfs_hash_dentry, ! d_compare:njbfs_compare_dentry, ! d_delete:njbfs_delete_dentry, }; ! static int njbfs_readdir(struct file *, void *, filldir_t); ! static int njbfs_dir_open(struct inode *, struct file *); ! static struct dentry *njbfs_lookup(struct inode *, struct dentry *); ! static int njbfs_mkdir(struct inode *, struct dentry *, int); ! static int njbfs_create(struct inode *, struct dentry *, int); ! static int njbfs_rmdir(struct inode *, struct dentry *); ! static int njbfs_rename(struct inode *, struct dentry *, struct inode *, ! struct dentry *); ! static int njbfs_unlink(struct inode *, struct dentry *); ! struct file_operations njbfs_dir_operations = { ! read:generic_read_dir, ! readdir:njbfs_readdir, ! open:njbfs_dir_open, }; struct inode_operations njbfs_dir_inode_operations = { ! create:njbfs_create, ! lookup:njbfs_lookup, ! unlink:njbfs_unlink, ! mkdir:njbfs_mkdir, ! rmdir:njbfs_rmdir, ! rename:njbfs_rename, }; ! static int njbfs_lookup_validate(struct dentry *dentry, int flags) { struct inode *inode = dentry->d_inode; int valid = 0; ! if (inode) { lock_kernel(); ! if (is_bad_inode(inode)) valid = 0; unlock_kernel(); *************** *** 90,95 **** } ! static int ! njbfs_hash_dentry(struct dentry* dentry, struct qstr* this) { unsigned long hash; --- 91,95 ---- } ! static int njbfs_hash_dentry(struct dentry *dentry, struct qstr *this) { unsigned long hash; *************** *** 97,101 **** hash = init_name_hash(); ! for(i = 0; i < this->len; i++) hash = partial_name_hash(this->name[i], hash); this->hash = end_name_hash(hash); --- 97,101 ---- hash = init_name_hash(); ! for (i = 0; i < this->len; i++) hash = partial_name_hash(this->name[i], hash); this->hash = end_name_hash(hash); *************** *** 104,126 **** static int ! njbfs_compare_dentry(struct dentry* dentry, struct qstr* a, struct qstr* b) { int i, res = 1; ! if(a->len != b->len) goto out; ! for(i = 0; i < a->len; i++) ! if(a->name[i] != b->name[i]) goto out; res = 0; ! out: return res; } ! static int ! njbfs_delete_dentry(struct dentry* dentry) { ! if(dentry->d_inode){ ! if(is_bad_inode(dentry->d_inode)) return 1; } --- 104,125 ---- static int ! njbfs_compare_dentry(struct dentry *dentry, struct qstr *a, struct qstr *b) { int i, res = 1; ! if (a->len != b->len) goto out; ! for (i = 0; i < a->len; i++) ! if (a->name[i] != b->name[i]) goto out; res = 0; ! out: return res; } ! static int njbfs_delete_dentry(struct dentry *dentry) { ! if (dentry->d_inode) { ! if (is_bad_inode(dentry->d_inode)) return 1; } *************** *** 128,138 **** } ! static int ! njbfs_readdir(struct file* f, void* dirent, filldir_t filldir) { struct dentry *dentry = f->f_dentry; struct inode *inode = dentry->d_inode; struct super_block *sb = inode->i_sb; ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; int result, pos, res; --- 127,137 ---- } ! static int njbfs_readdir(struct file *f, void *dirent, filldir_t filldir) { struct dentry *dentry = f->f_dentry; struct inode *inode = dentry->d_inode; struct super_block *sb = inode->i_sb; ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; int result, pos, res; *************** *** 141,150 **** struct njbfs_dirlist_node *file; ! if(!info->mnt.mount_point[0]){ ! njbfs_get_name(f->f_vfsmnt->mnt_mountpoint, info->mnt.mount_point); } ! dbg("reading %s, f_pos=%d", dentry->d_name.name, (int)f->f_pos); ! if(njbfs_get_name(dentry, buf) < 0){ err(" njbfs_get_name failed"); return -1; --- 140,150 ---- struct njbfs_dirlist_node *file; ! if (!info->mnt.mount_point[0]) { ! njbfs_get_name(f->f_vfsmnt->mnt_mountpoint, ! info->mnt.mount_point); } ! dbg("reading %s, f_pos=%d", dentry->d_name.name, (int) f->f_pos); ! if (njbfs_get_name(dentry, buf) < 0) { err(" njbfs_get_name failed"); return -1; *************** *** 152,214 **** result = 0; ! switch((unsigned int) f->f_pos){ ! case 0: ! if(filldir(dirent, ".", 1, 0, inode->i_ino, DT_DIR) < 0) ! goto out; ! f->f_pos = 1; ! case 1: ! if(filldir(dirent, "..", 2, 1, dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) ! goto out; ! f->f_pos = 2; ! default: ! njbfs_lock(info); ! res = njbfs_cache_get(info, buf, &dir); ! njbfs_unlock(info); ! if(res < 0){ ! info(" njbfs_cache_get failed"); ! switch(res){ ! case -ERESTARTSYS: res = -EINTR; ! njbfs_disconnect(info); ! break; ! } ! return res; } ! pos = 2; ! for(file = dir->head; file != NULL; file = file->next){ ! if((pos == f->f_pos)){ ! struct qstr qname; ! unsigned long ino; ! qname.name = file->entry.name; ! qname.len = strlen(qname.name); ! ino = find_inode_number(dentry, &qname); ! if(!ino) ! ino = iunique(dentry->d_sb, 2); ! if(filldir(dirent, qname.name, qname.len, f->f_pos, ino, DT_UNKNOWN) >= 0) ! f->f_pos++; - } - pos++; } } ! out: return result; } ! static int ! njbfs_dir_open(struct inode* inode, struct file* f) { ! return 0; } ! static struct dentry* ! njbfs_lookup(struct inode* dir, struct dentry* dentry) { struct super_block *sb = dir->i_sb; ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)sb->u.generic_sbp; struct njbfs_fattr fattr; struct inode *inode; --- 152,219 ---- result = 0; ! switch ((unsigned int) f->f_pos) { ! case 0: ! if (filldir(dirent, ".", 1, 0, inode->i_ino, DT_DIR) < 0) ! goto out; ! f->f_pos = 1; ! case 1: ! if (filldir ! (dirent, "..", 2, 1, dentry->d_parent->d_inode->i_ino, ! DT_DIR) < 0) ! goto out; ! f->f_pos = 2; ! default: ! njbfs_lock(info); ! res = njbfs_cache_get(info, buf, &dir); ! njbfs_unlock(info); ! if (res < 0) { ! info(" njbfs_cache_get failed"); ! switch (res) { ! case -ERESTARTSYS: ! res = -EINTR; ! njbfs_disconnect(info); ! break; } + return res; + } ! pos = 2; ! for (file = dir->head; file != NULL; file = file->next) { ! if ((pos == f->f_pos)) { ! struct qstr qname; ! unsigned long ino; ! qname.name = file->entry.name; ! qname.len = strlen(qname.name); ! ino = find_inode_number(dentry, &qname); ! if (!ino) ! ino = iunique(dentry->d_sb, 2); ! if (filldir ! (dirent, qname.name, qname.len, ! f->f_pos, ino, DT_UNKNOWN) >= 0) ! f->f_pos++; } + pos++; + } } ! out: return result; } ! static int njbfs_dir_open(struct inode *inode, struct file *f) { ! return 0; } ! static struct dentry *njbfs_lookup(struct inode *dir, ! struct dentry *dentry) { struct super_block *sb = dir->i_sb; ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) sb->u.generic_sbp; struct njbfs_fattr fattr; struct inode *inode; *************** *** 216,229 **** dbg("dname:%s", dentry->d_name.name); ! if((res = njbfs_get_attr(dentry, &fattr, ! (struct njbfs_sb_info*)dir->i_sb->u.generic_sbp)) < 0){ inode = NULL; dentry->d_op = &njbfs_dentry_operations; d_add(dentry, inode); ! switch(res){ ! case -ERESTARTSYS: ! res = -EINTR; ! njbfs_disconnect(info); ! return ERR_PTR(res); } return NULL; --- 221,235 ---- dbg("dname:%s", dentry->d_name.name); ! if ((res = njbfs_get_attr(dentry, &fattr, ! (struct njbfs_sb_info *) dir->i_sb->u. ! generic_sbp)) < 0) { inode = NULL; dentry->d_op = &njbfs_dentry_operations; d_add(dentry, inode); ! switch (res) { ! case -ERESTARTSYS: ! res = -EINTR; ! njbfs_disconnect(info); ! return ERR_PTR(res); } return NULL; *************** *** 232,236 **** fattr.f_ino = iunique(dentry->d_sb, 2); inode = njbfs_iget(dir->i_sb, &fattr); ! if(inode){ dentry->d_op = &njbfs_dentry_operations; d_add(dentry, inode); --- 238,242 ---- fattr.f_ino = iunique(dentry->d_sb, 2); inode = njbfs_iget(dir->i_sb, &fattr); ! if (inode) { dentry->d_op = &njbfs_dentry_operations; d_add(dentry, inode); *************** *** 240,251 **** } ! static int ! njbfs_instantiate(struct dentry* dentry) { ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)dentry->d_sb->u.generic_sbp; struct njbfs_fattr fattr; struct inode *inode; ! if(njbfs_get_attr(dentry, &fattr, info) < 0){ info("njbfs_get_attr failed"); return -1; --- 246,257 ---- } ! static int njbfs_instantiate(struct dentry *dentry) { ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) dentry->d_sb->u.generic_sbp; struct njbfs_fattr fattr; struct inode *inode; ! if (njbfs_get_attr(dentry, &fattr, info) < 0) { info("njbfs_get_attr failed"); return -1; *************** *** 254,258 **** fattr.f_ino = iunique(dentry->d_sb, 2); inode = njbfs_iget(dentry->d_sb, &fattr); ! if(!inode) return -EACCES; --- 260,264 ---- fattr.f_ino = iunique(dentry->d_sb, 2); inode = njbfs_iget(dentry->d_sb, &fattr); ! if (!inode) return -EACCES; *************** *** 262,274 **** } ! static int ! njbfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) { ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)dentry->d_sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; int res; njbfs_get_name(dentry, buf); ! if((res = njbfs_proc_mkdir(info, buf)) < 0){ err("mkdir failed"); return res; --- 268,280 ---- } ! static int njbfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) { ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) dentry->d_sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; int res; njbfs_get_name(dentry, buf); ! if ((res = njbfs_proc_mkdir(info, buf)) < 0) { err("mkdir failed"); return res; *************** *** 278,290 **** } ! static int ! njbfs_create(struct inode* dir, struct dentry *dentry, int mode) { ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)dentry->d_sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; int res; njbfs_get_name(dentry, buf); ! if((res = njbfs_proc_create(info, buf)) < 0){ err("create failed"); return res; --- 284,296 ---- } ! static int njbfs_create(struct inode *dir, struct dentry *dentry, int mode) { ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) dentry->d_sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; int res; njbfs_get_name(dentry, buf); ! if ((res = njbfs_proc_create(info, buf)) < 0) { err("create failed"); return res; *************** *** 295,305 **** } ! static int ! njbfs_rmdir(struct inode* dir, struct dentry *dentry) { ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)dentry->d_sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; ! if(!d_unhashed(dentry)) return -EBUSY; --- 301,311 ---- } ! static int njbfs_rmdir(struct inode *dir, struct dentry *dentry) { ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) dentry->d_sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; ! if (!d_unhashed(dentry)) return -EBUSY; *************** *** 313,319 **** static int njbfs_rename(struct inode *old_dir, struct dentry *old_dentry, ! struct inode *new_dir, struct dentry *new_dentry) { ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)old_dentry->d_sb->u.generic_sbp; int res; --- 319,326 ---- static int njbfs_rename(struct inode *old_dir, struct dentry *old_dentry, ! struct inode *new_dir, struct dentry *new_dentry) { ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) old_dentry->d_sb->u.generic_sbp; int res; *************** *** 322,327 **** } ! if((res = njbfs_proc_rename(info, old_dir, old_dentry, new_dir, new_dentry)) < 0) ! return res; njbfs_cache_invalidate(old_dentry->d_parent); --- 329,336 ---- } ! if ( ! (res = ! njbfs_proc_rename(info, old_dir, old_dentry, new_dir, ! new_dentry)) < 0) return res; njbfs_cache_invalidate(old_dentry->d_parent); *************** *** 331,338 **** } ! static int ! njbfs_unlink(struct inode *dir, struct dentry *dentry) { ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)dentry->d_sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; --- 340,347 ---- } ! static int njbfs_unlink(struct inode *dir, struct dentry *dentry) { ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) dentry->d_sb->u.generic_sbp; char buf[NJBFS_MAXPATHLEN]; *************** *** 341,343 **** return njbfs_proc_unlink(info, buf); } - --- 350,351 ---- Index: driver.c =================================================================== RCS file: /cvsroot/njbfs/njbfs/driver.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** driver.c 13 Nov 2001 00:56:05 -0000 1.2 --- driver.c 10 Feb 2002 21:59:23 -0000 1.3 *************** *** 30,34 **** #include <linux/fs.h> #include <linux/usb.h> ! #include <linux/proc_fs.h> /* /proc filesystem */ #include <asm/system.h> #include <asm/uaccess.h> --- 30,34 ---- #include <linux/fs.h> #include <linux/usb.h> ! #include <linux/proc_fs.h> /* /proc filesystem */ #include <asm/system.h> #include <asm/uaccess.h> *************** *** 45,49 **** /* njb_usb */ ! extern int njb_usb_ping(struct nomad_usb_data *nomad, njbid_t *njbid); static struct proc_dir_entry *proc_entry = NULL; --- 45,49 ---- /* njb_usb */ ! extern int njb_usb_ping(struct nomad_usb_data *nomad, njbid_t * njbid); static struct proc_dir_entry *proc_entry = NULL; *************** *** 55,123 **** static int njb_read_proc_driver(char *page, char **start, off_t off, ! int count, int *eof, void *data) { ! char *out = page; ! int len; ! struct nomad_usb_data *nomad = (struct nomad_usb_data *)data; ! njbid_t njbid; ! int status; ! int i; ! out += sprintf(out, "Nomad Jukebox Driver Status\n"); ! out += sprintf(out, "---------------------------\n"); ! out += sprintf(out, "NJB File System Version : %s\n", NJBFS_VERSION); ! if (!nomad) { ! err("no data"); ! goto out; ! } ! out += sprintf(out, "Connected : %s\n", CHECK(nomad->present) ); ! if (nomad->present) { ! /* ping device */ ! status = njb_usb_ping(nomad, &njbid); ! if (status == 0) { ! out += sprintf(out, "Jukebox ID : "); ! for (i = 0; i < 16; i++) { ! out += sprintf(out, "%02x ", njbid.id[i]); ! } ! out += sprintf(out, "\nFirmware : %d.%d\n", ! njbid.fwMajor, njbid.fwMinor ); ! out += sprintf(out, "Product Name : %s\n", njbid.productName ); ! switch (njbid.power) { ! case NJB_POWER_BATTERY: ! out += sprintf(out, "Power : battery\n"); ! break; ! case NJB_POWER_AC_CHARGED: ! out += sprintf(out, "Power : AC charged\n"); ! break; ! case NJB_POWER_AC_CHARGING: ! out += sprintf(out, "Power : AC charging\n"); ! break; ! default: ! out += sprintf(out, "Power : ?\n"); ! break; ! } ! } ! else { ! out += sprintf(out, "Can't ping, status = %d\n", status ); ! } ! } ! out: ! len = out - page; ! len -= off; ! if (len < count) { ! *eof = 1; ! if (len <= 0) ! return 0; ! } ! else len = count; ! *start = page + off; ! return len; } --- 55,134 ---- static int njb_read_proc_driver(char *page, char **start, off_t off, ! int count, int *eof, void *data) { ! char *out = page; ! int len; ! struct nomad_usb_data *nomad = (struct nomad_usb_data *) data; ! njbid_t njbid; ! int status; ! int i; ! out += sprintf(out, "Nomad Jukebox Driver Status\n"); ! out += sprintf(out, "---------------------------\n"); ! out += ! sprintf(out, "NJB File System Version : %s\n", NJBFS_VERSION); ! if (!nomad) { ! err("no data"); ! goto out; ! } ! out += sprintf(out, "Connected : %s\n", CHECK(nomad->present)); ! if (nomad->present) { ! /* ping device */ ! status = njb_usb_ping(nomad, &njbid); ! if (status == 0) { ! out += sprintf(out, "Jukebox ID : "); ! for (i = 0; i < 16; i++) { ! out += sprintf(out, "%02x ", njbid.id[i]); ! } ! out += sprintf(out, "\nFirmware : %d.%d\n", ! njbid.fwMajor, njbid.fwMinor); ! out += ! sprintf(out, "Product Name : %s\n", ! njbid.productName); ! switch (njbid.power) { ! case NJB_POWER_BATTERY: ! out += ! sprintf(out, ! "Power : battery\n"); ! break; ! case NJB_POWER_AC_CHARGED: ! out += ! sprintf(out, ! "Power : AC charged\n"); ! break; ! case NJB_POWER_AC_CHARGING: ! out += ! sprintf(out, ! "Power : AC charging\n"); ! break; ! default: ! out += ! sprintf(out, "Power : ?\n"); ! break; ! } ! } else { ! out += ! sprintf(out, "Can't ping, status = %d\n", ! status); ! } ! } ! out: ! len = out - page; ! len -= off; ! if (len < count) { ! *eof = 1; ! if (len <= 0) ! return 0; ! } else ! len = count; ! *start = page + off; ! return len; } *************** *** 129,174 **** static int proc_njb_create(struct nomad_usb_data *nomad) { ! if (!nomad) ! return -1; ! proc_dir = create_proc_entry("njb", S_IFDIR, proc_entry); ! if (proc_dir == NULL) { ! err("proc_njb_create: could not create/proc/njb entry"); ! return -1; ! } ! info("/proc/njb created"); ! if (proc_entry != NULL) ! proc_entry->owner = THIS_MODULE; ! proc_driver = create_proc_read_entry("driver", ! S_IFREG|S_IRUGO|S_IWUSR, proc_dir, ! njb_read_proc_driver, nomad); ! if (!proc_driver) { ! err("proc_njb_create: could not create /proc/njb/driver entry"); ! return -1; ! } ! info("/proc/njb/driver created"); ! return 0; } static void proc_njb_destroy() { ! if (!proc_driver) ! return; ! remove_proc_entry("driver", proc_dir); ! proc_driver = NULL; ! if (!proc_dir) { ! err("proc_njb_destroy: could not destroy /proc/njb"); ! return; ! } ! remove_proc_entry("njb", proc_entry); ! proc_dir = NULL; ! return; } --- 140,187 ---- static int proc_njb_create(struct nomad_usb_data *nomad) { ! if (!nomad) ! return -1; ! proc_dir = create_proc_entry("njb", S_IFDIR, proc_entry); ! if (proc_dir == NULL) { ! err("proc_njb_create: could not create/proc/njb entry"); ! return -1; ! } ! info("/proc/njb created"); ! if (proc_entry != NULL) ! proc_entry->owner = THIS_MODULE; ! proc_driver = create_proc_read_entry("driver", ! S_IFREG | S_IRUGO | S_IWUSR, ! proc_dir, ! njb_read_proc_driver, nomad); ! if (!proc_driver) { ! err ! ("proc_njb_create: could not create /proc/njb/driver entry"); ! return -1; ! } ! info("/proc/njb/driver created"); ! return 0; } static void proc_njb_destroy() { ! if (!proc_driver) ! return; ! remove_proc_entry("driver", proc_dir); ! proc_driver = NULL; ! if (!proc_dir) { ! err("proc_njb_destroy: could not destroy /proc/njb"); ! return; ! } ! remove_proc_entry("njb", proc_entry); ! proc_dir = NULL; ! return; } *************** *** 176,178 **** EXPORT_SYMBOL(proc_njb_destroy); ! #endif \ No newline at end of file --- 189,191 ---- EXPORT_SYMBOL(proc_njb_destroy); ! #endif Index: file.c =================================================================== RCS file: /cvsroot/njbfs/njbfs/file.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** file.c 4 Nov 2001 13:46:00 -0000 1.1.1.1 --- file.c 10 Feb 2002 21:59:23 -0000 1.2 *************** *** 40,45 **** extern int njbfs_close(struct inode *inode, struct file *file); ! static int ! njbfs_file_readpage(struct file *f, struct page *p) { struct dentry *dentry = f->f_dentry; --- 40,44 ---- extern int njbfs_close(struct inode *inode, struct file *file); ! static int njbfs_file_readpage(struct file *f, struct page *p) { struct dentry *dentry = f->f_dentry; *************** *** 54,60 **** count = PAGE_SIZE; ! do{ result = njbfs_read(dentry, offset, count, buffer); ! if(result < 0){ err("read error"); goto io_error; --- 53,59 ---- count = PAGE_SIZE; ! do { result = njbfs_read(dentry, offset, count, buffer); ! if (result < 0) { err("read error"); goto io_error; *************** *** 64,69 **** buffer += result; dentry->d_inode->i_atime = CURRENT_TIME; ! if(!result) break; ! }while(count); memset(buffer, 0, count); --- 63,69 ---- buffer += result; dentry->d_inode->i_atime = CURRENT_TIME; ! if (!result) ! break; ! } while (count); memset(buffer, 0, count); *************** *** 71,92 **** SetPageUptodate(p); result = 0; ! io_error: UnlockPage(p); put_page(p); ! switch(result){ ! case -ERESTARTSYS: ! if(sigismember(¤t->pending.signal, SIGPIPE)){ ! sigdelset(¤t->pending.signal, SIGPIPE); ! current->sigpending--; ! } ! result = -EINTR; ! break; } return result; } ! static int ! njbfs_file_writepage(struct page *p) { dbg("This shouldn't happen"); --- 71,91 ---- SetPageUptodate(p); result = 0; ! io_error: UnlockPage(p); put_page(p); ! switch (result) { ! case -ERESTARTSYS: ! if (sigismember(¤t->pending.signal, SIGPIPE)) { ! sigdelset(¤t->pending.signal, SIGPIPE); ! current->sigpending--; ! } ! result = -EINTR; ! break; } return result; } ! static int njbfs_file_writepage(struct page *p) { dbg("This shouldn't happen"); *************** *** 95,99 **** static int ! njbfs_file_preparewrite(struct file *f, struct page *p, unsigned offset, unsigned to) { kmap(p); --- 94,99 ---- static int ! njbfs_file_preparewrite(struct file *f, struct page *p, unsigned offset, ! unsigned to) { kmap(p); *************** *** 102,106 **** static int ! njbfs_file_commitwrite(struct file *f, struct page *p, unsigned offset, unsigned to) { struct dentry *dentry = f->f_dentry; --- 102,107 ---- static int ! njbfs_file_commitwrite(struct file *f, struct page *p, unsigned offset, ! unsigned to) { struct dentry *dentry = f->f_dentry; *************** *** 113,119 **** lock_kernel(); ! do{ result = njbfs_write(dentry, offset, count, buffer); ! if(result < 0){ err("write error"); goto error; --- 114,120 ---- lock_kernel(); ! do { result = njbfs_write(dentry, offset, count, buffer); ! if (result < 0) { err("write error"); goto error; *************** *** 124,148 **** buffer += result; written += result; ! dentry->d_inode->i_mtime = dentry->d_inode->i_atime = CURRENT_TIME; ! if(!result) break; ! }while(count); memset(buffer, 0, count); result = 0; ! error: unlock_kernel(); kunmap(p); ! switch(result){ ! case -ERESTARTSYS: ! if(sigismember(¤t->pending.signal, SIGPIPE)){ ! sigdelset(¤t->pending.signal, SIGPIPE); ! current->sigpending--; ! } ! result = -EINTR; ! break; } --- 125,150 ---- buffer += result; written += result; ! dentry->d_inode->i_mtime = dentry->d_inode->i_atime = ! CURRENT_TIME; ! if (!result) break; ! } while (count); memset(buffer, 0, count); result = 0; ! error: unlock_kernel(); kunmap(p); ! switch (result) { ! case -ERESTARTSYS: ! if (sigismember(¤t->pending.signal, SIGPIPE)) { ! sigdelset(¤t->pending.signal, SIGPIPE); ! current->sigpending--; ! } ! result = -EINTR; ! break; } *************** *** 150,193 **** } ! static int ! njbfs_file_permission(struct inode *inode, int mask) { int mode = inode->i_mode; mode >>= 6; ! if((mode & 7 & mask) != mask) return -EACCES; return 0; } ! static int ! njbfs_file_open(struct inode *inode, struct file *f) ! { ! return njbfs_open(inode, f); } ! static int ! njbfs_file_release(struct inode *inode, struct file *f) { ! return njbfs_close(inode, f); } struct file_operations njbfs_file_operations = { ! read: generic_file_read, ! write: generic_file_write, ! mmap: generic_file_mmap, ! open: njbfs_file_open, ! release: njbfs_file_release, }; struct inode_operations njbfs_file_inode_operations = { ! permission: njbfs_file_permission, }; struct address_space_operations njbfs_file_aops = { ! readpage: njbfs_file_readpage, ! writepage: njbfs_file_writepage, ! prepare_write: njbfs_file_preparewrite, ! commit_write: njbfs_file_commitwrite }; - --- 152,191 ---- } ! static int njbfs_file_permission(struct inode *inode, int mask) { int mode = inode->i_mode; mode >>= 6; ! if ((mode & 7 & mask) != mask) return -EACCES; return 0; } ! static int njbfs_file_open(struct inode *inode, struct file *f) ! { ! return njbfs_open(inode, f); } ! static int njbfs_file_release(struct inode *inode, struct file *f) { ! return njbfs_close(inode, f); } struct file_operations njbfs_file_operations = { ! read:generic_file_read, ! write:generic_file_write, ! mmap:generic_file_mmap, ! open:njbfs_file_open, ! release:njbfs_file_release, }; struct inode_operations njbfs_file_inode_operations = { ! permission:njbfs_file_permission, }; struct address_space_operations njbfs_file_aops = { ! readpage:njbfs_file_readpage, ! writepage:njbfs_file_writepage, ! prepare_write:njbfs_file_preparewrite, ! commit_write:njbfs_file_commitwrite }; Index: inode.c =================================================================== RCS file: /cvsroot/njbfs/njbfs/inode.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** inode.c 10 Feb 2002 20:07:45 -0000 1.4 --- inode.c 10 Feb 2002 21:59:23 -0000 1.5 *************** *** 40,44 **** MODULE_DESCRIPTION("USB Nomad Jukebox File System for Linux"); #ifdef MODULE_LICENSE ! MODULE_LICENSE("GPL"); #endif --- 40,44 ---- MODULE_DESCRIPTION("USB Nomad Jukebox File System for Linux"); #ifdef MODULE_LICENSE ! MODULE_LICENSE("GPL"); #endif *************** *** 61,74 **** extern struct inode_operations njbfs_symlink_inode_operations; ! static void njbfs_delete_inode(struct inode*); ! static void njbfs_put_super(struct super_block*); ! static int njbfs_statfs(struct super_block*, struct statfs*); ! static void njbfs_set_inode_attr(struct inode*, struct njbfs_fattr*); static struct super_operations njbfs_sops = { ! put_inode: force_delete, ! delete_inode: njbfs_delete_inode, ! put_super: njbfs_put_super, ! statfs: njbfs_statfs, }; --- 61,74 ---- extern struct inode_operations njbfs_symlink_inode_operations; ! static void njbfs_delete_inode(struct inode *); ! static void njbfs_put_super(struct super_block *); ! static int njbfs_statfs(struct super_block *, struct statfs *); ! static void njbfs_set_inode_attr(struct inode *, struct njbfs_fattr *); static struct super_operations njbfs_sops = { ! put_inode:force_delete, ! delete_inode:njbfs_delete_inode, ! put_super:njbfs_put_super, ! statfs:njbfs_statfs, }; *************** *** 76,93 **** struct inode *njbfs_iget(struct super_block *sb, struct njbfs_fattr *fattr) { ! struct inode *res; ! res = new_inode(sb); ! if (!res) ! return NULL; ! res->i_ino = fattr->f_ino; ! njbfs_set_inode_attr(res, fattr); ! if(S_ISDIR(res->i_mode)){ res->i_op = &njbfs_dir_inode_operations; res->i_fop = &njbfs_dir_operations;; ! }else if(S_ISLNK(res->i_mode)){ res->i_op = &njbfs_symlink_inode_operations; ! }else{ res->i_op = &njbfs_file_inode_operations; res->i_fop = &njbfs_file_operations; --- 76,93 ---- struct inode *njbfs_iget(struct super_block *sb, struct njbfs_fattr *fattr) { ! struct inode *res; ! res = new_inode(sb); ! if (!res) ! return NULL; ! res->i_ino = fattr->f_ino; ! njbfs_set_inode_attr(res, fattr); ! if (S_ISDIR(res->i_mode)) { res->i_op = &njbfs_dir_inode_operations; res->i_fop = &njbfs_dir_operations;; ! } else if (S_ISLNK(res->i_mode)) { res->i_op = &njbfs_symlink_inode_operations; ! } else { res->i_op = &njbfs_file_inode_operations; res->i_fop = &njbfs_file_operations; *************** *** 102,121 **** njbfs_set_inode_attr(struct inode *inode, struct njbfs_fattr *fattr) { ! inode->i_mode = fattr->f_mode; ! inode->i_nlink = fattr->f_nlink; ! inode->i_uid = fattr->f_uid; ! inode->i_gid = fattr->f_gid; ! inode->i_rdev = fattr->f_rdev; ! inode->i_ctime = fattr->f_ctime; ! inode->i_atime = fattr->f_atime; ! inode->i_mtime = fattr->f_mtime; ! inode->i_blksize= fattr->f_blksize; ! inode->i_blocks = fattr->f_blocks; ! inode->i_size = fattr->f_size; } ! static void ! njbfs_delete_inode(struct inode *inode) { lock_kernel(); --- 102,120 ---- njbfs_set_inode_attr(struct inode *inode, struct njbfs_fattr *fattr) { ! inode->i_mode = fattr->f_mode; ! inode->i_nlink = fattr->f_nlink; ! inode->i_uid = fattr->f_uid; ! inode->i_gid = fattr->f_gid; ! inode->i_rdev = fattr->f_rdev; ! inode->i_ctime = fattr->f_ctime; ! inode->i_atime = fattr->f_atime; ! inode->i_mtime = fattr->f_mtime; ! inode->i_blksize = fattr->f_blksize; ! inode->i_blocks = fattr->f_blocks; ! inode->i_size = fattr->f_size; } ! static void njbfs_delete_inode(struct inode *inode) { lock_kernel(); *************** *** 124,131 **** } ! static void ! njbfs_put_super(struct super_block *sb) { ! struct njbfs_sb_info *info = (struct njbfs_sb_info*)sb->u.generic_sbp; njbfs_disconnect(info); --- 123,130 ---- } ! static void njbfs_put_super(struct super_block *sb) { ! struct njbfs_sb_info *info = ! (struct njbfs_sb_info *) sb->u.generic_sbp; njbfs_disconnect(info); *************** *** 135,140 **** } ! static int ! njbfs_statfs(struct super_block *sb, struct statfs *attr) { attr->f_type = NJBFS_SUPER_MAGIC; --- 134,138 ---- } ! static int njbfs_statfs(struct super_block *sb, struct statfs *attr) { attr->f_type = NJBFS_SUPER_MAGIC; *************** *** 148,160 **** } ! struct super_block* ! njbfs_read_super(struct super_block *sb, void *opts, int silent) { ! struct njbfs_sb_info *info; struct njbfs_fattr root; struct inode *root_inode; ! info = (struct njbfs_sb_info*)kmalloc(sizeof(struct njbfs_sb_info), GFP_KERNEL); ! if(!info){ info("not enough kmem to allocate info"); goto out; --- 146,160 ---- } ! struct super_block *njbfs_read_super(struct super_block *sb, void *opts, ! int silent) { ! struct njbfs_sb_info *info; struct njbfs_fattr root; struct inode *root_inode; ! info = ! (struct njbfs_sb_info *) kmalloc(sizeof(struct njbfs_sb_info), ! GFP_KERNEL); ! if (!info) { info("not enough kmem to allocate info"); goto out; *************** *** 175,184 **** info->mnt.gid = current->gid; ! info->njb = &nomad_instance; ! info->virtual_mode = 0; ! strcpy(info->virtual_dir, ""); ! init_MUTEX(&info->sem); info->mnt.mount_point[0] = 0; --- 175,184 ---- info->mnt.gid = current->gid; ! info->njb = &nomad_instance; ! info->virtual_mode = 0; ! strcpy(info->virtual_dir, ""); ! init_MUTEX(&info->sem); info->mnt.mount_point[0] = 0; *************** *** 201,205 **** goto out_no_root; ! sb->s_root = d_alloc_root(root_inode); if (!sb->s_root) goto out_no_root; --- 201,205 ---- goto out_no_root; ! sb->s_root = d_alloc_root(root_inode); if (!sb->s_root) goto out_no_root; *************** *** 208,221 **** return sb; ! out_no_root: iput(root_inode); ! out_no_opts: kfree(info); ! out: dbg("mount failed"); return NULL; } ! static DECLARE_FSTYPE (njbfs_fs_type, "njbfs", njbfs_read_super, 0); --- 208,221 ---- return sb; ! out_no_root: iput(root_inode); ! out_no_opts: kfree(info); ! out: dbg("mount failed"); return NULL; } ! static DECLARE_FSTYPE(njbfs_fs_type, "njbfs", njbfs_read_super, 0); *************** *** 223,239 **** static int init_njb_module(void) { ! int ret; ! ret = usb_nomad_init(); ! if (ret < 0) ! return ret; #if defined(CONFIG_PROC_FS) ! ret = proc_njb_create( &nomad_instance ); ! if (ret < 0) ! return ret; #endif ! return register_filesystem(&njbfs_fs_type); } --- 223,239 ---- static int init_njb_module(void) { ! int ret; ! ret = usb_nomad_init(); ! if (ret < 0) ! return ret; #if defined(CONFIG_PROC_FS) ! ret = proc_njb_create(&nomad_instance); ! if (ret < 0) ! return ret; #endif ! return register_filesystem(&njbfs_fs_type); } *************** *** 242,250 **** unregister_filesystem(&njbfs_fs_type); #if defined(CONFIG_PROC_FS) ! proc_njb_destroy(); #endif ! usb_nomad_cleanup(); ! return; } --- 242,250 ---- unregister_filesystem(&njbfs_fs_type); #if defined(CONFIG_PROC_FS) ! proc_njb_destroy(); #endif ! usb_nomad_cleanup(); ! return; } Index: njb_usb.c =================================================================== RCS file: /cvsroot/njbfs/njbfs/njb_usb.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** njb_usb.c 10 Feb 2002 20:03:03 -0000 1.3 --- njb_usb.c 10 Feb 2002 21:59:23 -0000 1.4 *************** *** 44,54 **** static int njb_usb_connect(struct nomad_usb_data *nomad); static int njb_usb_disconnect(struct nomad_usb_data *nomad); ! static int njb_usb_open(struct nomad_usb_data *nomad, struct njbfs_fattr *fattr); ! static int njb_usb_close(struct nomad_usb_data *nomad, struct njbfs_fattr *fattr); static int njb_usb_write(struct nomad_usb_data *nomad, char *name, ! u_int32_t offset, u_int32_t count, void *buffer); static int njb_usb_read(struct nomad_usb_data *nomad, char *name, ! u_int32_t offset, u_int32_t count, void *buffer); ! static int njb_usb_rename(struct nomad_usb_data *nomad, struct njbfs_fattr *fattr); static int njb_usb_delete(struct nomad_usb_data *nomad, char *file); [...2679 lines suppressed...] --- 1609,1627 ---- void dump_data(unsigned char *data, int count) { ! unsigned char *ptr; ! unsigned char buf[50]; ! unsigned char chars[18]; ! int x, y; ! ptr = data; ! for (y = 0; y < count; y += 16) { ! for (x = 0; x < 16 && x < count; x++) { ! sprintf(&buf[x * 3], "%02x ", *ptr); ! chars[x] = isalnum(*ptr) ? *ptr : '.'; ! ptr++; ! } ! chars[16] = '\0'; ! info("dump: %s %s", buf, chars); ! } } #endif Index: njbfs.h =================================================================== RCS file: /cvsroot/njbfs/njbfs/njbfs.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** njbfs.h 4 Dec 2001 21:09:31 -0000 1.3 --- njbfs.h 10 Feb 2002 21:59:23 -0000 1.4 *************** *** 17,22 **** #define NJBFS_MAXVIRTUALDIRLEN 32 ! #define NJBFS_BLOCKSIZE 4096 /* max 4096 */ ! #define NJBFS_BLOCKSIZE_BITS 12 /* 2^x = blocksize */ struct njbfs_mount_data { --- 17,22 ---- #define NJBFS_MAXVIRTUALDIRLEN 32 ! #define NJBFS_BLOCKSIZE 4096 /* max 4096 */ ! #define NJBFS_BLOCKSIZE_BITS 12 /* 2^x = blocksize */ struct njbfs_mount_data { *************** *** 27,31 **** __kernel_mode_t file_mode; __kernel_mode_t dir_mode; ! char root[NJBFS_MAXPATHLEN]; /* root directory */ char mount_point[NJBFS_MAXPATHLEN]; }; --- 27,31 ---- __kernel_mode_t file_mode; __kernel_mode_t dir_mode; ! char root[NJBFS_MAXPATHLEN]; /* root directory */ char mount_point[NJBFS_MAXPATHLEN]; }; *************** *** 40,72 **** struct semaphore sem; struct njbfs_dir_cache cache; ! struct nomad_usb_data *njb; ! int virtual_mode; ! char virtual_dir[NJBFS_MAXVIRTUALDIRLEN]; }; struct njbfs_fattr { ! unsigned long f_ino; ! umode_t f_mode; ! nlink_t f_nlink; ! uid_t f_uid; ! gid_t f_gid; ! kdev_t f_rdev; ! off_t f_size; ! time_t f_atime; ! time_t f_mtime; ! time_t f_ctime; ! unsigned long f_blksize; ! unsigned long f_blocks; ! u_int32_t fileid; /* file id of the NJB */ ! /* file name parsing */ ! u_int32_t size; /* size */ ! char *codec; /* codec frame */ ! char *title; /* title frame */ ! char *artist; /* artist frame */ ! char *album; /* album frame */ ! char *genre; /* genre frame */ ! u_int32_t length; /* optional frame: length in seconds */ ! u_int32_t tracknum; /* optional frame: album track number */ ! track_t *track; /* track */ }; --- 40,72 ---- struct semaphore sem; struct njbfs_dir_cache cache; ! struct nomad_usb_data *njb; ! int virtual_mode; ! char virtual_dir[NJBFS_MAXVIRTUALDIRLEN]; }; struct njbfs_fattr { ! unsigned long f_ino; ! umode_t f_mode; ! nlink_t f_nlink; ! uid_t f_uid; ! gid_t f_gid; ! kdev_t f_rdev; ! off_t f_size; ! time_t f_atime; ! time_t f_mtime; ! time_t f_ctime; ! unsigned long f_blksize; ! unsigned long f_blocks; ! u_int32_t fileid; /* file id of the NJB */ ! /* file name parsing */ ! u_int32_t size; /* size */ ! char *codec; /* codec frame */ ! char *title; /* title frame */ ! char *artist; /* artist frame */ ! char *album; /* album frame */ ! char *genre; /* genre frame */ ! u_int32_t length; /* optional frame: length in seconds */ ! u_int32_t tracknum; /* optional frame: album track number */ ! track_t *track; /* track */ }; Index: njbfs_cache.h =================================================================== RCS file: /cvsroot/njbfs/njbfs/njbfs_cache.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** njbfs_cache.h 4 Dec 2001 21:09:31 -0000 1.3 --- njbfs_cache.h 10 Feb 2002 21:59:23 -0000 1.4 *************** *** 78,83 **** typedef struct track_struct { ! njbttaghdr_t header; ! u_int16_t nframes; track_frame_t *first; track_frame_t *last; --- 78,83 ---- typedef struct track_struct { ! njbttaghdr_t header; ! u_int16_t nframes; track_frame_t *first; track_frame_t *last; *************** *** 119,133 **** unsigned long blocks; time_t atime; ! u_int32_t fileid; /* the NJB file id*/ ! /* NJB attributes */ ! char *codec; /* codec frame */ ! char *title; /* title frame */ ! char *artist; /* artist frame */ ! char *album; /* album frame */ ! char *genre; /* genre frame */ ! u_int32_t length; /* optional frame: length in seconds */ ! u_int32_t tracknum; /* optional frame: album track number */ ! track_t *track; /* track */ ! int update_track_tag; /* should track tag be updated? 1=yes 0=no */ }; --- 119,133 ---- unsigned long blocks; time_t atime; ! u_int32_t fileid; /* the NJB file id */ ! /* NJB attributes */ ! char *codec; /* codec frame */ ! char *title; /* title frame */ ! char *artist; /* artist frame */ ! char *album; /* album frame */ ! char *genre; /* genre frame */ ! u_int32_t length; /* optional frame: length in seconds */ ! u_int32_t tracknum; /* optional frame: album track number */ ! track_t *track; /* track */ ! int update_track_tag; /* should track tag be updated? 1=yes 0=no */ }; *************** *** 139,143 **** struct njbfs_directory { struct njbfs_dirlist_node *head; ! int valid; time_t time; char *name; --- 139,143 ---- struct njbfs_directory { struct njbfs_dirlist_node *head; ! int valid; time_t time; char *name; *************** *** 146,150 **** struct njbfs_hashlist_node { struct njbfs_hashlist_node *prev, *next; ! struct njbfs_directory directory; }; --- 146,150 ---- struct njbfs_hashlist_node { struct njbfs_hashlist_node *prev, *next; ! struct njbfs_directory directory; }; *************** *** 156,163 **** struct njbfs_sb_info; ! void njbfs_cache_init(struct njbfs_sb_info*); ! int njbfs_cache_empty(struct njbfs_sb_info*); ! int njbfs_cache_get(struct njbfs_sb_info*, char*, struct njbfs_directory**); ! void njbfs_cache_invalidate(struct dentry*); #endif --- 156,164 ---- struct njbfs_sb_info; ! void njbfs_cache_init(struct njbfs_sb_info *); ! int njbfs_cache_empty(struct njbfs_sb_info *); ! int njbfs_cache_get(struct njbfs_sb_info *, char *, ! struct njbfs_directory **); ! void njbfs_cache_invalidate(struct dentry *); #endif Index: njbfs_proc.h =================================================================== RCS file: /cvsroot/njbfs/njbfs/njbfs_proc.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** njbfs_proc.h 4 Dec 2001 21:09:31 -0000 1.2 --- njbfs_proc.h 10 Feb 2002 21:59:23 -0000 1.3 *************** *** 6,24 **** void njbfs_init_root_dirent(struct njbfs_sb_info *, struct njbfs_fattr *); int njbfs_parse_options(struct njbfs_sb_info *, void *); ! int njbfs_connect(struct njbfs_sb_info*); ! void njbfs_disconnect(struct njbfs_sb_info*); ! int njbfs_loaddir(struct njbfs_sb_info*, char*, struct njbfs_directory*); ! int njbfs_get_name(struct dentry*, char*); ! inline void njbfs_lock(struct njbfs_sb_info*); ! inline void njbfs_unlock(struct njbfs_sb_info*); ! int njbfs_get_attr(struct dentry*, struct njbfs_fattr*, struct njbfs_sb_info*); ! struct inode* njbfs_iget(struct super_block*, struct njbfs_fattr*); ! int njbfs_read(struct dentry*, unsigned long, unsigned long, char*); ! int njbfs_proc_mkdir(struct njbfs_sb_info*, char*); ! int njbfs_proc_rmdir(struct njbfs_sb_info*, char*); ! int njbfs_proc_rename(struct njbfs_sb_info*, struct inode*, struct dentry*, struct inode*, struct dentry*); ! int njbfs_proc_unlink(struct njbfs_sb_info*, char*); ! int njbfs_proc_create(struct njbfs_sb_info*, char*); ! int njbfs_write(struct dentry*, unsigned long, unsigned long, char*); #endif --- 6,27 ---- void njbfs_init_root_dirent(struct njbfs_sb_info *, struct njbfs_fattr *); int njbfs_parse_options(struct njbfs_sb_info *, void *); ! int njbfs_connect(struct njbfs_sb_info *); ! void njbfs_disconnect(struct njbfs_sb_info *); ! int njbfs_loaddir(struct njbfs_sb_info *, char *, ! struct njbfs_directory *); ! int njbfs_get_name(struct dentry *, char *); ! inline void njbfs_lock(struct njbfs_sb_info *); ! inline void njbfs_unlock(struct njbfs_sb_info *); ! int njbfs_get_attr(struct dentry *, struct njbfs_fattr *, ! struct njbfs_sb_info *); ! struct inode *njbfs_iget(struct super_block *, struct njbfs_fattr *); ! int njbfs_read(struct dentry *, unsigned long, unsigned long, char *); ! int njbfs_proc_mkdir(struct njbfs_sb_info *, char *); ! int njbfs_proc_rmdir(struct njbfs_sb_info *, char *); ! int njbfs_proc_rename(struct njbfs_sb_info *, struct inode *, ! struct dentry *, struct inode *, struct dentry *); ! int njbfs_proc_unlink(struct njbfs_sb_info *, char *); ! int njbfs_proc_create(struct njbfs_sb_info *, char *); ! int njbfs_write(struct dentry *, unsigned long, unsigned long, char *); #endif Index: nomad.c =================================================================== RCS file: /cvsroot/njbfs/njbfs/nomad.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** nomad.c 4 Dec 2001 21:09:31 -0000 1.2 --- nomad.c 10 Feb 2002 21:59:23 -0000 1.3 *************** *** 64,69 **** static struct nomad_usb_data nomad_instance; ! static int ! open_nomad(struct inode *inode, struct file *file) { struct nomad_usb_data *nomad = &nomad_instance; --- 64,68 ---- static struct nomad_usb_data nomad_instance; ! static int open_nomad(struct inode *inode, struct file *file) { struct nomad_usb_data *nomad = &nomad_instance; *************** *** 72,76 **** if (nomad->isopen || !nomad->present) { ! unlock_kernel(); return -EBUSY; } --- 71,75 ---- if (nomad->isopen || !nomad->present) { ! unlock_kernel(); return -EBUSY; } *************** *** 89,94 **** } ! static int ! close_nomad(struct inode *inode, struct file *file) { struct nomad_usb_data *nomad = &nomad_instance; --- 88,92 ---- } ! static int close_nomad(struct inode *inode, struct file *file) { struct nomad_usb_data *nomad = &nomad_instance; *************** *** 103,109 **** static int ! ioctl_nomad(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { ! struct Nomad_cmd nomad_cmd; struct nomad_usb_data *nomad = &nomad_instance; void *data; --- 101,108 ---- static int ! ioctl_nomad(struct inode *inode, struct file *file, unsigned int cmd, ! unsigned long arg) { ! struct Nomad_cmd nomad_cmd; struct nomad_usb_data *nomad = &nomad_instance; void *data; *************** *** 115,122 **** /* Sanity check to make sure Nomad is connected, powered, etc */ ! if ( nomad == NULL || ! nomad->present == 0 || ! nomad->nomad_dev == NULL || ! nomad->isopen == 0 ) return -EIO; --- 114,120 ---- /* Sanity check to make sure Nomad is connected, powered, etc */ ! if (nomad == NULL || ! nomad->present == 0 || ! nomad->nomad_dev == NULL || nomad->isopen == 0) return -EIO; *************** *** 126,131 **** if (data == NULL) break; ! if(copy_from_user(&nomad_cmd, data, sizeof(struct Nomad_cmd))) ! return -EFAULT; if (nomad_cmd.length > PAGE_SIZE) --- 124,130 ---- if (data == NULL) break; ! if (copy_from_user ! (&nomad_cmd, data, ! sizeof(struct Nomad_cmd))) return -EFAULT; if (nomad_cmd.length > PAGE_SIZE) *************** *** 137,148 **** return -ENOMEM; ! if(copy_from_user(buffer, nomad_cmd.buffer, nomad_cmd.length)) ! return -EFAULT; ! requesttype = nomad_cmd.requesttype | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE; ! info ("sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x", ! requesttype, nomad_cmd.request, nomad_cmd.value, ! nomad_cmd.index, nomad_cmd.length); /* Send nomad control message */ --- 136,152 ---- return -ENOMEM; ! if (copy_from_user ! (buffer, nomad_cmd.buffer, ! nomad_cmd.length)) return -EFAULT; ! requesttype = ! nomad_cmd. ! requesttype | USB_DIR_IN | USB_TYPE_VENDOR | ! USB_RECIP_DEVICE; ! info ! ("sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x", ! requesttype, nomad_cmd.request, nomad_cmd.value, ! nomad_cmd.index, nomad_cmd.length); /* Send nomad control message */ *************** *** 151,155 **** result = usb_control_msg(nomad->nomad_dev, ! usb_rcvctrlpipe(nomad->nomad_dev, ENDPOINT_CONTROL), nomad_cmd.request, requesttype, --- 155,161 ---- result = usb_control_msg(nomad->nomad_dev, ! usb_rcvctrlpipe(nomad-> ! nomad_dev, ! ENDPOINT_CONTROL), nomad_cmd.request, requesttype, *************** *** 164,176 **** else if (result < 0) { ! err("Error executing ioctl. code = %d", le32_to_cpu(result)); retries = 0; } else { ! info("Executed ioctl. Result = %d (data=%04x)", le32_to_cpu(result), le32_to_cpu(*((long *) buffer))); ! if(copy_to_user(nomad_cmd.buffer, buffer, nomad_cmd.length)) ! return -EFAULT; retries = 0; --- 170,186 ---- else if (result < 0) { ! err("Error executing ioctl. code = %d", ! le32_to_cpu(result)); retries = 0; } else { ! info ! ("Executed ioctl. Result = %d (data=%04x)", ! le32_to_cpu(result), le32_to_cpu(*((long *) buffer))); ! if (copy_to_user ! (nomad_cmd.buffer, buffer, ! nomad_cmd.length)) return -EFAULT; retries = 0; *************** *** 188,193 **** break; ! if(copy_from_user(&nomad_cmd, data, sizeof(struct Nomad_cmd))) ! return -EFAULT; if (nomad_cmd.length > PAGE_SIZE) --- 198,204 ---- break; ! if (copy_from_user ! (&nomad_cmd, data, ! sizeof(struct Nomad_cmd))) return -EFAULT; if (nomad_cmd.length > PAGE_SIZE) *************** *** 199,208 **** return -ENOMEM; ! if(copy_from_user(buffer, nomad_cmd.buffer, nomad_cmd.length)) ! return -EFAULT; ! requesttype = nomad_cmd.requesttype | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE; ! info("sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x", requesttype, nomad_cmd.request, nomad_cmd.value, nomad_cmd.index, nomad_cmd.length); --- 210,224 ---- return -ENOMEM; ! if (copy_from_user ! (buffer, nomad_cmd.buffer, ! nomad_cmd.length)) return -EFAULT; ! requesttype = ! nomad_cmd. ! requesttype | USB_DIR_OUT | USB_TYPE_VENDOR | ! USB_RECIP_DEVICE; ! info ! ("sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x", requesttype, nomad_cmd.request, nomad_cmd.value, nomad_cmd.index, nomad_cmd.length); *************** *** 213,217 **** result = usb_control_msg(nomad->nomad_dev, ! usb_sndctrlpipe(nomad->nomad_dev, ENDPOINT_CONTROL), nomad_cmd.request, requesttype, --- 229,235 ---- result = usb_control_msg(nomad->nomad_dev, ! usb_sndctrlpipe(nomad-> ! nomad_dev, ! ENDPOINT_CONTROL), nomad_cmd.request, requesttype, ***************... [truncated message content] |