X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosc%2Flproc_osc.c;h=85180ac0eab9d786696ed84559cafd9be3422225;hp=7b776f77bb0a33b39d59c9068e852865ab872b6b;hb=596f74c122f5edb0d45c4edf1b2aea4f741f7027;hpb=0b09a19bdf2db1c67635d86c7afbb8d3a90e351a;ds=sidebyside diff --git a/lustre/osc/lproc_osc.c b/lustre/osc/lproc_osc.c index 7b776f7..85180ac 100644 --- a/lustre/osc/lproc_osc.c +++ b/lustre/osc/lproc_osc.c @@ -44,20 +44,21 @@ static ssize_t active_show(struct kobject *kobj, struct attribute *attr, char *buf) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); + struct obd_import *imp; int rc; - LPROCFS_CLIMP_CHECK(dev); - rc = sprintf(buf, "%d\n", !dev->u.cli.cl_import->imp_deactive); - LPROCFS_CLIMP_EXIT(dev); + with_imp_locked(obd, imp, rc) + rc = sprintf(buf, "%d\n", !imp->imp_deactive); + return rc; } static ssize_t active_store(struct kobject *kobj, struct attribute *attr, const char *buffer, size_t count) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); bool val; int rc; @@ -67,8 +68,8 @@ static ssize_t active_store(struct kobject *kobj, struct attribute *attr, return rc; /* opposite senses */ - if (dev->u.cli.cl_import->imp_deactive == val) - rc = ptlrpc_set_import_active(dev->u.cli.cl_import, val); + if (obd->u.cli.cl_import->imp_deactive == val) + rc = ptlrpc_set_import_active(obd->u.cli.cl_import, val); else CDEBUG(D_CONFIG, "activate %u: ignoring repeat request\n", (unsigned int)val); @@ -81,15 +82,11 @@ static ssize_t max_rpcs_in_flight_show(struct kobject *kobj, struct attribute *attr, char *buf) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &dev->u.cli; - ssize_t len; + struct client_obd *cli = &obd->u.cli; - spin_lock(&cli->cl_loi_list_lock); - len = sprintf(buf, "%u\n", cli->cl_max_rpcs_in_flight); - spin_unlock(&cli->cl_loi_list_lock); - return len; + return scnprintf(buf, PAGE_SIZE, "%u\n", cli->cl_max_rpcs_in_flight); } static ssize_t max_rpcs_in_flight_store(struct kobject *kobj, @@ -97,9 +94,9 @@ static ssize_t max_rpcs_in_flight_store(struct kobject *kobj, const char *buffer, size_t count) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &dev->u.cli; + struct client_obd *cli = &obd->u.cli; int adding, added, req_count; unsigned int val; int rc; @@ -111,8 +108,6 @@ static ssize_t max_rpcs_in_flight_store(struct kobject *kobj, if (val == 0 || val > OSC_MAX_RIF_MAX) return -ERANGE; - LPROCFS_CLIMP_CHECK(dev); - adding = (int)val - cli->cl_max_rpcs_in_flight; req_count = atomic_read(&osc_pool_req_count); if (adding > 0 && req_count < osc_reqpool_maxreqcount) { @@ -132,7 +127,6 @@ static ssize_t max_rpcs_in_flight_store(struct kobject *kobj, client_adjust_max_dirty(cli); spin_unlock(&cli->cl_loi_list_lock); - LPROCFS_CLIMP_EXIT(dev); return count; } LUSTRE_RW_ATTR(max_rpcs_in_flight); @@ -141,18 +135,12 @@ static ssize_t max_dirty_mb_show(struct kobject *kobj, struct attribute *attr, char *buf) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &dev->u.cli; - long val; - int mult; - - spin_lock(&cli->cl_loi_list_lock); - val = cli->cl_dirty_max_pages; - spin_unlock(&cli->cl_loi_list_lock); + struct client_obd *cli = &obd->u.cli; - mult = 1 << (20 - PAGE_SHIFT); - return lprocfs_read_frac_helper(buf, PAGE_SIZE, val, mult); + return scnprintf(buf, PAGE_SIZE, "%lu\n", + PAGES_TO_MiB(cli->cl_dirty_max_pages)); } static ssize_t max_dirty_mb_store(struct kobject *kobj, @@ -160,21 +148,20 @@ static ssize_t max_dirty_mb_store(struct kobject *kobj, const char *buffer, size_t count) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &dev->u.cli; - unsigned long pages_number; + struct client_obd *cli = &obd->u.cli; + unsigned long pages_number, max_dirty_mb; int rc; - rc = kstrtoul(buffer, 10, &pages_number); + rc = kstrtoul(buffer, 10, &max_dirty_mb); if (rc) return rc; - pages_number *= 1 << (20 - PAGE_SHIFT); /* MB -> pages */ + pages_number = MiB_TO_PAGES(max_dirty_mb); - if (pages_number <= 0 || - pages_number >= OSC_MAX_DIRTY_MB_MAX << (20 - PAGE_SHIFT) || - pages_number > totalram_pages / 4) /* 1/4 of RAM */ + if (pages_number >= MiB_TO_PAGES(OSC_MAX_DIRTY_MB_MAX) || + pages_number > cfs_totalram_pages() / 4) /* 1/4 of RAM */ return -ERANGE; spin_lock(&cli->cl_loi_list_lock); @@ -193,8 +180,8 @@ LUSTRE_RW_ATTR(ping); static int osc_cached_mb_seq_show(struct seq_file *m, void *v) { - struct obd_device *dev = m->private; - struct client_obd *cli = &dev->u.cli; + struct obd_device *obd = m->private; + struct client_obd *cli = &obd->u.cli; int shift = 20 - PAGE_SHIFT; seq_printf(m, "used_mb: %ld\n" @@ -213,9 +200,11 @@ static ssize_t osc_cached_mb_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct obd_device *dev = ((struct seq_file *)file->private_data)->private; - struct client_obd *cli = &dev->u.cli; - __s64 pages_number; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct client_obd *cli = &obd->u.cli; + u64 pages_number; + const char *tmp; long rc; char kernbuf[128]; @@ -226,17 +215,13 @@ static ssize_t osc_cached_mb_seq_write(struct file *file, return -EFAULT; kernbuf[count] = 0; - buffer += lprocfs_find_named_value(kernbuf, "used_mb:", &count) - - kernbuf; - rc = lprocfs_str_with_units_to_s64(buffer, count, &pages_number, 'M'); - if (rc) + tmp = lprocfs_find_named_value(kernbuf, "used_mb:", &count); + rc = sysfs_memparse(tmp, count, &pages_number, "MiB"); + if (rc < 0) return rc; pages_number >>= PAGE_SHIFT; - if (pages_number < 0) - return -ERANGE; - rc = atomic_long_read(&cli->cl_lru_in_list) - pages_number; if (rc > 0) { struct lu_env *env; @@ -258,27 +243,21 @@ static ssize_t cur_dirty_bytes_show(struct kobject *kobj, struct attribute *attr, char *buf) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &dev->u.cli; - ssize_t len; - - spin_lock(&cli->cl_loi_list_lock); - len = sprintf(buf, "%lu\n", cli->cl_dirty_pages << PAGE_SHIFT); - spin_unlock(&cli->cl_loi_list_lock); + struct client_obd *cli = &obd->u.cli; - return len; + return scnprintf(buf, PAGE_SIZE, "%lu\n", + cli->cl_dirty_pages << PAGE_SHIFT); } LUSTRE_RO_ATTR(cur_dirty_bytes); static int osc_cur_grant_bytes_seq_show(struct seq_file *m, void *v) { - struct obd_device *dev = m->private; - struct client_obd *cli = &dev->u.cli; + struct obd_device *obd = m->private; + struct client_obd *cli = &obd->u.cli; - spin_lock(&cli->cl_loi_list_lock); seq_printf(m, "%lu\n", cli->cl_avail_grant); - spin_unlock(&cli->cl_loi_list_lock); return 0; } @@ -286,33 +265,35 @@ static ssize_t osc_cur_grant_bytes_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct obd_device *obd = ((struct seq_file *)file->private_data)->private; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; struct client_obd *cli = &obd->u.cli; - s64 val; + struct obd_import *imp; + char kernbuf[22] = ""; + u64 val; int rc; if (obd == NULL) return 0; - rc = lprocfs_str_with_units_to_s64(buffer, count, &val, '1'); - if (rc) + if (count >= sizeof(kernbuf)) + return -EINVAL; + + if (copy_from_user(kernbuf, buffer, count)) + return -EFAULT; + kernbuf[count] = 0; + + rc = sysfs_memparse(kernbuf, count, &val, "MiB"); + if (rc < 0) return rc; - if (val < 0) - return val; /* this is only for shrinking grant */ - spin_lock(&cli->cl_loi_list_lock); - if (val >= cli->cl_avail_grant) { - spin_unlock(&cli->cl_loi_list_lock); + if (val >= cli->cl_avail_grant) return 0; - } - spin_unlock(&cli->cl_loi_list_lock); - - LPROCFS_CLIMP_CHECK(obd); - if (cli->cl_import->imp_state == LUSTRE_IMP_FULL) - rc = osc_shrink_grant_to_target(cli, val); - LPROCFS_CLIMP_EXIT(obd); + with_imp_locked(obd, imp, rc) + if (imp->imp_state == LUSTRE_IMP_FULL) + rc = osc_shrink_grant_to_target(cli, val); return rc ? rc : count; } @@ -322,18 +303,26 @@ static ssize_t cur_lost_grant_bytes_show(struct kobject *kobj, struct attribute *attr, char *buf) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &dev->u.cli; - ssize_t len; + struct client_obd *cli = &obd->u.cli; - spin_lock(&cli->cl_loi_list_lock); - len = sprintf(buf, "%lu\n", cli->cl_lost_grant); - spin_unlock(&cli->cl_loi_list_lock); - return len; + return scnprintf(buf, PAGE_SIZE, "%lu\n", cli->cl_lost_grant); } LUSTRE_RO_ATTR(cur_lost_grant_bytes); +static ssize_t cur_dirty_grant_bytes_show(struct kobject *kobj, + struct attribute *attr, + char *buf) +{ + struct obd_device *obd = container_of(kobj, struct obd_device, + obd_kset.kobj); + struct client_obd *cli = &obd->u.cli; + + return scnprintf(buf, PAGE_SIZE, "%lu\n", cli->cl_dirty_grant); +} +LUSTRE_RO_ATTR(cur_dirty_grant_bytes); + static ssize_t grant_shrink_interval_show(struct kobject *kobj, struct attribute *attr, char *buf) @@ -409,9 +398,9 @@ static int osc_checksum_type_seq_show(struct seq_file *m, void *v) return 0; for (i = 0; i < ARRAY_SIZE(cksum_name); i++) { - if (((1 << i) & obd->u.cli.cl_supp_cksum_types) == 0) + if ((BIT(i) & obd->u.cli.cl_supp_cksum_types) == 0) continue; - if (obd->u.cli.cl_cksum_type == (1 << i)) + if (obd->u.cli.cl_cksum_type == BIT(i)) seq_printf(m, "[%s] ", cksum_name[i]); else seq_printf(m, "%s ", cksum_name[i]); @@ -424,32 +413,39 @@ static ssize_t osc_checksum_type_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct obd_device *obd = ((struct seq_file *)file->private_data)->private; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; int i; DECLARE_CKSUM_NAME; char kernbuf[10]; + int rc = -EINVAL; - if (obd == NULL) - return 0; + if (obd == NULL) + return 0; - if (count > sizeof(kernbuf) - 1) - return -EINVAL; + if (count > sizeof(kernbuf) - 1) + return -EINVAL; if (copy_from_user(kernbuf, buffer, count)) - return -EFAULT; - if (count > 0 && kernbuf[count - 1] == '\n') - kernbuf[count - 1] = '\0'; - else - kernbuf[count] = '\0'; - - for (i = 0; i < ARRAY_SIZE(cksum_name); i++) { - if (((1 << i) & obd->u.cli.cl_supp_cksum_types) == 0) - continue; - if (!strcmp(kernbuf, cksum_name[i])) { - obd->u.cli.cl_cksum_type = 1 << i; - return count; - } - } - return -EINVAL; + return -EFAULT; + + if (count > 0 && kernbuf[count - 1] == '\n') + kernbuf[count - 1] = '\0'; + else + kernbuf[count] = '\0'; + + for (i = 0; i < ARRAY_SIZE(cksum_name); i++) { + if (strcmp(kernbuf, cksum_name[i]) == 0) { + obd->u.cli.cl_preferred_cksum_type = BIT(i); + if (obd->u.cli.cl_supp_cksum_types & BIT(i)) { + obd->u.cli.cl_cksum_type = BIT(i); + rc = count; + } else { + rc = -ENOTSUPP; + } + break; + } + } + return rc; } LPROC_SEQ_FOPS(osc_checksum_type); @@ -596,8 +592,8 @@ LUSTRE_RW_ATTR(short_io_bytes); #ifdef CONFIG_PROC_FS static int osc_unstable_stats_seq_show(struct seq_file *m, void *v) { - struct obd_device *dev = m->private; - struct client_obd *cli = &dev->u.cli; + struct obd_device *obd = m->private; + struct client_obd *cli = &obd->u.cli; long pages; int mb; @@ -616,12 +612,11 @@ static ssize_t idle_timeout_show(struct kobject *kobj, struct attribute *attr, { struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &obd->u.cli; + struct obd_import *imp; int ret; - LPROCFS_CLIMP_CHECK(obd); - ret = sprintf(buf, "%u\n", cli->cl_import->imp_idle_timeout); - LPROCFS_CLIMP_EXIT(obd); + with_imp_locked(obd, imp, ret) + ret = sprintf(buf, "%u\n", imp->imp_idle_timeout); return ret; } @@ -629,9 +624,9 @@ static ssize_t idle_timeout_show(struct kobject *kobj, struct attribute *attr, static ssize_t idle_timeout_store(struct kobject *kobj, struct attribute *attr, const char *buffer, size_t count) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &dev->u.cli; + struct obd_import *imp; struct ptlrpc_request *req; unsigned int idle_debug = 0; unsigned int val; @@ -650,20 +645,20 @@ static ssize_t idle_timeout_store(struct kobject *kobj, struct attribute *attr, return -ERANGE; } - LPROCFS_CLIMP_CHECK(dev); - if (idle_debug) { - cli->cl_import->imp_idle_debug = idle_debug; - } else { - if (!val) { - /* initiate the connection if it's in IDLE state */ - req = ptlrpc_request_alloc(cli->cl_import, - &RQF_OST_STATFS); - if (req != NULL) - ptlrpc_req_finished(req); + with_imp_locked(obd, imp, rc) { + if (idle_debug) { + imp->imp_idle_debug = idle_debug; + } else { + if (!val) { + /* initiate the connection if it's in IDLE state */ + req = ptlrpc_request_alloc(imp, + &RQF_OST_STATFS); + if (req != NULL) + ptlrpc_req_finished(req); + } + imp->imp_idle_timeout = val; } - cli->cl_import->imp_idle_timeout = val; } - LPROCFS_CLIMP_EXIT(dev); return count; } @@ -672,20 +667,21 @@ LUSTRE_RW_ATTR(idle_timeout); static ssize_t idle_connect_store(struct kobject *kobj, struct attribute *attr, const char *buffer, size_t count) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &dev->u.cli; + struct obd_import *imp; struct ptlrpc_request *req; + int rc; - LPROCFS_CLIMP_CHECK(dev); - /* to initiate the connection if it's in IDLE state */ - req = ptlrpc_request_alloc(cli->cl_import, &RQF_OST_STATFS); - if (req) - ptlrpc_req_finished(req); - ptlrpc_pinger_force(cli->cl_import); - LPROCFS_CLIMP_EXIT(dev); + with_imp_locked(obd, imp, rc) { + /* to initiate the connection if it's in IDLE state */ + req = ptlrpc_request_alloc(imp, &RQF_OST_STATFS); + if (req) + ptlrpc_req_finished(req); + ptlrpc_pinger_force(imp); + } - return count; + return rc ?: count; } LUSTRE_WO_ATTR(idle_connect); @@ -694,16 +690,14 @@ static ssize_t grant_shrink_show(struct kobject *kobj, struct attribute *attr, { struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &obd->u.cli; - struct obd_connect_data *ocd; + struct obd_import *imp; ssize_t len; - LPROCFS_CLIMP_CHECK(obd); - ocd = &cli->cl_import->imp_connect_data; - - len = snprintf(buf, PAGE_SIZE, "%d\n", - !!OCD_HAS_FLAG(ocd, GRANT_SHRINK)); - LPROCFS_CLIMP_EXIT(obd); + with_imp_locked(obd, imp, len) + len = scnprintf(buf, PAGE_SIZE, "%d\n", + !imp->imp_grant_shrink_disabled && + OCD_HAS_FLAG(&imp->imp_connect_data, + GRANT_SHRINK)); return len; } @@ -711,41 +705,26 @@ static ssize_t grant_shrink_show(struct kobject *kobj, struct attribute *attr, static ssize_t grant_shrink_store(struct kobject *kobj, struct attribute *attr, const char *buffer, size_t count) { - struct obd_device *dev = container_of(kobj, struct obd_device, + struct obd_device *obd = container_of(kobj, struct obd_device, obd_kset.kobj); - struct client_obd *cli = &dev->u.cli; - struct obd_connect_data *ocd; + struct obd_import *imp; bool val; int rc; - if (dev == NULL) + if (obd == NULL) return 0; rc = kstrtobool(buffer, &val); if (rc) return rc; - LPROCFS_CLIMP_CHECK(dev); - ocd = &cli->cl_import->imp_connect_data; - - if (!val) { - if (OCD_HAS_FLAG(ocd, GRANT_SHRINK)) - ocd->ocd_connect_flags &= ~OBD_CONNECT_GRANT_SHRINK; - } else { - /** - * server replied obd_connect_data is always bigger, so - * client's imp_connect_flags_orig are always supported - * by the server - */ - if (!OCD_HAS_FLAG(ocd, GRANT_SHRINK) && - cli->cl_import->imp_connect_flags_orig & - OBD_CONNECT_GRANT_SHRINK) - ocd->ocd_connect_flags |= OBD_CONNECT_GRANT_SHRINK; + with_imp_locked(obd, imp, rc) { + spin_lock(&imp->imp_lock); + imp->imp_grant_shrink_disabled = !val; + spin_unlock(&imp->imp_lock); } - LPROCFS_CLIMP_EXIT(dev); - - return count; + return rc ?: count; } LUSTRE_RW_ATTR(grant_shrink); @@ -786,8 +765,8 @@ struct lprocfs_vars lprocfs_osc_obd_vars[] = { static int osc_rpc_stats_seq_show(struct seq_file *seq, void *v) { struct timespec64 now; - struct obd_device *dev = seq->private; - struct client_obd *cli = &dev->u.cli; + struct obd_device *obd = seq->private; + struct client_obd *cli = &obd->u.cli; unsigned long read_tot = 0, write_tot = 0, read_cum, write_cum; int i; @@ -839,7 +818,7 @@ static int osc_rpc_stats_seq_show(struct seq_file *seq, void *v) read_cum = 0; write_cum = 0; - for (i = 0; i < OBD_HIST_MAX; i++) { + for (i = 1; i < OBD_HIST_MAX; i++) { unsigned long r = cli->cl_read_rpc_hist.oh_buckets[i]; unsigned long w = cli->cl_write_rpc_hist.oh_buckets[i]; read_cum += r; @@ -884,26 +863,26 @@ static ssize_t osc_rpc_stats_seq_write(struct file *file, const char __user *buf, size_t len, loff_t *off) { - struct seq_file *seq = file->private_data; - struct obd_device *dev = seq->private; - struct client_obd *cli = &dev->u.cli; + struct seq_file *seq = file->private_data; + struct obd_device *obd = seq->private; + struct client_obd *cli = &obd->u.cli; - lprocfs_oh_clear(&cli->cl_read_rpc_hist); - lprocfs_oh_clear(&cli->cl_write_rpc_hist); - lprocfs_oh_clear(&cli->cl_read_page_hist); - lprocfs_oh_clear(&cli->cl_write_page_hist); - lprocfs_oh_clear(&cli->cl_read_offset_hist); - lprocfs_oh_clear(&cli->cl_write_offset_hist); + lprocfs_oh_clear(&cli->cl_read_rpc_hist); + lprocfs_oh_clear(&cli->cl_write_rpc_hist); + lprocfs_oh_clear(&cli->cl_read_page_hist); + lprocfs_oh_clear(&cli->cl_write_page_hist); + lprocfs_oh_clear(&cli->cl_read_offset_hist); + lprocfs_oh_clear(&cli->cl_write_offset_hist); - return len; + return len; } LPROC_SEQ_FOPS(osc_rpc_stats); static int osc_stats_seq_show(struct seq_file *seq, void *v) { struct timespec64 now; - struct obd_device *dev = seq->private; - struct osc_stats *stats = &obd2osc_dev(dev)->od_stats; + struct obd_device *obd = seq->private; + struct osc_stats *stats = &obd2osc_dev(obd)->od_stats; ktime_get_real_ts64(&now); @@ -922,25 +901,25 @@ static ssize_t osc_stats_seq_write(struct file *file, const char __user *buf, size_t len, loff_t *off) { - struct seq_file *seq = file->private_data; - struct obd_device *dev = seq->private; - struct osc_stats *stats = &obd2osc_dev(dev)->od_stats; + struct seq_file *seq = file->private_data; + struct obd_device *obd = seq->private; + struct osc_stats *stats = &obd2osc_dev(obd)->od_stats; - memset(stats, 0, sizeof(*stats)); - return len; + memset(stats, 0, sizeof(*stats)); + return len; } LPROC_SEQ_FOPS(osc_stats); -int lprocfs_osc_attach_seqstat(struct obd_device *dev) +int lprocfs_osc_attach_seqstat(struct obd_device *obd) { int rc; - rc = lprocfs_seq_create(dev->obd_proc_entry, "osc_stats", 0644, - &osc_stats_fops, dev); + rc = lprocfs_seq_create(obd->obd_proc_entry, "osc_stats", 0644, + &osc_stats_fops, obd); if (rc == 0) - rc = lprocfs_obd_seq_create(dev, "rpc_stats", 0644, - &osc_rpc_stats_fops, dev); + rc = lprocfs_obd_seq_create(obd, "rpc_stats", 0644, + &osc_rpc_stats_fops, obd); return rc; } @@ -953,6 +932,7 @@ static struct attribute *osc_attrs[] = { &lustre_attr_contention_seconds.attr, &lustre_attr_cur_dirty_bytes.attr, &lustre_attr_cur_lost_grant_bytes.attr, + &lustre_attr_cur_dirty_grant_bytes.attr, &lustre_attr_destroys_in_flight.attr, &lustre_attr_grant_shrink_interval.attr, &lustre_attr_lockless_truncate.attr, @@ -971,31 +951,9 @@ static struct attribute *osc_attrs[] = { int osc_tunables_init(struct obd_device *obd) { -#if defined(CONFIG_PROC_FS) && defined(HAVE_SERVER_SUPPORT) - struct obd_type *type; -#endif int rc; obd->obd_vars = lprocfs_osc_obd_vars; -#if defined(CONFIG_PROC_FS) && defined(HAVE_SERVER_SUPPORT) - /* If this is true then both client (osc) and server (osp) are on the - * same node. The osp layer if loaded first will register the osc proc - * directory. In that case this obd_device will be attached its proc - * tree to type->typ_procsym instead of obd->obd_type->typ_procroot. - */ - type = class_search_type(LUSTRE_OSP_NAME); - if (type && type->typ_procsym) { - obd->obd_proc_entry = lprocfs_register(obd->obd_name, - type->typ_procsym, - obd->obd_vars, obd); - if (IS_ERR(obd->obd_proc_entry)) { - rc = PTR_ERR(obd->obd_proc_entry); - CERROR("error %d setting up lprocfs for %s\n", rc, - obd->obd_name); - obd->obd_proc_entry = NULL; - } - } -#endif obd->obd_ktype.default_attrs = osc_attrs; rc = lprocfs_obd_setup(obd, false); if (rc)