Whamcloud - gitweb
* update b_localprc from HEAD
authorniu <niu>
Tue, 27 Jan 2004 01:50:01 +0000 (01:50 +0000)
committerniu <niu>
Tue, 27 Jan 2004 01:50:01 +0000 (01:50 +0000)
lustre/snapfs/cache.c
lustre/snapfs/filter.c
lustre/snapfs/utils/snapctl.c
lustre/tests/run-llog.sh

index 68efe98..62cb15b 100644 (file)
@@ -58,7 +58,7 @@ struct snap_cache *snap_find_cache(kdev_t dev)
 
        lh = &(snap_caches[snap_cache_hash(dev)]);
         list_for_each_entry(cache, lh, cache_chain) { 
-               if ( cache->cache_dev == dev )
+               if (cache->cache_dev == dev)
                        return cache;
        }
        return NULL;
index c17a499..f7d6f6f 100644 (file)
@@ -239,6 +239,13 @@ void filter_setup_dir_ops(struct filter_fs *cache,
                        u_iops->mknod = filter_iops->mknod;
                if (cache_iops->permission && filter_iops->permission)
                        u_iops->permission = filter_iops->permission;
+               if (cache_iops->setattr && filter_iops->setattr)
+                       u_iops->setattr = filter_iops->setattr;
+               if (cache_iops->setxattr && filter_iops->setxattr)
+                       u_iops->setxattr = filter_iops->setxattr;
+               if (cache_iops->removexattr && filter_iops->removexattr)
+                       u_iops->removexattr = filter_iops->removexattr;
+
        }
        /* copy dir fops */
        
@@ -290,6 +297,12 @@ void filter_setup_file_ops(struct filter_fs           *cache,
        if (filter_iops) {
                if (filter_iops->revalidate)
                        u_iops->revalidate = filter_iops->revalidate;
+               if (filter_iops->removexattr)
+                       u_iops->removexattr = filter_iops->removexattr;
+               if (filter_iops->setxattr)
+                       u_iops->setxattr = filter_iops->setxattr;
+               if (filter_iops->setattr)
+                       u_iops->setattr = filter_iops->setattr;
        }
        if (filter_fops) {
                if (filter_fops->read)
@@ -337,6 +350,11 @@ void filter_setup_symlink_ops(struct filter_fs *cache,
                        u_iops->readlink = filter_iops->readlink;
                if (cache_iops->follow_link && filter_iops->follow_link)
                        u_iops->follow_link = filter_iops->follow_link;
+               if (cache_iops->getxattr && filter_iops->getxattr) 
+                       u_iops->getxattr = filter_iops->getxattr;
+               if (cache_iops->listxattr && filter_iops->listxattr)
+                       u_iops->listxattr = filter_iops->listxattr;
+
        }
        EXIT;
 }
index 5edb4fa..f11bb05 100644 (file)
@@ -174,23 +174,13 @@ static int open_device(char *name, unsigned int dev)
        }
        return 0;
 }
-
-int snap_dev_open(int argc, char **argv)
+static  int open_snap_device(char *name)
 {
        struct snap_mnt *snaplist;
-       char *dev_name;
-       int rc;
-
-       if (argc != 2) { 
-               fprintf(stderr, "The argument count is not right \n");
-               return CMD_HELP;
-       }
-       
-       dev_name = argv[1];
-
+       int rc; 
        get_snaplist();
        list_for_each_entry(snaplist, &snap_list, snap_mnt_list) {
-               if (!strcmp(&snaplist->device.name[0], dev_name)) {
+               if (!strcmp(&snaplist->device.name[0], name)) {
                        rc = open_device(&snaplist->device.name[0], 
                                    snaplist->device.dev);
                        release_snap_list();    
@@ -198,9 +188,25 @@ int snap_dev_open(int argc, char **argv)
                }
        }
        release_snap_list();    
-       fprintf(stderr, "%s are not snapdevice\n", dev_name);
+       fprintf(stderr, "%s are not snapdevice\n", name);
        return (-EINVAL);
 }
+int snap_dev_open(int argc, char **argv)
+{
+       char *dev_name;
+       int rc;
+
+       if (argc != 2) { 
+               fprintf(stderr, "The argument count is not right \n");
+               return CMD_HELP;
+       }
+       
+       dev_name = argv[1];
+       rc = open_snap_device(dev_name);
+       if (rc)
+               fprintf(stderr, "%s are not snapdevice\n", dev_name);
+       return (rc);
+}
 int snap_dev_list(int argc, char **argv)
 {
        struct snap_mnt *snaplist;
@@ -244,6 +250,7 @@ static inline void print_snap_table(void * buf)
 }
 int snap_snap_list(int argc, char **argv)
 {
+       char *dev_name = NULL;
        int i, rc = 0;
 
        if (argc != 1 && argc != 2) {
@@ -251,10 +258,17 @@ int snap_snap_list(int argc, char **argv)
                return CMD_HELP;
        }
        if (open_device_table.count == 0) {
-               fprintf(stderr, "Please open a snapdevice first\n");
-               return (-EINVAL);
+               if (argc == 2) {
+                       dev_name = argv[1];             
+               }       
+               if (dev_name) {
+                       rc = open_snap_device(dev_name); 
+               }
+               if (!dev_name || rc) {  
+                       fprintf(stderr, "Please open a snapdevice first\n");
+                       return (-EINVAL);
+               }
        }
-       
        for (i = 0; i < open_device_table.count; i++) {
                struct ioc_snap_tbl_data *snap_ioc_data;
 
@@ -279,18 +293,86 @@ int snap_snap_list(int argc, char **argv)
        }
        return rc;
 }
-int snap_snap_add(int argc, char **argv)
+int snap_snap_del(int argc, char **argv)
 {
+       char   *dev_name = NULL, *snap_name = NULL;     
        int    rc = 0, i;
        
        if (argc != 3 && argc !=2) {
                fprintf(stderr, "The argument count is not right \n");
                return CMD_HELP;
        }
+       if (open_device_table.count == 0) {
+               if (argc == 3) {
+                       dev_name = argv[1];             
+               } else if (argc == 4) {
+                       dev_name = argv[2];
+               }
+               if (dev_name) {
+                       rc = open_snap_device(dev_name); 
+               }
+               if (!dev_name || rc) {  
+                       fprintf(stderr, "Please open a snapdevice first\n");
+                       return (-EINVAL);
+               }
+       }
+       for (i = 0; i < open_device_table.count; i++) {
+               struct ioc_snap_tbl_data *snap_ioc_data;
+
+               IOC_INIT(snap_ioc_data);
+
+               snap_ioc_data->count = 1;
+               snap_ioc_data->dev = open_device_table.device[i].dev;
+
+               if (argc == 3) { 
+                       snap_ioc_data->no = atoi(argv[1]);
+                       if (!snap_name)
+                               snap_name = argv[2];
+               } else { 
+                       snap_ioc_data->no = 0;
+                       if (!snap_name)
+                               snap_name = argv[1];
+               }
+               memcpy(snap_ioc_data->snaps[0].name, 
+                              snap_name, strlen(snap_name));
+
+               snap_ioc_data->snaps[0].time = time(NULL);
+               
+               IOC_PACK(sizeof(struct ioc_snap_tbl_data) + sizeof(struct snap));
 
+               if ((rc = ioctl(open_device_table.device[i].fd, 
+                                       IOC_SNAP_DELETE, buf))) {
+                       fprintf(stderr, "del %s failed \n", snap_name);
+               } else {
+                       fprintf(stderr, "del %s success\n", snap_name);
+               }
+       }
+       return rc;
+}
+int snap_snap_add(int argc, char **argv)
+{
+       char   *dev_name = NULL, *snap_name = NULL;     
+       int    rc = 0, i;
+       
+       if (argc != 3 && argc !=2 && argc !=4) {
+               fprintf(stderr, "The argument count is not right \n");
+               return CMD_HELP;
+       }
        if (open_device_table.count == 0) {
-               fprintf(stderr, "Please open a snapdevice first\n");
-               return (-EINVAL);
+               if (argc == 3) {
+                       dev_name = argv[1];             
+                       snap_name = argv[2];
+               } else if (argc == 4) {
+                       dev_name = argv[2];
+                       snap_name = argv[3];
+               }
+               if (dev_name) {
+                       rc = open_snap_device(dev_name); 
+               }
+               if (!dev_name || rc) {  
+                       fprintf(stderr, "Please open a snapdevice first\n");
+                       return (-EINVAL);
+               }
        }
        for (i = 0; i < open_device_table.count; i++) {
                struct ioc_snap_tbl_data *snap_ioc_data;
@@ -302,22 +384,24 @@ int snap_snap_add(int argc, char **argv)
 
                if (argc == 3) { 
                        snap_ioc_data->no = atoi(argv[1]);
-                       memcpy(snap_ioc_data->snaps[0].name, 
-                              argv[2], strlen(argv[2]));
+                       if (!snap_name)
+                               snap_name = argv[2];
                } else { 
                        snap_ioc_data->no = 0;
-                       memcpy(snap_ioc_data->snaps[0].name, 
-                              argv[1], strlen(argv[1]));
+                       if (!snap_name)
+                               snap_name = argv[1];
                }
+               memcpy(snap_ioc_data->snaps[0].name, 
+                              snap_name, strlen(snap_name));
                snap_ioc_data->snaps[0].time = time(NULL);
                
                IOC_PACK(sizeof(struct ioc_snap_tbl_data) + sizeof(struct snap));
 
                if ((rc = ioctl(open_device_table.device[i].fd, 
                                        IOC_SNAP_ADD, buf))) {
-                       fprintf(stderr, "add %s failed \n", argv[1]);
+                       fprintf(stderr, "add %s failed \n", snap_name);
                } else {
-                       fprintf(stderr, "add %s success\n", argv[1]);
+                       fprintf(stderr, "add %s success\n", snap_name);
                }
        }
        return rc;
index 22434b7..5d46e2b 100644 (file)
@@ -1,14 +1,19 @@
 #!/bin/bash
 PATH=`dirname $0`:`dirname $0`/../utils:$PATH
+TMP=${TMP:-/tmp}
+
+MDS=`ls /proc/fs/lustre/mds | grep -v num_refs | head -1`
+[ -z "$MDS" ] && echo "no MDS available, skipping llog test" && exit 0
+
 insmod ../obdclass/llog_test.o || exit 1
-lctl modules > /r/tmp/ogdb-`hostname`
+lctl modules > $TMP/ogdb-`hostname`
 echo "NOW reload debugging syms.."
 
 RC=0
 lctl <<EOT || RC=2
 newdev
 attach llog_test llt_name llt_uuid
-setup mds1
+setup $MDS
 EOT
 
 # Using ignore_errors will allow lctl to cleanup even if the test fails.