fs_main.c

Go to the documentation of this file.
00001 
00133 #ifndef __KERNEL__
00134 #  define __KERNEL__
00135 #endif
00136 
00137 
00138 #include <linux/init.h>
00139 #include <linux/kernel.h>
00140 #include <linux/module.h>
00141 #include <linux/version.h>
00142 #include <linux/fs.h>
00143 #include <linux/sched.h>
00144 #include <linux/statfs.h>
00145 #include <linux/mm.h>
00146 #include <asm/uaccess.h>
00147 #include <asm/errno.h>
00148 #include <linux/buffer_head.h>
00149 #include <linux/pagemap.h> /* unlock_page */
00150 #include <linux/proc_fs.h>
00151 #include <asm/atomic.h>
00152 #include <linux/string.h>
00153 
00154 
00155 #include "fsc_device.h"
00156 #include "rkfs.h"
00157 #include "parser.h"
00158 
00159 
00161 int result;
00162 
00164 struct_command ret_command; /* BIG ISSUE NR.1 - ask Mr.Child */
00165 
00167 char out_buf[OUT_BUF_LENGTH];
00168 
00169 
00185 int query(const char* command, int command_length) {
00186   int result;
00187   
00188   FSPDEBUG("query(%s), len=%d\n", command, (int) command_length);
00189   result = fsc_query(command, command_length, out_buf, OUT_BUF_LENGTH);
00190   
00191   if (result > 0) {
00192     out_buf[result] = '\0'; /* adding trailing zero for print out, there is always enough space */
00193     parse_message(out_buf, result, &ret_command);
00194     return RKFS_DEF_QUERY_OK;
00195   }
00196 
00197   else {
00198    FSPDEBUG("error on query\n");
00199    return RKFS_DEF_QUERY_ERROR;
00200   }
00201   
00202 }
00203 
00204 
00214 void rkfs_deamon_test(void) {
00215         
00216 /* this test will pass under condition of newly started database - no used counters!! */
00217 #ifdef TEST_DEAMON
00218 
00219    query("MYSQL1.1 TS");
00220    query("MYSQL1.1 RE 1");
00221    query("MYSQL1.1 RE 8");
00222    query("MYSQL1.1 CF 8 hello.txt");
00223    query("MYSQL1.1 CF 1 hello.txt");
00224    query("MYSQL1.1 CF 1 hello.txt");
00225    query("MYSQL1.1 MD 1 novy_adresar");
00226    query("MYSQL1.1 MD 8 jiny_adresar");
00227    query("MYSQL1.1 MD 1 novy_adresar");
00228    query("MYSQL1.1 RF 50");
00229    query("MYSQL1.1 RF 2");
00230    query("MYSQL1.1 CF 1 vypln");
00231    query("MYSQL1.1 RD 1");
00232    query("MYSQL1.1 RD 3");
00233    query("MYSQL1.1 CR 49");
00234    query("MYSQL1.1 CR 7");
00235    query("MYSQL1.1 GB 1 0");
00236    query("MYSQL1.1 GB 1 1000");
00237    query("MYSQL1.1 GB 400 0");
00238    query("MYSQL1.1 GB 8 0");
00239    query("MYSQL1.1 GB 9 0");
00240    query("MYSQL1.1 GB 9 1");
00241    query("MYSQL1.1 AB 8 cd");
00242    query("MYSQL1.1 CR 8");
00243    query("MYSQL1.1 AB 8 ab");
00244    query("MYSQL1.1 AB 500 cd");
00245    query("MYSQL1.1 LU 1 xxxxx");
00246    query("MYSQL1.1 LU 1 todo.txt");
00247    query("MYSQL1.1 LU 1 novy_adresar");
00248    query("MYSQL1.1 LU 800 ahoj");
00249    query("MYSQL1.1 FI 1");
00250    query("MYSQL1.1 FI 2");
00251    query("MYSQL1.1 DI 10001");
00252    query("MYSQL1.1 DI 103485");
00253    query("MYSQL1.1 RI 4");
00254    query("MYSQL1.1 RI 10001");
00255 #endif
00256 }
00257 
00258 
00260 struct file_system_type rkfs = {
00261   name:        "rkfs",
00262   get_sb:     rkfs_get_sb,
00263   kill_sb:    rkfs_kill_sb,
00264   owner:      THIS_MODULE
00265 };
00266 
00267 
00281 int rkfs_next_data_item(char **com_data_pos, char *ret_buf) {
00282   int len = 0;
00283 
00284   while ((**com_data_pos) != '/' && (**com_data_pos) != '\0') {
00285     *(ret_buf++) = *((*com_data_pos)++);
00286     len++;
00287   }
00288   
00289   *ret_buf = '\0';
00290   (*com_data_pos)++;
00291   
00292   return len;
00293 }
00294 
00295 
00307 int rkfs_atoi(char* str) {
00308   int result = 0;
00309   char char_num;
00310   int int_num;
00311   
00312   while ((*str) != '\0') {
00313     char_num = *(str++);
00314     switch (char_num) {
00315       case '0': int_num = 0; break;
00316       case '1': int_num = 1; break;
00317       case '2': int_num = 2; break;
00318       case '3': int_num = 3; break;
00319       case '4': int_num = 4; break;
00320       case '5': int_num = 5; break;
00321       case '6': int_num = 6; break;
00322       case '7': int_num = 7; break;
00323       case '8': int_num = 8; break;
00324       case '9': int_num = 9; break;
00325       default:  int_num = 0; break;
00326     }
00327     result = result*10 + int_num;
00328   }
00329   return result;
00330 }
00331 
00342 static int __init
00343 rkfs_init_module(void) {
00344     int result;
00345     create_proc_read_entry("fsc_dev", 0, NULL, fsc_read_procmem, NULL); 
00346     result = register_filesystem(&rkfs);
00347     
00348     if  (result != 0) {
00349       printk(KERN_ERR "RKFS: unable to register RKFS filesystem.\n");
00350       printk(KERN_INFO "RKFS: register_filesystem error = %d.\n", result);
00351       return result;    
00352     }
00353     
00354     fsc_init(); 
00355     result = register_chrdev(fsc_major, CHAR_DEVICE_NAME,  &fsc_fops);
00356     
00357     if (result < 0) {
00358         printk(KERN_ERR "FSC: unable to register RKFSCHAR character device. \n");
00359         printk(KERN_INFO "FSC: register_chrdev error = %d.\n", result);
00360         return result;
00361     }
00362         
00363     if (fsc_major == 0) {
00364         fsc_major = result;
00365         printk(KERN_INFO "FSC: char device succesfully loaded.\n");
00366     }   
00367     
00368     printk(KERN_INFO "RKFS: filesystem succesfully loaded.\n");
00369     return 0;
00370 }
00371 
00372 
00381 static void      rkfs_cleanup_module(void) {
00382         int result;  
00383         remove_proc_entry("fsc_dev", NULL);
00384         result = unregister_filesystem(&rkfs);
00385         
00386         if (result != 0) {
00387                 printk(KERN_ERR "RKFS: cannot be unloaded. \n");
00388                 printk(KERN_INFO "RKFS: unregister_filesystem error = %d.\n", result);
00389         }
00390          
00391         else {
00392                 printk(KERN_INFO "RKFS: filesystem succesfully unloaded. \n");
00393         }
00394         
00395     fsc_fini(); 
00396         result = unregister_chrdev(fsc_major, CHAR_DEVICE_NAME);
00397 
00398         if (result != 0) {
00399                 printk(KERN_ERR "FSC: cannot be unloaded. \n");
00400                 printk(KERN_INFO "FSC: unregister_chrdev error = %d.\n", result);
00401         }
00402          
00403         else {
00404                 printk(KERN_INFO "FSC: char device succesfully unloaded.\n");
00405         }
00406         
00407 }
00408 
00409 
00411 module_init(rkfs_init_module);
00412 
00413 
00415 module_exit(rkfs_cleanup_module);
00416 
00417 

Generated on Mon May 28 13:33:08 2007 for MYSQLFS by  doxygen 1.5.0