From 66b114cf82302bf87a7a9d7161f3b62f3189973b Mon Sep 17 00:00:00 2001 From: niu Date: Tue, 27 Jan 2004 01:50:01 +0000 Subject: [PATCH] * update b_localprc from HEAD --- lustre/snapfs/cache.c | 2 +- lustre/snapfs/filter.c | 18 ++++++ lustre/snapfs/utils/snapctl.c | 136 ++++++++++++++++++++++++++++++++++-------- lustre/tests/run-llog.sh | 9 ++- 4 files changed, 136 insertions(+), 29 deletions(-) diff --git a/lustre/snapfs/cache.c b/lustre/snapfs/cache.c index 68efe98..62cb15b 100644 --- a/lustre/snapfs/cache.c +++ b/lustre/snapfs/cache.c @@ -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; diff --git a/lustre/snapfs/filter.c b/lustre/snapfs/filter.c index c17a499..f7d6f6f 100644 --- a/lustre/snapfs/filter.c +++ b/lustre/snapfs/filter.c @@ -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; } diff --git a/lustre/snapfs/utils/snapctl.c b/lustre/snapfs/utils/snapctl.c index 5edb4fa..f11bb05 100644 --- a/lustre/snapfs/utils/snapctl.c +++ b/lustre/snapfs/utils/snapctl.c @@ -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; diff --git a/lustre/tests/run-llog.sh b/lustre/tests/run-llog.sh index 22434b7..5d46e2b 100644 --- a/lustre/tests/run-llog.sh +++ b/lustre/tests/run-llog.sh @@ -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 <