aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-11-13 23:04:17 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-11-13 23:04:17 -0500
commit9aa3d651a9199103eb6451aeb0ac1b66a6d770a6 (patch)
tree42cc631c54e1fcbdeedee8e955c4797634a91af7 /drivers/target
parent5d2eb548b309be34ecf3b91f0b7300a2b9d09b8c (diff)
parent517982229f78b2aebf00a8a337e84e8eeea70b8e (diff)
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
Pull SCSI target updates from Nicholas Bellinger: "This series contains HCH's changes to absorb configfs attribute ->show() + ->store() function pointer usage from it's original tree-wide consumers, into common configfs code. It includes usb-gadget, target w/ drivers, netconsole and ocfs2 changes to realize the improved simplicity, that now renders the original include/target/configfs_macros.h CPP magic for fabric drivers and others, unnecessary and obsolete. And with common code in place, new configfs attributes can be added easier than ever before. Note, there are further improvements in-flight from other folks for v4.5 code in configfs land, plus number of target fixes for post -rc1 code" In the meantime, a new user of the now-removed old configfs API came in through the char/misc tree in commit 7bd1d4093c2f ("stm class: Introduce an abstraction for System Trace Module devices"). This merge resolution comes from Alexander Shishkin, who updated his stm class tracing abstraction to account for the removal of the old show_attribute and store_attribute methods in commit 517982229f78 ("configfs: remove old API") from this pull. As Alexander says about that patch: "There's no need to keep an extra wrapper structure per item and the awkward show_attribute/store_attribute item ops are no longer needed. This patch converts policy code to the new api, all the while making the code quite a bit smaller and easier on the eyes. Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>" That patch was folded into the merge so that the tree should be fully bisectable. * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (23 commits) configfs: remove old API ocfs2/cluster: use per-attribute show and store methods ocfs2/cluster: move locking into attribute store methods netconsole: use per-attribute show and store methods target: use per-attribute show and store methods spear13xx_pcie_gadget: use per-attribute show and store methods dlm: use per-attribute show and store methods usb-gadget/f_serial: use per-attribute show and store methods usb-gadget/f_phonet: use per-attribute show and store methods usb-gadget/f_obex: use per-attribute show and store methods usb-gadget/f_uac2: use per-attribute show and store methods usb-gadget/f_uac1: use per-attribute show and store methods usb-gadget/f_mass_storage: use per-attribute show and store methods usb-gadget/f_sourcesink: use per-attribute show and store methods usb-gadget/f_printer: use per-attribute show and store methods usb-gadget/f_midi: use per-attribute show and store methods usb-gadget/f_loopback: use per-attribute show and store methods usb-gadget/ether: use per-attribute show and store methods usb-gadget/f_acm: use per-attribute show and store methods usb-gadget/f_hid: use per-attribute show and store methods ...
Diffstat (limited to 'drivers/target')
-rw-r--r--drivers/target/iscsi/iscsi_target_configfs.c791
-rw-r--r--drivers/target/iscsi/iscsi_target_stat.c666
-rw-r--r--drivers/target/loopback/tcm_loop.c60
-rw-r--r--drivers/target/sbp/sbp_target.c87
-rw-r--r--drivers/target/target_core_configfs.c1209
-rw-r--r--drivers/target/target_core_fabric_configfs.c275
-rw-r--r--drivers/target/target_core_internal.h3
-rw-r--r--drivers/target/target_core_stat.c918
-rw-r--r--drivers/target/tcm_fc/tfc_cmd.c1
-rw-r--r--drivers/target/tcm_fc/tfc_conf.c44
-rw-r--r--drivers/target/tcm_fc/tfc_io.c1
-rw-r--r--drivers/target/tcm_fc/tfc_sess.c1
12 files changed, 1490 insertions, 2566 deletions
diff --git a/drivers/target/iscsi/iscsi_target_configfs.c b/drivers/target/iscsi/iscsi_target_configfs.c
index c7461d770d3a..255204cc43e6 100644
--- a/drivers/target/iscsi/iscsi_target_configfs.c
+++ b/drivers/target/iscsi/iscsi_target_configfs.c
@@ -23,8 +23,6 @@
23#include <linux/inet.h> 23#include <linux/inet.h>
24#include <target/target_core_base.h> 24#include <target/target_core_base.h>
25#include <target/target_core_fabric.h> 25#include <target/target_core_fabric.h>
26#include <target/target_core_fabric_configfs.h>
27#include <target/configfs_macros.h>
28#include <target/iscsi/iscsi_transport.h> 26#include <target/iscsi/iscsi_transport.h>
29 27
30#include <target/iscsi/iscsi_target_core.h> 28#include <target/iscsi/iscsi_target_core.h>
@@ -37,20 +35,17 @@
37#include "iscsi_target.h" 35#include "iscsi_target.h"
38#include <target/iscsi/iscsi_target_stat.h> 36#include <target/iscsi/iscsi_target_stat.h>
39 37
40struct lio_target_configfs_attribute {
41 struct configfs_attribute attr;
42 ssize_t (*show)(void *, char *);
43 ssize_t (*store)(void *, const char *, size_t);
44};
45 38
46/* Start items for lio_target_portal_cit */ 39/* Start items for lio_target_portal_cit */
47 40
48static ssize_t lio_target_np_show_sctp( 41static inline struct iscsi_tpg_np *to_iscsi_tpg_np(struct config_item *item)
49 struct se_tpg_np *se_tpg_np, 42{
50 char *page) 43 return container_of(to_tpg_np(item), struct iscsi_tpg_np, se_tpg_np);
44}
45
46static ssize_t lio_target_np_sctp_show(struct config_item *item, char *page)
51{ 47{
52 struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np, 48 struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
53 struct iscsi_tpg_np, se_tpg_np);
54 struct iscsi_tpg_np *tpg_np_sctp; 49 struct iscsi_tpg_np *tpg_np_sctp;
55 ssize_t rb; 50 ssize_t rb;
56 51
@@ -63,15 +58,12 @@ static ssize_t lio_target_np_show_sctp(
63 return rb; 58 return rb;
64} 59}
65 60
66static ssize_t lio_target_np_store_sctp( 61static ssize_t lio_target_np_sctp_store(struct config_item *item,
67 struct se_tpg_np *se_tpg_np, 62 const char *page, size_t count)
68 const char *page,
69 size_t count)
70{ 63{
64 struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
71 struct iscsi_np *np; 65 struct iscsi_np *np;
72 struct iscsi_portal_group *tpg; 66 struct iscsi_portal_group *tpg;
73 struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np,
74 struct iscsi_tpg_np, se_tpg_np);
75 struct iscsi_tpg_np *tpg_np_sctp = NULL; 67 struct iscsi_tpg_np *tpg_np_sctp = NULL;
76 u32 op; 68 u32 op;
77 int ret; 69 int ret;
@@ -119,14 +111,9 @@ out:
119 return -EINVAL; 111 return -EINVAL;
120} 112}
121 113
122TF_NP_BASE_ATTR(lio_target, sctp, S_IRUGO | S_IWUSR); 114static ssize_t lio_target_np_iser_show(struct config_item *item, char *page)
123
124static ssize_t lio_target_np_show_iser(
125 struct se_tpg_np *se_tpg_np,
126 char *page)
127{ 115{
128 struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np, 116 struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
129 struct iscsi_tpg_np, se_tpg_np);
130 struct iscsi_tpg_np *tpg_np_iser; 117 struct iscsi_tpg_np *tpg_np_iser;
131 ssize_t rb; 118 ssize_t rb;
132 119
@@ -139,15 +126,12 @@ static ssize_t lio_target_np_show_iser(
139 return rb; 126 return rb;
140} 127}
141 128
142static ssize_t lio_target_np_store_iser( 129static ssize_t lio_target_np_iser_store(struct config_item *item,
143 struct se_tpg_np *se_tpg_np, 130 const char *page, size_t count)
144 const char *page,
145 size_t count)
146{ 131{
132 struct iscsi_tpg_np *tpg_np = to_iscsi_tpg_np(item);
147 struct iscsi_np *np; 133 struct iscsi_np *np;
148 struct iscsi_portal_group *tpg; 134 struct iscsi_portal_group *tpg;
149 struct iscsi_tpg_np *tpg_np = container_of(se_tpg_np,
150 struct iscsi_tpg_np, se_tpg_np);
151 struct iscsi_tpg_np *tpg_np_iser = NULL; 135 struct iscsi_tpg_np *tpg_np_iser = NULL;
152 char *endptr; 136 char *endptr;
153 u32 op; 137 u32 op;
@@ -198,11 +182,12 @@ out:
198 return rc; 182 return rc;
199} 183}
200 184
201TF_NP_BASE_ATTR(lio_target, iser, S_IRUGO | S_IWUSR); 185CONFIGFS_ATTR(lio_target_np_, sctp);
186CONFIGFS_ATTR(lio_target_np_, iser);
202 187
203static struct configfs_attribute *lio_target_portal_attrs[] = { 188static struct configfs_attribute *lio_target_portal_attrs[] = {
204 &lio_target_np_sctp.attr, 189 &lio_target_np_attr_sctp,
205 &lio_target_np_iser.attr, 190 &lio_target_np_attr_iser,
206 NULL, 191 NULL,
207}; 192};
208 193
@@ -360,22 +345,21 @@ out:
360 345
361/* Start items for lio_target_nacl_attrib_cit */ 346/* Start items for lio_target_nacl_attrib_cit */
362 347
363#define DEF_NACL_ATTRIB(name) \ 348#define ISCSI_NACL_ATTR(name) \
364static ssize_t iscsi_nacl_attrib_show_##name( \ 349static ssize_t iscsi_nacl_attrib_##name##_show(struct config_item *item,\
365 struct se_node_acl *se_nacl, \ 350 char *page) \
366 char *page) \
367{ \ 351{ \
352 struct se_node_acl *se_nacl = attrib_to_nacl(item); \
368 struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \ 353 struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \
369 se_node_acl); \ 354 se_node_acl); \
370 \ 355 \
371 return sprintf(page, "%u\n", nacl->node_attrib.name); \ 356 return sprintf(page, "%u\n", nacl->node_attrib.name); \
372} \ 357} \
373 \ 358 \
374static ssize_t iscsi_nacl_attrib_store_##name( \ 359static ssize_t iscsi_nacl_attrib_##name##_store(struct config_item *item,\
375 struct se_node_acl *se_nacl, \ 360 const char *page, size_t count) \
376 const char *page, \
377 size_t count) \
378{ \ 361{ \
362 struct se_node_acl *se_nacl = attrib_to_nacl(item); \
379 struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \ 363 struct iscsi_node_acl *nacl = container_of(se_nacl, struct iscsi_node_acl, \
380 se_node_acl); \ 364 se_node_acl); \
381 u32 val; \ 365 u32 val; \
@@ -389,59 +373,28 @@ static ssize_t iscsi_nacl_attrib_store_##name( \
389 return ret; \ 373 return ret; \
390 \ 374 \
391 return count; \ 375 return count; \
392} 376} \
377 \
378CONFIGFS_ATTR(iscsi_nacl_attrib_, name)
393 379
394#define NACL_ATTR(_name, _mode) TF_NACL_ATTRIB_ATTR(iscsi, _name, _mode); 380ISCSI_NACL_ATTR(dataout_timeout);
395/* 381ISCSI_NACL_ATTR(dataout_timeout_retries);
396 * Define iscsi_node_attrib_s_dataout_timeout 382ISCSI_NACL_ATTR(default_erl);
397 */ 383ISCSI_NACL_ATTR(nopin_timeout);
398DEF_NACL_ATTRIB(dataout_timeout); 384ISCSI_NACL_ATTR(nopin_response_timeout);
399NACL_ATTR(dataout_timeout, S_IRUGO | S_IWUSR); 385ISCSI_NACL_ATTR(random_datain_pdu_offsets);
400/* 386ISCSI_NACL_ATTR(random_datain_seq_offsets);
401 * Define iscsi_node_attrib_s_dataout_timeout_retries 387ISCSI_NACL_ATTR(random_r2t_offsets);
402 */
403DEF_NACL_ATTRIB(dataout_timeout_retries);
404NACL_ATTR(dataout_timeout_retries, S_IRUGO | S_IWUSR);
405/*
406 * Define iscsi_node_attrib_s_default_erl
407 */
408DEF_NACL_ATTRIB(default_erl);
409NACL_ATTR(default_erl, S_IRUGO | S_IWUSR);
410/*
411 * Define iscsi_node_attrib_s_nopin_timeout
412 */
413DEF_NACL_ATTRIB(nopin_timeout);
414NACL_ATTR(nopin_timeout, S_IRUGO | S_IWUSR);
415/*
416 * Define iscsi_node_attrib_s_nopin_response_timeout
417 */
418DEF_NACL_ATTRIB(nopin_response_timeout);
419NACL_ATTR(nopin_response_timeout, S_IRUGO | S_IWUSR);
420/*
421 * Define iscsi_node_attrib_s_random_datain_pdu_offsets
422 */
423DEF_NACL_ATTRIB(random_datain_pdu_offsets);
424NACL_ATTR(random_datain_pdu_offsets, S_IRUGO | S_IWUSR);
425/*
426 * Define iscsi_node_attrib_s_random_datain_seq_offsets
427 */
428DEF_NACL_ATTRIB(random_datain_seq_offsets);
429NACL_ATTR(random_datain_seq_offsets, S_IRUGO | S_IWUSR);
430/*
431 * Define iscsi_node_attrib_s_random_r2t_offsets
432 */
433DEF_NACL_ATTRIB(random_r2t_offsets);
434NACL_ATTR(random_r2t_offsets, S_IRUGO | S_IWUSR);
435 388
436static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = { 389static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = {
437 &iscsi_nacl_attrib_dataout_timeout.attr, 390 &iscsi_nacl_attrib_attr_dataout_timeout,
438 &iscsi_nacl_attrib_dataout_timeout_retries.attr, 391 &iscsi_nacl_attrib_attr_dataout_timeout_retries,
439 &iscsi_nacl_attrib_default_erl.attr, 392 &iscsi_nacl_attrib_attr_default_erl,
440 &iscsi_nacl_attrib_nopin_timeout.attr, 393 &iscsi_nacl_attrib_attr_nopin_timeout,
441 &iscsi_nacl_attrib_nopin_response_timeout.attr, 394 &iscsi_nacl_attrib_attr_nopin_response_timeout,
442 &iscsi_nacl_attrib_random_datain_pdu_offsets.attr, 395 &iscsi_nacl_attrib_attr_random_datain_pdu_offsets,
443 &iscsi_nacl_attrib_random_datain_seq_offsets.attr, 396 &iscsi_nacl_attrib_attr_random_datain_seq_offsets,
444 &iscsi_nacl_attrib_random_r2t_offsets.attr, 397 &iscsi_nacl_attrib_attr_random_r2t_offsets,
445 NULL, 398 NULL,
446}; 399};
447 400
@@ -450,7 +403,7 @@ static struct configfs_attribute *lio_target_nacl_attrib_attrs[] = {
450/* Start items for lio_target_nacl_auth_cit */ 403/* Start items for lio_target_nacl_auth_cit */
451 404
452#define __DEF_NACL_AUTH_STR(prefix, name, flags) \ 405#define __DEF_NACL_AUTH_STR(prefix, name, flags) \
453static ssize_t __iscsi_##prefix##_show_##name( \ 406static ssize_t __iscsi_##prefix##_##name##_show( \
454 struct iscsi_node_acl *nacl, \ 407 struct iscsi_node_acl *nacl, \
455 char *page) \ 408 char *page) \
456{ \ 409{ \
@@ -461,7 +414,7 @@ static ssize_t __iscsi_##prefix##_show_##name( \
461 return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \ 414 return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \
462} \ 415} \
463 \ 416 \
464static ssize_t __iscsi_##prefix##_store_##name( \ 417static ssize_t __iscsi_##prefix##_##name##_store( \
465 struct iscsi_node_acl *nacl, \ 418 struct iscsi_node_acl *nacl, \
466 const char *page, \ 419 const char *page, \
467 size_t count) \ 420 size_t count) \
@@ -487,8 +440,35 @@ static ssize_t __iscsi_##prefix##_store_##name( \
487 return count; \ 440 return count; \
488} 441}
489 442
443#define DEF_NACL_AUTH_STR(name, flags) \
444 __DEF_NACL_AUTH_STR(nacl_auth, name, flags) \
445static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \
446 char *page) \
447{ \
448 struct se_node_acl *nacl = auth_to_nacl(item); \
449 return __iscsi_nacl_auth_##name##_show(container_of(nacl, \
450 struct iscsi_node_acl, se_node_acl), page); \
451} \
452static ssize_t iscsi_nacl_auth_##name##_store(struct config_item *item, \
453 const char *page, size_t count) \
454{ \
455 struct se_node_acl *nacl = auth_to_nacl(item); \
456 return __iscsi_nacl_auth_##name##_store(container_of(nacl, \
457 struct iscsi_node_acl, se_node_acl), page, count); \
458} \
459 \
460CONFIGFS_ATTR(iscsi_nacl_auth_, name)
461
462/*
463 * One-way authentication userid
464 */
465DEF_NACL_AUTH_STR(userid, NAF_USERID_SET);
466DEF_NACL_AUTH_STR(password, NAF_PASSWORD_SET);
467DEF_NACL_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
468DEF_NACL_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
469
490#define __DEF_NACL_AUTH_INT(prefix, name) \ 470#define __DEF_NACL_AUTH_INT(prefix, name) \
491static ssize_t __iscsi_##prefix##_show_##name( \ 471static ssize_t __iscsi_##prefix##_##name##_show( \
492 struct iscsi_node_acl *nacl, \ 472 struct iscsi_node_acl *nacl, \
493 char *page) \ 473 char *page) \
494{ \ 474{ \
@@ -500,69 +480,26 @@ static ssize_t __iscsi_##prefix##_show_##name( \
500 return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \ 480 return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \
501} 481}
502 482
503#define DEF_NACL_AUTH_STR(name, flags) \
504 __DEF_NACL_AUTH_STR(nacl_auth, name, flags) \
505static ssize_t iscsi_nacl_auth_show_##name( \
506 struct se_node_acl *nacl, \
507 char *page) \
508{ \
509 return __iscsi_nacl_auth_show_##name(container_of(nacl, \
510 struct iscsi_node_acl, se_node_acl), page); \
511} \
512static ssize_t iscsi_nacl_auth_store_##name( \
513 struct se_node_acl *nacl, \
514 const char *page, \
515 size_t count) \
516{ \
517 return __iscsi_nacl_auth_store_##name(container_of(nacl, \
518 struct iscsi_node_acl, se_node_acl), page, count); \
519}
520
521#define DEF_NACL_AUTH_INT(name) \ 483#define DEF_NACL_AUTH_INT(name) \
522 __DEF_NACL_AUTH_INT(nacl_auth, name) \ 484 __DEF_NACL_AUTH_INT(nacl_auth, name) \
523static ssize_t iscsi_nacl_auth_show_##name( \ 485static ssize_t iscsi_nacl_auth_##name##_show(struct config_item *item, \
524 struct se_node_acl *nacl, \ 486 char *page) \
525 char *page) \
526{ \ 487{ \
527 return __iscsi_nacl_auth_show_##name(container_of(nacl, \ 488 struct se_node_acl *nacl = auth_to_nacl(item); \
528 struct iscsi_node_acl, se_node_acl), page); \ 489 return __iscsi_nacl_auth_##name##_show(container_of(nacl, \
529} 490 struct iscsi_node_acl, se_node_acl), page); \
530 491} \
531#define AUTH_ATTR(_name, _mode) TF_NACL_AUTH_ATTR(iscsi, _name, _mode); 492 \
532#define AUTH_ATTR_RO(_name) TF_NACL_AUTH_ATTR_RO(iscsi, _name); 493CONFIGFS_ATTR_RO(iscsi_nacl_auth_, name)
533 494
534/*
535 * One-way authentication userid
536 */
537DEF_NACL_AUTH_STR(userid, NAF_USERID_SET);
538AUTH_ATTR(userid, S_IRUGO | S_IWUSR);
539/*
540 * One-way authentication password
541 */
542DEF_NACL_AUTH_STR(password, NAF_PASSWORD_SET);
543AUTH_ATTR(password, S_IRUGO | S_IWUSR);
544/*
545 * Enforce mutual authentication
546 */
547DEF_NACL_AUTH_INT(authenticate_target); 495DEF_NACL_AUTH_INT(authenticate_target);
548AUTH_ATTR_RO(authenticate_target);
549/*
550 * Mutual authentication userid
551 */
552DEF_NACL_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
553AUTH_ATTR(userid_mutual, S_IRUGO | S_IWUSR);
554/*
555 * Mutual authentication password
556 */
557DEF_NACL_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
558AUTH_ATTR(password_mutual, S_IRUGO | S_IWUSR);
559 496
560static struct configfs_attribute *lio_target_nacl_auth_attrs[] = { 497static struct configfs_attribute *lio_target_nacl_auth_attrs[] = {
561 &iscsi_nacl_auth_userid.attr, 498 &iscsi_nacl_auth_attr_userid,
562 &iscsi_nacl_auth_password.attr, 499 &iscsi_nacl_auth_attr_password,
563 &iscsi_nacl_auth_authenticate_target.attr, 500 &iscsi_nacl_auth_attr_authenticate_target,
564 &iscsi_nacl_auth_userid_mutual.attr, 501 &iscsi_nacl_auth_attr_userid_mutual,
565 &iscsi_nacl_auth_password_mutual.attr, 502 &iscsi_nacl_auth_attr_password_mutual,
566 NULL, 503 NULL,
567}; 504};
568 505
@@ -570,11 +507,11 @@ static struct configfs_attribute *lio_target_nacl_auth_attrs[] = {
570 507
571/* Start items for lio_target_nacl_param_cit */ 508/* Start items for lio_target_nacl_param_cit */
572 509
573#define DEF_NACL_PARAM(name) \ 510#define ISCSI_NACL_PARAM(name) \
574static ssize_t iscsi_nacl_param_show_##name( \ 511static ssize_t iscsi_nacl_param_##name##_show(struct config_item *item, \
575 struct se_node_acl *se_nacl, \ 512 char *page) \
576 char *page) \
577{ \ 513{ \
514 struct se_node_acl *se_nacl = param_to_nacl(item); \
578 struct iscsi_session *sess; \ 515 struct iscsi_session *sess; \
579 struct se_session *se_sess; \ 516 struct se_session *se_sess; \
580 ssize_t rb; \ 517 ssize_t rb; \
@@ -592,55 +529,34 @@ static ssize_t iscsi_nacl_param_show_##name( \
592 spin_unlock_bh(&se_nacl->nacl_sess_lock); \ 529 spin_unlock_bh(&se_nacl->nacl_sess_lock); \
593 \ 530 \
594 return rb; \ 531 return rb; \
595} 532} \
596 533 \
597#define NACL_PARAM_ATTR(_name) TF_NACL_PARAM_ATTR_RO(iscsi, _name); 534CONFIGFS_ATTR_RO(iscsi_nacl_param_, name)
598 535
599DEF_NACL_PARAM(MaxConnections); 536ISCSI_NACL_PARAM(MaxConnections);
600NACL_PARAM_ATTR(MaxConnections); 537ISCSI_NACL_PARAM(InitialR2T);
601 538ISCSI_NACL_PARAM(ImmediateData);
602DEF_NACL_PARAM(InitialR2T); 539ISCSI_NACL_PARAM(MaxBurstLength);
603NACL_PARAM_ATTR(InitialR2T); 540ISCSI_NACL_PARAM(FirstBurstLength);
604 541ISCSI_NACL_PARAM(DefaultTime2Wait);
605DEF_NACL_PARAM(ImmediateData); 542ISCSI_NACL_PARAM(DefaultTime2Retain);
606NACL_PARAM_ATTR(ImmediateData); 543ISCSI_NACL_PARAM(MaxOutstandingR2T);
607 544ISCSI_NACL_PARAM(DataPDUInOrder);
608DEF_NACL_PARAM(MaxBurstLength); 545ISCSI_NACL_PARAM(DataSequenceInOrder);
609NACL_PARAM_ATTR(MaxBurstLength); 546ISCSI_NACL_PARAM(ErrorRecoveryLevel);
610
611DEF_NACL_PARAM(FirstBurstLength);
612NACL_PARAM_ATTR(FirstBurstLength);
613
614DEF_NACL_PARAM(DefaultTime2Wait);
615NACL_PARAM_ATTR(DefaultTime2Wait);
616
617DEF_NACL_PARAM(DefaultTime2Retain);
618NACL_PARAM_ATTR(DefaultTime2Retain);
619
620DEF_NACL_PARAM(MaxOutstandingR2T);
621NACL_PARAM_ATTR(MaxOutstandingR2T);
622
623DEF_NACL_PARAM(DataPDUInOrder);
624NACL_PARAM_ATTR(DataPDUInOrder);
625
626DEF_NACL_PARAM(DataSequenceInOrder);
627NACL_PARAM_ATTR(DataSequenceInOrder);
628
629DEF_NACL_PARAM(ErrorRecoveryLevel);
630NACL_PARAM_ATTR(ErrorRecoveryLevel);
631 547
632static struct configfs_attribute *lio_target_nacl_param_attrs[] = { 548static struct configfs_attribute *lio_target_nacl_param_attrs[] = {
633 &iscsi_nacl_param_MaxConnections.attr, 549 &iscsi_nacl_param_attr_MaxConnections,
634 &iscsi_nacl_param_InitialR2T.attr, 550 &iscsi_nacl_param_attr_InitialR2T,
635 &iscsi_nacl_param_ImmediateData.attr, 551 &iscsi_nacl_param_attr_ImmediateData,
636 &iscsi_nacl_param_MaxBurstLength.attr, 552 &iscsi_nacl_param_attr_MaxBurstLength,
637 &iscsi_nacl_param_FirstBurstLength.attr, 553 &iscsi_nacl_param_attr_FirstBurstLength,
638 &iscsi_nacl_param_DefaultTime2Wait.attr, 554 &iscsi_nacl_param_attr_DefaultTime2Wait,
639 &iscsi_nacl_param_DefaultTime2Retain.attr, 555 &iscsi_nacl_param_attr_DefaultTime2Retain,
640 &iscsi_nacl_param_MaxOutstandingR2T.attr, 556 &iscsi_nacl_param_attr_MaxOutstandingR2T,
641 &iscsi_nacl_param_DataPDUInOrder.attr, 557 &iscsi_nacl_param_attr_DataPDUInOrder,
642 &iscsi_nacl_param_DataSequenceInOrder.attr, 558 &iscsi_nacl_param_attr_DataSequenceInOrder,
643 &iscsi_nacl_param_ErrorRecoveryLevel.attr, 559 &iscsi_nacl_param_attr_ErrorRecoveryLevel,
644 NULL, 560 NULL,
645}; 561};
646 562
@@ -648,10 +564,9 @@ static struct configfs_attribute *lio_target_nacl_param_attrs[] = {
648 564
649/* Start items for lio_target_acl_cit */ 565/* Start items for lio_target_acl_cit */
650 566
651static ssize_t lio_target_nacl_show_info( 567static ssize_t lio_target_nacl_info_show(struct config_item *item, char *page)
652 struct se_node_acl *se_nacl,
653 char *page)
654{ 568{
569 struct se_node_acl *se_nacl = acl_to_nacl(item);
655 struct iscsi_session *sess; 570 struct iscsi_session *sess;
656 struct iscsi_conn *conn; 571 struct iscsi_conn *conn;
657 struct se_session *se_sess; 572 struct se_session *se_sess;
@@ -766,20 +681,16 @@ static ssize_t lio_target_nacl_show_info(
766 return rb; 681 return rb;
767} 682}
768 683
769TF_NACL_BASE_ATTR_RO(lio_target, info); 684static ssize_t lio_target_nacl_cmdsn_depth_show(struct config_item *item,
770 685 char *page)
771static ssize_t lio_target_nacl_show_cmdsn_depth(
772 struct se_node_acl *se_nacl,
773 char *page)
774{ 686{
775 return sprintf(page, "%u\n", se_nacl->queue_depth); 687 return sprintf(page, "%u\n", acl_to_nacl(item)->queue_depth);
776} 688}
777 689
778static ssize_t lio_target_nacl_store_cmdsn_depth( 690static ssize_t lio_target_nacl_cmdsn_depth_store(struct config_item *item,
779 struct se_node_acl *se_nacl, 691 const char *page, size_t count)
780 const char *page,
781 size_t count)
782{ 692{
693 struct se_node_acl *se_nacl = acl_to_nacl(item);
783 struct se_portal_group *se_tpg = se_nacl->se_tpg; 694 struct se_portal_group *se_tpg = se_nacl->se_tpg;
784 struct iscsi_portal_group *tpg = container_of(se_tpg, 695 struct iscsi_portal_group *tpg = container_of(se_tpg,
785 struct iscsi_portal_group, tpg_se_tpg); 696 struct iscsi_portal_group, tpg_se_tpg);
@@ -829,20 +740,15 @@ static ssize_t lio_target_nacl_store_cmdsn_depth(
829 return (!ret) ? count : (ssize_t)ret; 740 return (!ret) ? count : (ssize_t)ret;
830} 741}
831 742
832TF_NACL_BASE_ATTR(lio_target, cmdsn_depth, S_IRUGO | S_IWUSR); 743static ssize_t lio_target_nacl_tag_show(struct config_item *item, char *page)
833
834static ssize_t lio_target_nacl_show_tag(
835 struct se_node_acl *se_nacl,
836 char *page)
837{ 744{
838 return snprintf(page, PAGE_SIZE, "%s", se_nacl->acl_tag); 745 return snprintf(page, PAGE_SIZE, "%s", acl_to_nacl(item)->acl_tag);
839} 746}
840 747
841static ssize_t lio_target_nacl_store_tag( 748static ssize_t lio_target_nacl_tag_store(struct config_item *item,
842 struct se_node_acl *se_nacl, 749 const char *page, size_t count)
843 const char *page,
844 size_t count)
845{ 750{
751 struct se_node_acl *se_nacl = acl_to_nacl(item);
846 int ret; 752 int ret;
847 753
848 ret = core_tpg_set_initiator_node_tag(se_nacl->se_tpg, se_nacl, page); 754 ret = core_tpg_set_initiator_node_tag(se_nacl->se_tpg, se_nacl, page);
@@ -852,12 +758,14 @@ static ssize_t lio_target_nacl_store_tag(
852 return count; 758 return count;
853} 759}
854 760
855TF_NACL_BASE_ATTR(lio_target, tag, S_IRUGO | S_IWUSR); 761CONFIGFS_ATTR_RO(lio_target_nacl_, info);
762CONFIGFS_ATTR(lio_target_nacl_, cmdsn_depth);
763CONFIGFS_ATTR(lio_target_nacl_, tag);
856 764
857static struct configfs_attribute *lio_target_initiator_attrs[] = { 765static struct configfs_attribute *lio_target_initiator_attrs[] = {
858 &lio_target_nacl_info.attr, 766 &lio_target_nacl_attr_info,
859 &lio_target_nacl_cmdsn_depth.attr, 767 &lio_target_nacl_attr_cmdsn_depth,
860 &lio_target_nacl_tag.attr, 768 &lio_target_nacl_attr_tag,
861 NULL, 769 NULL,
862}; 770};
863 771
@@ -907,10 +815,10 @@ static void lio_target_cleanup_nodeacl( struct se_node_acl *se_nacl)
907 815
908#define DEF_TPG_ATTRIB(name) \ 816#define DEF_TPG_ATTRIB(name) \
909 \ 817 \
910static ssize_t iscsi_tpg_attrib_show_##name( \ 818static ssize_t iscsi_tpg_attrib_##name##_show(struct config_item *item, \
911 struct se_portal_group *se_tpg, \ 819 char *page) \
912 char *page) \
913{ \ 820{ \
821 struct se_portal_group *se_tpg = attrib_to_tpg(item); \
914 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 822 struct iscsi_portal_group *tpg = container_of(se_tpg, \
915 struct iscsi_portal_group, tpg_se_tpg); \ 823 struct iscsi_portal_group, tpg_se_tpg); \
916 ssize_t rb; \ 824 ssize_t rb; \
@@ -923,11 +831,10 @@ static ssize_t iscsi_tpg_attrib_show_##name( \
923 return rb; \ 831 return rb; \
924} \ 832} \
925 \ 833 \
926static ssize_t iscsi_tpg_attrib_store_##name( \ 834static ssize_t iscsi_tpg_attrib_##name##_store(struct config_item *item,\
927 struct se_portal_group *se_tpg, \ 835 const char *page, size_t count) \
928 const char *page, \
929 size_t count) \
930{ \ 836{ \
837 struct se_portal_group *se_tpg = attrib_to_tpg(item); \
931 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 838 struct iscsi_portal_group *tpg = container_of(se_tpg, \
932 struct iscsi_portal_group, tpg_se_tpg); \ 839 struct iscsi_portal_group, tpg_se_tpg); \
933 u32 val; \ 840 u32 val; \
@@ -948,90 +855,37 @@ static ssize_t iscsi_tpg_attrib_store_##name( \
948out: \ 855out: \
949 iscsit_put_tpg(tpg); \ 856 iscsit_put_tpg(tpg); \
950 return ret; \ 857 return ret; \
951} 858} \
952 859CONFIGFS_ATTR(iscsi_tpg_attrib_, name)
953#define TPG_ATTR(_name, _mode) TF_TPG_ATTRIB_ATTR(iscsi, _name, _mode);
954 860
955/*
956 * Define iscsi_tpg_attrib_s_authentication
957 */
958DEF_TPG_ATTRIB(authentication); 861DEF_TPG_ATTRIB(authentication);
959TPG_ATTR(authentication, S_IRUGO | S_IWUSR);
960/*
961 * Define iscsi_tpg_attrib_s_login_timeout
962 */
963DEF_TPG_ATTRIB(login_timeout); 862DEF_TPG_ATTRIB(login_timeout);
964TPG_ATTR(login_timeout, S_IRUGO | S_IWUSR);
965/*
966 * Define iscsi_tpg_attrib_s_netif_timeout
967 */
968DEF_TPG_ATTRIB(netif_timeout); 863DEF_TPG_ATTRIB(netif_timeout);
969TPG_ATTR(netif_timeout, S_IRUGO | S_IWUSR);
970/*
971 * Define iscsi_tpg_attrib_s_generate_node_acls
972 */
973DEF_TPG_ATTRIB(generate_node_acls); 864DEF_TPG_ATTRIB(generate_node_acls);
974TPG_ATTR(generate_node_acls, S_IRUGO | S_IWUSR);
975/*
976 * Define iscsi_tpg_attrib_s_default_cmdsn_depth
977 */
978DEF_TPG_ATTRIB(default_cmdsn_depth); 865DEF_TPG_ATTRIB(default_cmdsn_depth);
979TPG_ATTR(default_cmdsn_depth, S_IRUGO | S_IWUSR);
980/*
981 Define iscsi_tpg_attrib_s_cache_dynamic_acls
982 */
983DEF_TPG_ATTRIB(cache_dynamic_acls); 866DEF_TPG_ATTRIB(cache_dynamic_acls);
984TPG_ATTR(cache_dynamic_acls, S_IRUGO | S_IWUSR);
985/*
986 * Define iscsi_tpg_attrib_s_demo_mode_write_protect
987 */
988DEF_TPG_ATTRIB(demo_mode_write_protect); 867DEF_TPG_ATTRIB(demo_mode_write_protect);
989TPG_ATTR(demo_mode_write_protect, S_IRUGO | S_IWUSR);
990/*
991 * Define iscsi_tpg_attrib_s_prod_mode_write_protect
992 */
993DEF_TPG_ATTRIB(prod_mode_write_protect); 868DEF_TPG_ATTRIB(prod_mode_write_protect);
994TPG_ATTR(prod_mode_write_protect, S_IRUGO | S_IWUSR);
995/*
996 * Define iscsi_tpg_attrib_s_demo_mode_discovery,
997 */
998DEF_TPG_ATTRIB(demo_mode_discovery); 869DEF_TPG_ATTRIB(demo_mode_discovery);
999TPG_ATTR(demo_mode_discovery, S_IRUGO | S_IWUSR);
1000/*
1001 * Define iscsi_tpg_attrib_s_default_erl
1002 */
1003DEF_TPG_ATTRIB(default_erl); 870DEF_TPG_ATTRIB(default_erl);
1004TPG_ATTR(default_erl, S_IRUGO | S_IWUSR);
1005/*
1006 * Define iscsi_tpg_attrib_s_t10_pi
1007 */
1008DEF_TPG_ATTRIB(t10_pi); 871DEF_TPG_ATTRIB(t10_pi);
1009TPG_ATTR(t10_pi, S_IRUGO | S_IWUSR);
1010/*
1011 * Define iscsi_tpg_attrib_s_fabric_prot_type
1012 */
1013DEF_TPG_ATTRIB(fabric_prot_type); 872DEF_TPG_ATTRIB(fabric_prot_type);
1014TPG_ATTR(fabric_prot_type, S_IRUGO | S_IWUSR);
1015/*
1016 * Define iscsi_tpg_attrib_s_tpg_enabled_sendtargets
1017 */
1018DEF_TPG_ATTRIB(tpg_enabled_sendtargets); 873DEF_TPG_ATTRIB(tpg_enabled_sendtargets);
1019TPG_ATTR(tpg_enabled_sendtargets, S_IRUGO | S_IWUSR);
1020 874
1021static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = { 875static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
1022 &iscsi_tpg_attrib_authentication.attr, 876 &iscsi_tpg_attrib_attr_authentication,
1023 &iscsi_tpg_attrib_login_timeout.attr, 877 &iscsi_tpg_attrib_attr_login_timeout,
1024 &iscsi_tpg_attrib_netif_timeout.attr, 878 &iscsi_tpg_attrib_attr_netif_timeout,
1025 &iscsi_tpg_attrib_generate_node_acls.attr, 879 &iscsi_tpg_attrib_attr_generate_node_acls,
1026 &iscsi_tpg_attrib_default_cmdsn_depth.attr, 880 &iscsi_tpg_attrib_attr_default_cmdsn_depth,
1027 &iscsi_tpg_attrib_cache_dynamic_acls.attr, 881 &iscsi_tpg_attrib_attr_cache_dynamic_acls,
1028 &iscsi_tpg_attrib_demo_mode_write_protect.attr, 882 &iscsi_tpg_attrib_attr_demo_mode_write_protect,
1029 &iscsi_tpg_attrib_prod_mode_write_protect.attr, 883 &iscsi_tpg_attrib_attr_prod_mode_write_protect,
1030 &iscsi_tpg_attrib_demo_mode_discovery.attr, 884 &iscsi_tpg_attrib_attr_demo_mode_discovery,
1031 &iscsi_tpg_attrib_default_erl.attr, 885 &iscsi_tpg_attrib_attr_default_erl,
1032 &iscsi_tpg_attrib_t10_pi.attr, 886 &iscsi_tpg_attrib_attr_t10_pi,
1033 &iscsi_tpg_attrib_fabric_prot_type.attr, 887 &iscsi_tpg_attrib_attr_fabric_prot_type,
1034 &iscsi_tpg_attrib_tpg_enabled_sendtargets.attr, 888 &iscsi_tpg_attrib_attr_tpg_enabled_sendtargets,
1035 NULL, 889 NULL,
1036}; 890};
1037 891
@@ -1040,9 +894,8 @@ static struct configfs_attribute *lio_target_tpg_attrib_attrs[] = {
1040/* Start items for lio_target_tpg_auth_cit */ 894/* Start items for lio_target_tpg_auth_cit */
1041 895
1042#define __DEF_TPG_AUTH_STR(prefix, name, flags) \ 896#define __DEF_TPG_AUTH_STR(prefix, name, flags) \
1043static ssize_t __iscsi_##prefix##_show_##name( \ 897static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \
1044 struct se_portal_group *se_tpg, \ 898 char *page) \
1045 char *page) \
1046{ \ 899{ \
1047 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 900 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1048 struct iscsi_portal_group, tpg_se_tpg); \ 901 struct iscsi_portal_group, tpg_se_tpg); \
@@ -1054,10 +907,8 @@ static ssize_t __iscsi_##prefix##_show_##name( \
1054 return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \ 907 return snprintf(page, PAGE_SIZE, "%s\n", auth->name); \
1055} \ 908} \
1056 \ 909 \
1057static ssize_t __iscsi_##prefix##_store_##name( \ 910static ssize_t __iscsi_##prefix##_##name##_store(struct se_portal_group *se_tpg,\
1058 struct se_portal_group *se_tpg, \ 911 const char *page, size_t count) \
1059 const char *page, \
1060 size_t count) \
1061{ \ 912{ \
1062 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 913 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1063 struct iscsi_portal_group, tpg_se_tpg); \ 914 struct iscsi_portal_group, tpg_se_tpg); \
@@ -1081,10 +932,31 @@ static ssize_t __iscsi_##prefix##_store_##name( \
1081 return count; \ 932 return count; \
1082} 933}
1083 934
935#define DEF_TPG_AUTH_STR(name, flags) \
936 __DEF_TPG_AUTH_STR(tpg_auth, name, flags) \
937static ssize_t iscsi_tpg_auth_##name##_show(struct config_item *item, \
938 char *page) \
939{ \
940 return __iscsi_tpg_auth_##name##_show(auth_to_tpg(item), page); \
941} \
942 \
943static ssize_t iscsi_tpg_auth_##name##_store(struct config_item *item, \
944 const char *page, size_t count) \
945{ \
946 return __iscsi_tpg_auth_##name##_store(auth_to_tpg(item), page, count); \
947} \
948 \
949CONFIGFS_ATTR(iscsi_tpg_auth_, name);
950
951
952DEF_TPG_AUTH_STR(userid, NAF_USERID_SET);
953DEF_TPG_AUTH_STR(password, NAF_PASSWORD_SET);
954DEF_TPG_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
955DEF_TPG_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
956
1084#define __DEF_TPG_AUTH_INT(prefix, name) \ 957#define __DEF_TPG_AUTH_INT(prefix, name) \
1085static ssize_t __iscsi_##prefix##_show_##name( \ 958static ssize_t __iscsi_##prefix##_##name##_show(struct se_portal_group *se_tpg, \
1086 struct se_portal_group *se_tpg, \ 959 char *page) \
1087 char *page) \
1088{ \ 960{ \
1089 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 961 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1090 struct iscsi_portal_group, tpg_se_tpg); \ 962 struct iscsi_portal_group, tpg_se_tpg); \
@@ -1096,67 +968,23 @@ static ssize_t __iscsi_##prefix##_show_##name( \
1096 return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \ 968 return snprintf(page, PAGE_SIZE, "%d\n", auth->name); \
1097} 969}
1098 970
1099#define DEF_TPG_AUTH_STR(name, flags) \
1100 __DEF_TPG_AUTH_STR(tpg_auth, name, flags) \
1101static ssize_t iscsi_tpg_auth_show_##name( \
1102 struct se_portal_group *se_tpg, \
1103 char *page) \
1104{ \
1105 return __iscsi_tpg_auth_show_##name(se_tpg, page); \
1106} \
1107 \
1108static ssize_t iscsi_tpg_auth_store_##name( \
1109 struct se_portal_group *se_tpg, \
1110 const char *page, \
1111 size_t count) \
1112{ \
1113 return __iscsi_tpg_auth_store_##name(se_tpg, page, count); \
1114}
1115
1116#define DEF_TPG_AUTH_INT(name) \ 971#define DEF_TPG_AUTH_INT(name) \
1117 __DEF_TPG_AUTH_INT(tpg_auth, name) \ 972 __DEF_TPG_AUTH_INT(tpg_auth, name) \
1118static ssize_t iscsi_tpg_auth_show_##name( \ 973static ssize_t iscsi_tpg_auth_##name##_show(struct config_item *item, \
1119 struct se_portal_group *se_tpg, \ 974 char *page) \
1120 char *page) \
1121{ \ 975{ \
1122 return __iscsi_tpg_auth_show_##name(se_tpg, page); \ 976 return __iscsi_tpg_auth_##name##_show(auth_to_tpg(item), page); \
1123} 977} \
1124 978CONFIGFS_ATTR_RO(iscsi_tpg_auth_, name);
1125#define TPG_AUTH_ATTR(_name, _mode) TF_TPG_AUTH_ATTR(iscsi, _name, _mode);
1126#define TPG_AUTH_ATTR_RO(_name) TF_TPG_AUTH_ATTR_RO(iscsi, _name);
1127 979
1128/*
1129 * * One-way authentication userid
1130 * */
1131DEF_TPG_AUTH_STR(userid, NAF_USERID_SET);
1132TPG_AUTH_ATTR(userid, S_IRUGO | S_IWUSR);
1133/*
1134 * * One-way authentication password
1135 * */
1136DEF_TPG_AUTH_STR(password, NAF_PASSWORD_SET);
1137TPG_AUTH_ATTR(password, S_IRUGO | S_IWUSR);
1138/*
1139 * * Enforce mutual authentication
1140 * */
1141DEF_TPG_AUTH_INT(authenticate_target); 980DEF_TPG_AUTH_INT(authenticate_target);
1142TPG_AUTH_ATTR_RO(authenticate_target);
1143/*
1144 * * Mutual authentication userid
1145 * */
1146DEF_TPG_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
1147TPG_AUTH_ATTR(userid_mutual, S_IRUGO | S_IWUSR);
1148/*
1149 * * Mutual authentication password
1150 * */
1151DEF_TPG_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
1152TPG_AUTH_ATTR(password_mutual, S_IRUGO | S_IWUSR);
1153 981
1154static struct configfs_attribute *lio_target_tpg_auth_attrs[] = { 982static struct configfs_attribute *lio_target_tpg_auth_attrs[] = {
1155 &iscsi_tpg_auth_userid.attr, 983 &iscsi_tpg_auth_attr_userid,
1156 &iscsi_tpg_auth_password.attr, 984 &iscsi_tpg_auth_attr_password,
1157 &iscsi_tpg_auth_authenticate_target.attr, 985 &iscsi_tpg_auth_attr_authenticate_target,
1158 &iscsi_tpg_auth_userid_mutual.attr, 986 &iscsi_tpg_auth_attr_userid_mutual,
1159 &iscsi_tpg_auth_password_mutual.attr, 987 &iscsi_tpg_auth_attr_password_mutual,
1160 NULL, 988 NULL,
1161}; 989};
1162 990
@@ -1165,10 +993,10 @@ static struct configfs_attribute *lio_target_tpg_auth_attrs[] = {
1165/* Start items for lio_target_tpg_param_cit */ 993/* Start items for lio_target_tpg_param_cit */
1166 994
1167#define DEF_TPG_PARAM(name) \ 995#define DEF_TPG_PARAM(name) \
1168static ssize_t iscsi_tpg_param_show_##name( \ 996static ssize_t iscsi_tpg_param_##name##_show(struct config_item *item, \
1169 struct se_portal_group *se_tpg, \ 997 char *page) \
1170 char *page) \
1171{ \ 998{ \
999 struct se_portal_group *se_tpg = param_to_tpg(item); \
1172 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 1000 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1173 struct iscsi_portal_group, tpg_se_tpg); \ 1001 struct iscsi_portal_group, tpg_se_tpg); \
1174 struct iscsi_param *param; \ 1002 struct iscsi_param *param; \
@@ -1188,11 +1016,10 @@ static ssize_t iscsi_tpg_param_show_##name( \
1188 iscsit_put_tpg(tpg); \ 1016 iscsit_put_tpg(tpg); \
1189 return rb; \ 1017 return rb; \
1190} \ 1018} \
1191static ssize_t iscsi_tpg_param_store_##name( \ 1019static ssize_t iscsi_tpg_param_##name##_store(struct config_item *item, \
1192 struct se_portal_group *se_tpg, \ 1020 const char *page, size_t count) \
1193 const char *page, \
1194 size_t count) \
1195{ \ 1021{ \
1022 struct se_portal_group *se_tpg = param_to_tpg(item); \
1196 struct iscsi_portal_group *tpg = container_of(se_tpg, \ 1023 struct iscsi_portal_group *tpg = container_of(se_tpg, \
1197 struct iscsi_portal_group, tpg_se_tpg); \ 1024 struct iscsi_portal_group, tpg_se_tpg); \
1198 char *buf; \ 1025 char *buf; \
@@ -1220,96 +1047,54 @@ static ssize_t iscsi_tpg_param_store_##name( \
1220out: \ 1047out: \
1221 kfree(buf); \ 1048 kfree(buf); \
1222 iscsit_put_tpg(tpg); \ 1049 iscsit_put_tpg(tpg); \
1223 return -EINVAL; \ 1050 return -EINVAL; \
1224} 1051} \
1225 1052CONFIGFS_ATTR(iscsi_tpg_param_, name)
1226#define TPG_PARAM_ATTR(_name, _mode) TF_TPG_PARAM_ATTR(iscsi, _name, _mode);
1227 1053
1228DEF_TPG_PARAM(AuthMethod); 1054DEF_TPG_PARAM(AuthMethod);
1229TPG_PARAM_ATTR(AuthMethod, S_IRUGO | S_IWUSR);
1230
1231DEF_TPG_PARAM(HeaderDigest); 1055DEF_TPG_PARAM(HeaderDigest);
1232TPG_PARAM_ATTR(HeaderDigest, S_IRUGO | S_IWUSR);
1233
1234DEF_TPG_PARAM(DataDigest); 1056DEF_TPG_PARAM(DataDigest);
1235TPG_PARAM_ATTR(DataDigest, S_IRUGO | S_IWUSR);
1236
1237DEF_TPG_PARAM(MaxConnections); 1057DEF_TPG_PARAM(MaxConnections);
1238TPG_PARAM_ATTR(MaxConnections, S_IRUGO | S_IWUSR);
1239
1240DEF_TPG_PARAM(TargetAlias); 1058DEF_TPG_PARAM(TargetAlias);
1241TPG_PARAM_ATTR(TargetAlias, S_IRUGO | S_IWUSR);
1242
1243DEF_TPG_PARAM(InitialR2T); 1059DEF_TPG_PARAM(InitialR2T);
1244TPG_PARAM_ATTR(InitialR2T, S_IRUGO | S_IWUSR);
1245
1246DEF_TPG_PARAM(ImmediateData); 1060DEF_TPG_PARAM(ImmediateData);
1247TPG_PARAM_ATTR(ImmediateData, S_IRUGO | S_IWUSR);
1248
1249DEF_TPG_PARAM(MaxRecvDataSegmentLength); 1061DEF_TPG_PARAM(MaxRecvDataSegmentLength);
1250TPG_PARAM_ATTR(MaxRecvDataSegmentLength, S_IRUGO | S_IWUSR);
1251
1252DEF_TPG_PARAM(MaxXmitDataSegmentLength); 1062DEF_TPG_PARAM(MaxXmitDataSegmentLength);
1253TPG_PARAM_ATTR(MaxXmitDataSegmentLength, S_IRUGO | S_IWUSR);
1254
1255DEF_TPG_PARAM(MaxBurstLength); 1063DEF_TPG_PARAM(MaxBurstLength);
1256TPG_PARAM_ATTR(MaxBurstLength, S_IRUGO | S_IWUSR);
1257
1258DEF_TPG_PARAM(FirstBurstLength); 1064DEF_TPG_PARAM(FirstBurstLength);
1259TPG_PARAM_ATTR(FirstBurstLength, S_IRUGO | S_IWUSR);
1260
1261DEF_TPG_PARAM(DefaultTime2Wait); 1065DEF_TPG_PARAM(DefaultTime2Wait);
1262TPG_PARAM_ATTR(DefaultTime2Wait, S_IRUGO | S_IWUSR);
1263
1264DEF_TPG_PARAM(DefaultTime2Retain); 1066DEF_TPG_PARAM(DefaultTime2Retain);
1265TPG_PARAM_ATTR(DefaultTime2Retain, S_IRUGO | S_IWUSR);
1266
1267DEF_TPG_PARAM(MaxOutstandingR2T); 1067DEF_TPG_PARAM(MaxOutstandingR2T);
1268TPG_PARAM_ATTR(MaxOutstandingR2T, S_IRUGO | S_IWUSR);
1269
1270DEF_TPG_PARAM(DataPDUInOrder); 1068DEF_TPG_PARAM(DataPDUInOrder);
1271TPG_PARAM_ATTR(DataPDUInOrder, S_IRUGO | S_IWUSR);
1272
1273DEF_TPG_PARAM(DataSequenceInOrder); 1069DEF_TPG_PARAM(DataSequenceInOrder);
1274TPG_PARAM_ATTR(DataSequenceInOrder, S_IRUGO | S_IWUSR);
1275
1276DEF_TPG_PARAM(ErrorRecoveryLevel); 1070DEF_TPG_PARAM(ErrorRecoveryLevel);
1277TPG_PARAM_ATTR(ErrorRecoveryLevel, S_IRUGO | S_IWUSR);
1278
1279DEF_TPG_PARAM(IFMarker); 1071DEF_TPG_PARAM(IFMarker);
1280TPG_PARAM_ATTR(IFMarker, S_IRUGO | S_IWUSR);
1281
1282DEF_TPG_PARAM(OFMarker); 1072DEF_TPG_PARAM(OFMarker);
1283TPG_PARAM_ATTR(OFMarker, S_IRUGO | S_IWUSR);
1284
1285DEF_TPG_PARAM(IFMarkInt); 1073DEF_TPG_PARAM(IFMarkInt);
1286TPG_PARAM_ATTR(IFMarkInt, S_IRUGO | S_IWUSR);
1287
1288DEF_TPG_PARAM(OFMarkInt); 1074DEF_TPG_PARAM(OFMarkInt);
1289TPG_PARAM_ATTR(OFMarkInt, S_IRUGO | S_IWUSR);
1290 1075
1291static struct configfs_attribute *lio_target_tpg_param_attrs[] = { 1076static struct configfs_attribute *lio_target_tpg_param_attrs[] = {
1292 &iscsi_tpg_param_AuthMethod.attr, 1077 &iscsi_tpg_param_attr_AuthMethod,
1293 &iscsi_tpg_param_HeaderDigest.attr, 1078 &iscsi_tpg_param_attr_HeaderDigest,
1294 &iscsi_tpg_param_DataDigest.attr, 1079 &iscsi_tpg_param_attr_DataDigest,
1295 &iscsi_tpg_param_MaxConnections.attr, 1080 &iscsi_tpg_param_attr_MaxConnections,
1296 &iscsi_tpg_param_TargetAlias.attr, 1081 &iscsi_tpg_param_attr_TargetAlias,
1297 &iscsi_tpg_param_InitialR2T.attr, 1082 &iscsi_tpg_param_attr_InitialR2T,
1298 &iscsi_tpg_param_ImmediateData.attr, 1083 &iscsi_tpg_param_attr_ImmediateData,
1299 &iscsi_tpg_param_MaxRecvDataSegmentLength.attr, 1084 &iscsi_tpg_param_attr_MaxRecvDataSegmentLength,
1300 &iscsi_tpg_param_MaxXmitDataSegmentLength.attr, 1085 &iscsi_tpg_param_attr_MaxXmitDataSegmentLength,
1301 &iscsi_tpg_param_MaxBurstLength.attr, 1086 &iscsi_tpg_param_attr_MaxBurstLength,
1302 &iscsi_tpg_param_FirstBurstLength.attr, 1087 &iscsi_tpg_param_attr_FirstBurstLength,
1303 &iscsi_tpg_param_DefaultTime2Wait.attr, 1088 &iscsi_tpg_param_attr_DefaultTime2Wait,
1304 &iscsi_tpg_param_DefaultTime2Retain.attr, 1089 &iscsi_tpg_param_attr_DefaultTime2Retain,
1305 &iscsi_tpg_param_MaxOutstandingR2T.attr, 1090 &iscsi_tpg_param_attr_MaxOutstandingR2T,
1306 &iscsi_tpg_param_DataPDUInOrder.attr, 1091 &iscsi_tpg_param_attr_DataPDUInOrder,
1307 &iscsi_tpg_param_DataSequenceInOrder.attr, 1092 &iscsi_tpg_param_attr_DataSequenceInOrder,
1308 &iscsi_tpg_param_ErrorRecoveryLevel.attr, 1093 &iscsi_tpg_param_attr_ErrorRecoveryLevel,
1309 &iscsi_tpg_param_IFMarker.attr, 1094 &iscsi_tpg_param_attr_IFMarker,
1310 &iscsi_tpg_param_OFMarker.attr, 1095 &iscsi_tpg_param_attr_OFMarker,
1311 &iscsi_tpg_param_IFMarkInt.attr, 1096 &iscsi_tpg_param_attr_IFMarkInt,
1312 &iscsi_tpg_param_OFMarkInt.attr, 1097 &iscsi_tpg_param_attr_OFMarkInt,
1313 NULL, 1098 NULL,
1314}; 1099};
1315 1100
@@ -1317,10 +1102,9 @@ static struct configfs_attribute *lio_target_tpg_param_attrs[] = {
1317 1102
1318/* Start items for lio_target_tpg_cit */ 1103/* Start items for lio_target_tpg_cit */
1319 1104
1320static ssize_t lio_target_tpg_show_enable( 1105static ssize_t lio_target_tpg_enable_show(struct config_item *item, char *page)
1321 struct se_portal_group *se_tpg,
1322 char *page)
1323{ 1106{
1107 struct se_portal_group *se_tpg = to_tpg(item);
1324 struct iscsi_portal_group *tpg = container_of(se_tpg, 1108 struct iscsi_portal_group *tpg = container_of(se_tpg,
1325 struct iscsi_portal_group, tpg_se_tpg); 1109 struct iscsi_portal_group, tpg_se_tpg);
1326 ssize_t len; 1110 ssize_t len;
@@ -1333,11 +1117,10 @@ static ssize_t lio_target_tpg_show_enable(
1333 return len; 1117 return len;
1334} 1118}
1335 1119
1336static ssize_t lio_target_tpg_store_enable( 1120static ssize_t lio_target_tpg_enable_store(struct config_item *item,
1337 struct se_portal_group *se_tpg, 1121 const char *page, size_t count)
1338 const char *page,
1339 size_t count)
1340{ 1122{
1123 struct se_portal_group *se_tpg = to_tpg(item);
1341 struct iscsi_portal_group *tpg = container_of(se_tpg, 1124 struct iscsi_portal_group *tpg = container_of(se_tpg,
1342 struct iscsi_portal_group, tpg_se_tpg); 1125 struct iscsi_portal_group, tpg_se_tpg);
1343 u32 op; 1126 u32 op;
@@ -1375,20 +1158,19 @@ out:
1375 return -EINVAL; 1158 return -EINVAL;
1376} 1159}
1377 1160
1378TF_TPG_BASE_ATTR(lio_target, enable, S_IRUGO | S_IWUSR);
1379 1161
1380static ssize_t lio_target_tpg_show_dynamic_sessions( 1162static ssize_t lio_target_tpg_dynamic_sessions_show(struct config_item *item,
1381 struct se_portal_group *se_tpg, 1163 char *page)
1382 char *page)
1383{ 1164{
1384 return target_show_dynamic_sessions(se_tpg, page); 1165 return target_show_dynamic_sessions(to_tpg(item), page);
1385} 1166}
1386 1167
1387TF_TPG_BASE_ATTR_RO(lio_target, dynamic_sessions); 1168CONFIGFS_ATTR(lio_target_tpg_, enable);
1169CONFIGFS_ATTR_RO(lio_target_tpg_, dynamic_sessions);
1388 1170
1389static struct configfs_attribute *lio_target_tpg_attrs[] = { 1171static struct configfs_attribute *lio_target_tpg_attrs[] = {
1390 &lio_target_tpg_enable.attr, 1172 &lio_target_tpg_attr_enable,
1391 &lio_target_tpg_dynamic_sessions.attr, 1173 &lio_target_tpg_attr_dynamic_sessions,
1392 NULL, 1174 NULL,
1393}; 1175};
1394 1176
@@ -1463,17 +1245,16 @@ static void lio_target_tiqn_deltpg(struct se_portal_group *se_tpg)
1463 1245
1464/* Start LIO-Target TIQN struct contig_item lio_target_cit */ 1246/* Start LIO-Target TIQN struct contig_item lio_target_cit */
1465 1247
1466static ssize_t lio_target_wwn_show_attr_lio_version( 1248static ssize_t lio_target_wwn_lio_version_show(struct config_item *item,
1467 struct target_fabric_configfs *tf, 1249 char *page)
1468 char *page)
1469{ 1250{
1470 return sprintf(page, "Datera Inc. iSCSI Target "ISCSIT_VERSION"\n"); 1251 return sprintf(page, "Datera Inc. iSCSI Target "ISCSIT_VERSION"\n");
1471} 1252}
1472 1253
1473TF_WWN_ATTR_RO(lio_target, lio_version); 1254CONFIGFS_ATTR_RO(lio_target_wwn_, lio_version);
1474 1255
1475static struct configfs_attribute *lio_target_wwn_attrs[] = { 1256static struct configfs_attribute *lio_target_wwn_attrs[] = {
1476 &lio_target_wwn_lio_version.attr, 1257 &lio_target_wwn_attr_lio_version,
1477 NULL, 1258 NULL,
1478}; 1259};
1479 1260
@@ -1552,77 +1333,47 @@ static void lio_target_call_coredeltiqn(
1552 1333
1553#define DEF_DISC_AUTH_STR(name, flags) \ 1334#define DEF_DISC_AUTH_STR(name, flags) \
1554 __DEF_NACL_AUTH_STR(disc, name, flags) \ 1335 __DEF_NACL_AUTH_STR(disc, name, flags) \
1555static ssize_t iscsi_disc_show_##name( \ 1336static ssize_t iscsi_disc_##name##_show(struct config_item *item, char *page) \
1556 struct target_fabric_configfs *tf, \
1557 char *page) \
1558{ \ 1337{ \
1559 return __iscsi_disc_show_##name(&iscsit_global->discovery_acl, \ 1338 return __iscsi_disc_##name##_show(&iscsit_global->discovery_acl,\
1560 page); \ 1339 page); \
1561} \ 1340} \
1562static ssize_t iscsi_disc_store_##name( \ 1341static ssize_t iscsi_disc_##name##_store(struct config_item *item, \
1563 struct target_fabric_configfs *tf, \ 1342 const char *page, size_t count) \
1564 const char *page, \
1565 size_t count) \
1566{ \ 1343{ \
1567 return __iscsi_disc_store_##name(&iscsit_global->discovery_acl, \ 1344 return __iscsi_disc_##name##_store(&iscsit_global->discovery_acl, \
1568 page, count); \ 1345 page, count); \
1569} 1346 \
1347} \
1348CONFIGFS_ATTR(iscsi_disc_, name)
1349
1350DEF_DISC_AUTH_STR(userid, NAF_USERID_SET);
1351DEF_DISC_AUTH_STR(password, NAF_PASSWORD_SET);
1352DEF_DISC_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
1353DEF_DISC_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
1570 1354
1571#define DEF_DISC_AUTH_INT(name) \ 1355#define DEF_DISC_AUTH_INT(name) \
1572 __DEF_NACL_AUTH_INT(disc, name) \ 1356 __DEF_NACL_AUTH_INT(disc, name) \
1573static ssize_t iscsi_disc_show_##name( \ 1357static ssize_t iscsi_disc_##name##_show(struct config_item *item, char *page) \
1574 struct target_fabric_configfs *tf, \
1575 char *page) \
1576{ \ 1358{ \
1577 return __iscsi_disc_show_##name(&iscsit_global->discovery_acl, \ 1359 return __iscsi_disc_##name##_show(&iscsit_global->discovery_acl, \
1578 page); \ 1360 page); \
1579} 1361} \
1580 1362CONFIGFS_ATTR_RO(iscsi_disc_, name)
1581#define DISC_AUTH_ATTR(_name, _mode) TF_DISC_ATTR(iscsi, _name, _mode)
1582#define DISC_AUTH_ATTR_RO(_name) TF_DISC_ATTR_RO(iscsi, _name)
1583 1363
1584/*
1585 * One-way authentication userid
1586 */
1587DEF_DISC_AUTH_STR(userid, NAF_USERID_SET);
1588DISC_AUTH_ATTR(userid, S_IRUGO | S_IWUSR);
1589/*
1590 * One-way authentication password
1591 */
1592DEF_DISC_AUTH_STR(password, NAF_PASSWORD_SET);
1593DISC_AUTH_ATTR(password, S_IRUGO | S_IWUSR);
1594/*
1595 * Enforce mutual authentication
1596 */
1597DEF_DISC_AUTH_INT(authenticate_target); 1364DEF_DISC_AUTH_INT(authenticate_target);
1598DISC_AUTH_ATTR_RO(authenticate_target);
1599/*
1600 * Mutual authentication userid
1601 */
1602DEF_DISC_AUTH_STR(userid_mutual, NAF_USERID_IN_SET);
1603DISC_AUTH_ATTR(userid_mutual, S_IRUGO | S_IWUSR);
1604/*
1605 * Mutual authentication password
1606 */
1607DEF_DISC_AUTH_STR(password_mutual, NAF_PASSWORD_IN_SET);
1608DISC_AUTH_ATTR(password_mutual, S_IRUGO | S_IWUSR);
1609 1365
1610/* 1366
1611 * enforce_discovery_auth 1367static ssize_t iscsi_disc_enforce_discovery_auth_show(struct config_item *item,
1612 */ 1368 char *page)
1613static ssize_t iscsi_disc_show_enforce_discovery_auth(
1614 struct target_fabric_configfs *tf,
1615 char *page)
1616{ 1369{
1617 struct iscsi_node_auth *discovery_auth = &iscsit_global->discovery_acl.node_auth; 1370 struct iscsi_node_auth *discovery_auth = &iscsit_global->discovery_acl.node_auth;
1618 1371
1619 return sprintf(page, "%d\n", discovery_auth->enforce_discovery_auth); 1372 return sprintf(page, "%d\n", discovery_auth->enforce_discovery_auth);
1620} 1373}
1621 1374
1622static ssize_t iscsi_disc_store_enforce_discovery_auth( 1375static ssize_t iscsi_disc_enforce_discovery_auth_store(struct config_item *item,
1623 struct target_fabric_configfs *tf, 1376 const char *page, size_t count)
1624 const char *page,
1625 size_t count)
1626{ 1377{
1627 struct iscsi_param *param; 1378 struct iscsi_param *param;
1628 struct iscsi_portal_group *discovery_tpg = iscsit_global->discovery_tpg; 1379 struct iscsi_portal_group *discovery_tpg = iscsit_global->discovery_tpg;
@@ -1677,15 +1428,15 @@ static ssize_t iscsi_disc_store_enforce_discovery_auth(
1677 return count; 1428 return count;
1678} 1429}
1679 1430
1680DISC_AUTH_ATTR(enforce_discovery_auth, S_IRUGO | S_IWUSR); 1431CONFIGFS_ATTR(iscsi_disc_, enforce_discovery_auth);
1681 1432
1682static struct configfs_attribute *lio_target_discovery_auth_attrs[] = { 1433static struct configfs_attribute *lio_target_discovery_auth_attrs[] = {
1683 &iscsi_disc_userid.attr, 1434 &iscsi_disc_attr_userid,
1684 &iscsi_disc_password.attr, 1435 &iscsi_disc_attr_password,
1685 &iscsi_disc_authenticate_target.attr, 1436 &iscsi_disc_attr_authenticate_target,
1686 &iscsi_disc_userid_mutual.attr, 1437 &iscsi_disc_attr_userid_mutual,
1687 &iscsi_disc_password_mutual.attr, 1438 &iscsi_disc_attr_password_mutual,
1688 &iscsi_disc_enforce_discovery_auth.attr, 1439 &iscsi_disc_attr_enforce_discovery_auth,
1689 NULL, 1440 NULL,
1690}; 1441};
1691 1442
diff --git a/drivers/target/iscsi/iscsi_target_stat.c b/drivers/target/iscsi/iscsi_target_stat.c
index 9dd94ff0b62c..411cb266a47d 100644
--- a/drivers/target/iscsi/iscsi_target_stat.c
+++ b/drivers/target/iscsi/iscsi_target_stat.c
@@ -21,7 +21,6 @@
21#include <linux/export.h> 21#include <linux/export.h>
22#include <scsi/iscsi_proto.h> 22#include <scsi/iscsi_proto.h>
23#include <target/target_core_base.h> 23#include <target/target_core_base.h>
24#include <target/configfs_macros.h>
25 24
26#include <target/iscsi/iscsi_target_core.h> 25#include <target/iscsi/iscsi_target_core.h>
27#include "iscsi_target_parameters.h" 26#include "iscsi_target_parameters.h"
@@ -50,76 +49,56 @@
50/* 49/*
51 * Instance Attributes Table 50 * Instance Attributes Table
52 */ 51 */
53CONFIGFS_EATTR_STRUCT(iscsi_stat_instance, iscsi_wwn_stat_grps); 52static struct iscsi_tiqn *iscsi_instance_tiqn(struct config_item *item)
54#define ISCSI_STAT_INSTANCE_ATTR(_name, _mode) \ 53{
55static struct iscsi_stat_instance_attribute \ 54 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
56 iscsi_stat_instance_##_name = \ 55 struct iscsi_wwn_stat_grps, iscsi_instance_group);
57 __CONFIGFS_EATTR(_name, _mode, \ 56 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
58 iscsi_stat_instance_show_attr_##_name, \ 57}
59 iscsi_stat_instance_store_attr_##_name);
60
61#define ISCSI_STAT_INSTANCE_ATTR_RO(_name) \
62static struct iscsi_stat_instance_attribute \
63 iscsi_stat_instance_##_name = \
64 __CONFIGFS_EATTR_RO(_name, \
65 iscsi_stat_instance_show_attr_##_name);
66
67static ssize_t iscsi_stat_instance_show_attr_inst(
68 struct iscsi_wwn_stat_grps *igrps, char *page)
69{
70 struct iscsi_tiqn *tiqn = container_of(igrps,
71 struct iscsi_tiqn, tiqn_stat_grps);
72 58
73 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 59static ssize_t iscsi_stat_instance_inst_show(struct config_item *item,
60 char *page)
61{
62 return snprintf(page, PAGE_SIZE, "%u\n",
63 iscsi_instance_tiqn(item)->tiqn_index);
74} 64}
75ISCSI_STAT_INSTANCE_ATTR_RO(inst);
76 65
77static ssize_t iscsi_stat_instance_show_attr_min_ver( 66static ssize_t iscsi_stat_instance_min_ver_show(struct config_item *item,
78 struct iscsi_wwn_stat_grps *igrps, char *page) 67 char *page)
79{ 68{
80 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION); 69 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION);
81} 70}
82ISCSI_STAT_INSTANCE_ATTR_RO(min_ver);
83 71
84static ssize_t iscsi_stat_instance_show_attr_max_ver( 72static ssize_t iscsi_stat_instance_max_ver_show(struct config_item *item,
85 struct iscsi_wwn_stat_grps *igrps, char *page) 73 char *page)
86{ 74{
87 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION); 75 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DRAFT20_VERSION);
88} 76}
89ISCSI_STAT_INSTANCE_ATTR_RO(max_ver);
90 77
91static ssize_t iscsi_stat_instance_show_attr_portals( 78static ssize_t iscsi_stat_instance_portals_show(struct config_item *item,
92 struct iscsi_wwn_stat_grps *igrps, char *page) 79 char *page)
93{ 80{
94 struct iscsi_tiqn *tiqn = container_of(igrps, 81 return snprintf(page, PAGE_SIZE, "%u\n",
95 struct iscsi_tiqn, tiqn_stat_grps); 82 iscsi_instance_tiqn(item)->tiqn_num_tpg_nps);
96
97 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_num_tpg_nps);
98} 83}
99ISCSI_STAT_INSTANCE_ATTR_RO(portals);
100 84
101static ssize_t iscsi_stat_instance_show_attr_nodes( 85static ssize_t iscsi_stat_instance_nodes_show(struct config_item *item,
102 struct iscsi_wwn_stat_grps *igrps, char *page) 86 char *page)
103{ 87{
104 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_INST_NUM_NODES); 88 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_INST_NUM_NODES);
105} 89}
106ISCSI_STAT_INSTANCE_ATTR_RO(nodes);
107 90
108static ssize_t iscsi_stat_instance_show_attr_sessions( 91static ssize_t iscsi_stat_instance_sessions_show(struct config_item *item,
109 struct iscsi_wwn_stat_grps *igrps, char *page) 92 char *page)
110{ 93{
111 struct iscsi_tiqn *tiqn = container_of(igrps, 94 return snprintf(page, PAGE_SIZE, "%u\n",
112 struct iscsi_tiqn, tiqn_stat_grps); 95 iscsi_instance_tiqn(item)->tiqn_nsessions);
113
114 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_nsessions);
115} 96}
116ISCSI_STAT_INSTANCE_ATTR_RO(sessions);
117 97
118static ssize_t iscsi_stat_instance_show_attr_fail_sess( 98static ssize_t iscsi_stat_instance_fail_sess_show(struct config_item *item,
119 struct iscsi_wwn_stat_grps *igrps, char *page) 99 char *page)
120{ 100{
121 struct iscsi_tiqn *tiqn = container_of(igrps, 101 struct iscsi_tiqn *tiqn = iscsi_instance_tiqn(item);
122 struct iscsi_tiqn, tiqn_stat_grps);
123 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 102 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
124 u32 sess_err_count; 103 u32 sess_err_count;
125 104
@@ -131,88 +110,84 @@ static ssize_t iscsi_stat_instance_show_attr_fail_sess(
131 110
132 return snprintf(page, PAGE_SIZE, "%u\n", sess_err_count); 111 return snprintf(page, PAGE_SIZE, "%u\n", sess_err_count);
133} 112}
134ISCSI_STAT_INSTANCE_ATTR_RO(fail_sess);
135 113
136static ssize_t iscsi_stat_instance_show_attr_fail_type( 114static ssize_t iscsi_stat_instance_fail_type_show(struct config_item *item,
137 struct iscsi_wwn_stat_grps *igrps, char *page) 115 char *page)
138{ 116{
139 struct iscsi_tiqn *tiqn = container_of(igrps, 117 struct iscsi_tiqn *tiqn = iscsi_instance_tiqn(item);
140 struct iscsi_tiqn, tiqn_stat_grps);
141 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 118 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
142 119
143 return snprintf(page, PAGE_SIZE, "%u\n", 120 return snprintf(page, PAGE_SIZE, "%u\n",
144 sess_err->last_sess_failure_type); 121 sess_err->last_sess_failure_type);
145} 122}
146ISCSI_STAT_INSTANCE_ATTR_RO(fail_type);
147 123
148static ssize_t iscsi_stat_instance_show_attr_fail_rem_name( 124static ssize_t iscsi_stat_instance_fail_rem_name_show(struct config_item *item,
149 struct iscsi_wwn_stat_grps *igrps, char *page) 125 char *page)
150{ 126{
151 struct iscsi_tiqn *tiqn = container_of(igrps, 127 struct iscsi_tiqn *tiqn = iscsi_instance_tiqn(item);
152 struct iscsi_tiqn, tiqn_stat_grps);
153 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 128 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
154 129
155 return snprintf(page, PAGE_SIZE, "%s\n", 130 return snprintf(page, PAGE_SIZE, "%s\n",
156 sess_err->last_sess_fail_rem_name[0] ? 131 sess_err->last_sess_fail_rem_name[0] ?
157 sess_err->last_sess_fail_rem_name : NONE); 132 sess_err->last_sess_fail_rem_name : NONE);
158} 133}
159ISCSI_STAT_INSTANCE_ATTR_RO(fail_rem_name);
160 134
161static ssize_t iscsi_stat_instance_show_attr_disc_time( 135static ssize_t iscsi_stat_instance_disc_time_show(struct config_item *item,
162 struct iscsi_wwn_stat_grps *igrps, char *page) 136 char *page)
163{ 137{
164 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DISCONTINUITY_TIME); 138 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_DISCONTINUITY_TIME);
165} 139}
166ISCSI_STAT_INSTANCE_ATTR_RO(disc_time);
167 140
168static ssize_t iscsi_stat_instance_show_attr_description( 141static ssize_t iscsi_stat_instance_description_show(struct config_item *item,
169 struct iscsi_wwn_stat_grps *igrps, char *page) 142 char *page)
170{ 143{
171 return snprintf(page, PAGE_SIZE, "%s\n", ISCSI_INST_DESCR); 144 return snprintf(page, PAGE_SIZE, "%s\n", ISCSI_INST_DESCR);
172} 145}
173ISCSI_STAT_INSTANCE_ATTR_RO(description);
174 146
175static ssize_t iscsi_stat_instance_show_attr_vendor( 147static ssize_t iscsi_stat_instance_vendor_show(struct config_item *item,
176 struct iscsi_wwn_stat_grps *igrps, char *page) 148 char *page)
177{ 149{
178 return snprintf(page, PAGE_SIZE, "Datera, Inc. iSCSI-Target\n"); 150 return snprintf(page, PAGE_SIZE, "Datera, Inc. iSCSI-Target\n");
179} 151}
180ISCSI_STAT_INSTANCE_ATTR_RO(vendor);
181 152
182static ssize_t iscsi_stat_instance_show_attr_version( 153static ssize_t iscsi_stat_instance_version_show(struct config_item *item,
183 struct iscsi_wwn_stat_grps *igrps, char *page) 154 char *page)
184{ 155{
185 return snprintf(page, PAGE_SIZE, "%s\n", ISCSIT_VERSION); 156 return snprintf(page, PAGE_SIZE, "%s\n", ISCSIT_VERSION);
186} 157}
187ISCSI_STAT_INSTANCE_ATTR_RO(version);
188 158
189CONFIGFS_EATTR_OPS(iscsi_stat_instance, iscsi_wwn_stat_grps, 159CONFIGFS_ATTR_RO(iscsi_stat_instance_, inst);
190 iscsi_instance_group); 160CONFIGFS_ATTR_RO(iscsi_stat_instance_, min_ver);
161CONFIGFS_ATTR_RO(iscsi_stat_instance_, max_ver);
162CONFIGFS_ATTR_RO(iscsi_stat_instance_, portals);
163CONFIGFS_ATTR_RO(iscsi_stat_instance_, nodes);
164CONFIGFS_ATTR_RO(iscsi_stat_instance_, sessions);
165CONFIGFS_ATTR_RO(iscsi_stat_instance_, fail_sess);
166CONFIGFS_ATTR_RO(iscsi_stat_instance_, fail_type);
167CONFIGFS_ATTR_RO(iscsi_stat_instance_, fail_rem_name);
168CONFIGFS_ATTR_RO(iscsi_stat_instance_, disc_time);
169CONFIGFS_ATTR_RO(iscsi_stat_instance_, description);
170CONFIGFS_ATTR_RO(iscsi_stat_instance_, vendor);
171CONFIGFS_ATTR_RO(iscsi_stat_instance_, version);
191 172
192static struct configfs_attribute *iscsi_stat_instance_attrs[] = { 173static struct configfs_attribute *iscsi_stat_instance_attrs[] = {
193 &iscsi_stat_instance_inst.attr, 174 &iscsi_stat_instance_attr_inst,
194 &iscsi_stat_instance_min_ver.attr, 175 &iscsi_stat_instance_attr_min_ver,
195 &iscsi_stat_instance_max_ver.attr, 176 &iscsi_stat_instance_attr_max_ver,
196 &iscsi_stat_instance_portals.attr, 177 &iscsi_stat_instance_attr_portals,
197 &iscsi_stat_instance_nodes.attr, 178 &iscsi_stat_instance_attr_nodes,
198 &iscsi_stat_instance_sessions.attr, 179 &iscsi_stat_instance_attr_sessions,
199 &iscsi_stat_instance_fail_sess.attr, 180 &iscsi_stat_instance_attr_fail_sess,
200 &iscsi_stat_instance_fail_type.attr, 181 &iscsi_stat_instance_attr_fail_type,
201 &iscsi_stat_instance_fail_rem_name.attr, 182 &iscsi_stat_instance_attr_fail_rem_name,
202 &iscsi_stat_instance_disc_time.attr, 183 &iscsi_stat_instance_attr_disc_time,
203 &iscsi_stat_instance_description.attr, 184 &iscsi_stat_instance_attr_description,
204 &iscsi_stat_instance_vendor.attr, 185 &iscsi_stat_instance_attr_vendor,
205 &iscsi_stat_instance_version.attr, 186 &iscsi_stat_instance_attr_version,
206 NULL, 187 NULL,
207}; 188};
208 189
209static struct configfs_item_operations iscsi_stat_instance_item_ops = {
210 .show_attribute = iscsi_stat_instance_attr_show,
211 .store_attribute = iscsi_stat_instance_attr_store,
212};
213
214struct config_item_type iscsi_stat_instance_cit = { 190struct config_item_type iscsi_stat_instance_cit = {
215 .ct_item_ops = &iscsi_stat_instance_item_ops,
216 .ct_attrs = iscsi_stat_instance_attrs, 191 .ct_attrs = iscsi_stat_instance_attrs,
217 .ct_owner = THIS_MODULE, 192 .ct_owner = THIS_MODULE,
218}; 193};
@@ -220,81 +195,61 @@ struct config_item_type iscsi_stat_instance_cit = {
220/* 195/*
221 * Instance Session Failure Stats Table 196 * Instance Session Failure Stats Table
222 */ 197 */
223CONFIGFS_EATTR_STRUCT(iscsi_stat_sess_err, iscsi_wwn_stat_grps); 198static struct iscsi_tiqn *iscsi_sess_err_tiqn(struct config_item *item)
224#define ISCSI_STAT_SESS_ERR_ATTR(_name, _mode) \ 199{
225static struct iscsi_stat_sess_err_attribute \ 200 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
226 iscsi_stat_sess_err_##_name = \ 201 struct iscsi_wwn_stat_grps, iscsi_sess_err_group);
227 __CONFIGFS_EATTR(_name, _mode, \ 202 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
228 iscsi_stat_sess_err_show_attr_##_name, \ 203}
229 iscsi_stat_sess_err_store_attr_##_name);
230
231#define ISCSI_STAT_SESS_ERR_ATTR_RO(_name) \
232static struct iscsi_stat_sess_err_attribute \
233 iscsi_stat_sess_err_##_name = \
234 __CONFIGFS_EATTR_RO(_name, \
235 iscsi_stat_sess_err_show_attr_##_name);
236
237static ssize_t iscsi_stat_sess_err_show_attr_inst(
238 struct iscsi_wwn_stat_grps *igrps, char *page)
239{
240 struct iscsi_tiqn *tiqn = container_of(igrps,
241 struct iscsi_tiqn, tiqn_stat_grps);
242 204
243 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 205static ssize_t iscsi_stat_sess_err_inst_show(struct config_item *item,
206 char *page)
207{
208 return snprintf(page, PAGE_SIZE, "%u\n",
209 iscsi_sess_err_tiqn(item)->tiqn_index);
244} 210}
245ISCSI_STAT_SESS_ERR_ATTR_RO(inst);
246 211
247static ssize_t iscsi_stat_sess_err_show_attr_digest_errors( 212static ssize_t iscsi_stat_sess_err_digest_errors_show(struct config_item *item,
248 struct iscsi_wwn_stat_grps *igrps, char *page) 213 char *page)
249{ 214{
250 struct iscsi_tiqn *tiqn = container_of(igrps, 215 struct iscsi_tiqn *tiqn = iscsi_sess_err_tiqn(item);
251 struct iscsi_tiqn, tiqn_stat_grps);
252 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 216 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
253 217
254 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->digest_errors); 218 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->digest_errors);
255} 219}
256ISCSI_STAT_SESS_ERR_ATTR_RO(digest_errors);
257 220
258static ssize_t iscsi_stat_sess_err_show_attr_cxn_errors( 221static ssize_t iscsi_stat_sess_err_cxn_errors_show(struct config_item *item,
259 struct iscsi_wwn_stat_grps *igrps, char *page) 222 char *page)
260{ 223{
261 struct iscsi_tiqn *tiqn = container_of(igrps, 224 struct iscsi_tiqn *tiqn = iscsi_sess_err_tiqn(item);
262 struct iscsi_tiqn, tiqn_stat_grps);
263 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 225 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
264 226
265 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->cxn_timeout_errors); 227 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->cxn_timeout_errors);
266} 228}
267ISCSI_STAT_SESS_ERR_ATTR_RO(cxn_errors);
268 229
269static ssize_t iscsi_stat_sess_err_show_attr_format_errors( 230static ssize_t iscsi_stat_sess_err_format_errors_show(struct config_item *item,
270 struct iscsi_wwn_stat_grps *igrps, char *page) 231 char *page)
271{ 232{
272 struct iscsi_tiqn *tiqn = container_of(igrps, 233 struct iscsi_tiqn *tiqn = iscsi_sess_err_tiqn(item);
273 struct iscsi_tiqn, tiqn_stat_grps);
274 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats; 234 struct iscsi_sess_err_stats *sess_err = &tiqn->sess_err_stats;
275 235
276 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->pdu_format_errors); 236 return snprintf(page, PAGE_SIZE, "%u\n", sess_err->pdu_format_errors);
277} 237}
278ISCSI_STAT_SESS_ERR_ATTR_RO(format_errors);
279 238
280CONFIGFS_EATTR_OPS(iscsi_stat_sess_err, iscsi_wwn_stat_grps, 239CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, inst);
281 iscsi_sess_err_group); 240CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, digest_errors);
241CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, cxn_errors);
242CONFIGFS_ATTR_RO(iscsi_stat_sess_err_, format_errors);
282 243
283static struct configfs_attribute *iscsi_stat_sess_err_attrs[] = { 244static struct configfs_attribute *iscsi_stat_sess_err_attrs[] = {
284 &iscsi_stat_sess_err_inst.attr, 245 &iscsi_stat_sess_err_attr_inst,
285 &iscsi_stat_sess_err_digest_errors.attr, 246 &iscsi_stat_sess_err_attr_digest_errors,
286 &iscsi_stat_sess_err_cxn_errors.attr, 247 &iscsi_stat_sess_err_attr_cxn_errors,
287 &iscsi_stat_sess_err_format_errors.attr, 248 &iscsi_stat_sess_err_attr_format_errors,
288 NULL, 249 NULL,
289}; 250};
290 251
291static struct configfs_item_operations iscsi_stat_sess_err_item_ops = {
292 .show_attribute = iscsi_stat_sess_err_attr_show,
293 .store_attribute = iscsi_stat_sess_err_attr_store,
294};
295
296struct config_item_type iscsi_stat_sess_err_cit = { 252struct config_item_type iscsi_stat_sess_err_cit = {
297 .ct_item_ops = &iscsi_stat_sess_err_item_ops,
298 .ct_attrs = iscsi_stat_sess_err_attrs, 253 .ct_attrs = iscsi_stat_sess_err_attrs,
299 .ct_owner = THIS_MODULE, 254 .ct_owner = THIS_MODULE,
300}; 255};
@@ -302,42 +257,30 @@ struct config_item_type iscsi_stat_sess_err_cit = {
302/* 257/*
303 * Target Attributes Table 258 * Target Attributes Table
304 */ 259 */
305CONFIGFS_EATTR_STRUCT(iscsi_stat_tgt_attr, iscsi_wwn_stat_grps); 260static struct iscsi_tiqn *iscsi_tgt_attr_tiqn(struct config_item *item)
306#define ISCSI_STAT_TGT_ATTR(_name, _mode) \ 261{
307static struct iscsi_stat_tgt_attr_attribute \ 262 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
308 iscsi_stat_tgt_attr_##_name = \ 263 struct iscsi_wwn_stat_grps, iscsi_tgt_attr_group);
309 __CONFIGFS_EATTR(_name, _mode, \ 264 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
310 iscsi_stat_tgt-attr_show_attr_##_name, \ 265}
311 iscsi_stat_tgt_attr_store_attr_##_name);
312
313#define ISCSI_STAT_TGT_ATTR_RO(_name) \
314static struct iscsi_stat_tgt_attr_attribute \
315 iscsi_stat_tgt_attr_##_name = \
316 __CONFIGFS_EATTR_RO(_name, \
317 iscsi_stat_tgt_attr_show_attr_##_name);
318
319static ssize_t iscsi_stat_tgt_attr_show_attr_inst(
320 struct iscsi_wwn_stat_grps *igrps, char *page)
321{
322 struct iscsi_tiqn *tiqn = container_of(igrps,
323 struct iscsi_tiqn, tiqn_stat_grps);
324 266
325 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 267static ssize_t iscsi_stat_tgt_attr_inst_show(struct config_item *item,
268 char *page)
269{
270 return snprintf(page, PAGE_SIZE, "%u\n",
271 iscsi_tgt_attr_tiqn(item)->tiqn_index);
326} 272}
327ISCSI_STAT_TGT_ATTR_RO(inst);
328 273
329static ssize_t iscsi_stat_tgt_attr_show_attr_indx( 274static ssize_t iscsi_stat_tgt_attr_indx_show(struct config_item *item,
330 struct iscsi_wwn_stat_grps *igrps, char *page) 275 char *page)
331{ 276{
332 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX); 277 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX);
333} 278}
334ISCSI_STAT_TGT_ATTR_RO(indx);
335 279
336static ssize_t iscsi_stat_tgt_attr_show_attr_login_fails( 280static ssize_t iscsi_stat_tgt_attr_login_fails_show(struct config_item *item,
337 struct iscsi_wwn_stat_grps *igrps, char *page) 281 char *page)
338{ 282{
339 struct iscsi_tiqn *tiqn = container_of(igrps, 283 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
340 struct iscsi_tiqn, tiqn_stat_grps);
341 struct iscsi_login_stats *lstat = &tiqn->login_stats; 284 struct iscsi_login_stats *lstat = &tiqn->login_stats;
342 u32 fail_count; 285 u32 fail_count;
343 286
@@ -349,13 +292,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_login_fails(
349 292
350 return snprintf(page, PAGE_SIZE, "%u\n", fail_count); 293 return snprintf(page, PAGE_SIZE, "%u\n", fail_count);
351} 294}
352ISCSI_STAT_TGT_ATTR_RO(login_fails);
353 295
354static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_time( 296static ssize_t iscsi_stat_tgt_attr_last_fail_time_show(struct config_item *item,
355 struct iscsi_wwn_stat_grps *igrps, char *page) 297 char *page)
356{ 298{
357 struct iscsi_tiqn *tiqn = container_of(igrps, 299 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
358 struct iscsi_tiqn, tiqn_stat_grps);
359 struct iscsi_login_stats *lstat = &tiqn->login_stats; 300 struct iscsi_login_stats *lstat = &tiqn->login_stats;
360 u32 last_fail_time; 301 u32 last_fail_time;
361 302
@@ -367,13 +308,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_time(
367 308
368 return snprintf(page, PAGE_SIZE, "%u\n", last_fail_time); 309 return snprintf(page, PAGE_SIZE, "%u\n", last_fail_time);
369} 310}
370ISCSI_STAT_TGT_ATTR_RO(last_fail_time);
371 311
372static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_type( 312static ssize_t iscsi_stat_tgt_attr_last_fail_type_show(struct config_item *item,
373 struct iscsi_wwn_stat_grps *igrps, char *page) 313 char *page)
374{ 314{
375 struct iscsi_tiqn *tiqn = container_of(igrps, 315 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
376 struct iscsi_tiqn, tiqn_stat_grps);
377 struct iscsi_login_stats *lstat = &tiqn->login_stats; 316 struct iscsi_login_stats *lstat = &tiqn->login_stats;
378 u32 last_fail_type; 317 u32 last_fail_type;
379 318
@@ -383,13 +322,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_last_fail_type(
383 322
384 return snprintf(page, PAGE_SIZE, "%u\n", last_fail_type); 323 return snprintf(page, PAGE_SIZE, "%u\n", last_fail_type);
385} 324}
386ISCSI_STAT_TGT_ATTR_RO(last_fail_type);
387 325
388static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_name( 326static ssize_t iscsi_stat_tgt_attr_fail_intr_name_show(struct config_item *item,
389 struct iscsi_wwn_stat_grps *igrps, char *page) 327 char *page)
390{ 328{
391 struct iscsi_tiqn *tiqn = container_of(igrps, 329 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
392 struct iscsi_tiqn, tiqn_stat_grps);
393 struct iscsi_login_stats *lstat = &tiqn->login_stats; 330 struct iscsi_login_stats *lstat = &tiqn->login_stats;
394 unsigned char buf[224]; 331 unsigned char buf[224];
395 332
@@ -400,13 +337,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_name(
400 337
401 return snprintf(page, PAGE_SIZE, "%s\n", buf); 338 return snprintf(page, PAGE_SIZE, "%s\n", buf);
402} 339}
403ISCSI_STAT_TGT_ATTR_RO(fail_intr_name);
404 340
405static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr_type( 341static ssize_t iscsi_stat_tgt_attr_fail_intr_addr_type_show(struct config_item *item,
406 struct iscsi_wwn_stat_grps *igrps, char *page) 342 char *page)
407{ 343{
408 struct iscsi_tiqn *tiqn = container_of(igrps, 344 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
409 struct iscsi_tiqn, tiqn_stat_grps);
410 struct iscsi_login_stats *lstat = &tiqn->login_stats; 345 struct iscsi_login_stats *lstat = &tiqn->login_stats;
411 int ret; 346 int ret;
412 347
@@ -419,13 +354,11 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr_type(
419 354
420 return ret; 355 return ret;
421} 356}
422ISCSI_STAT_TGT_ATTR_RO(fail_intr_addr_type);
423 357
424static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr( 358static ssize_t iscsi_stat_tgt_attr_fail_intr_addr_show(struct config_item *item,
425 struct iscsi_wwn_stat_grps *igrps, char *page) 359 char *page)
426{ 360{
427 struct iscsi_tiqn *tiqn = container_of(igrps, 361 struct iscsi_tiqn *tiqn = iscsi_tgt_attr_tiqn(item);
428 struct iscsi_tiqn, tiqn_stat_grps);
429 struct iscsi_login_stats *lstat = &tiqn->login_stats; 362 struct iscsi_login_stats *lstat = &tiqn->login_stats;
430 int ret; 363 int ret;
431 364
@@ -435,30 +368,29 @@ static ssize_t iscsi_stat_tgt_attr_show_attr_fail_intr_addr(
435 368
436 return ret; 369 return ret;
437} 370}
438ISCSI_STAT_TGT_ATTR_RO(fail_intr_addr);
439 371
440CONFIGFS_EATTR_OPS(iscsi_stat_tgt_attr, iscsi_wwn_stat_grps, 372CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, inst);
441 iscsi_tgt_attr_group); 373CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, indx);
374CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, login_fails);
375CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, last_fail_time);
376CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, last_fail_type);
377CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, fail_intr_name);
378CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, fail_intr_addr_type);
379CONFIGFS_ATTR_RO(iscsi_stat_tgt_attr_, fail_intr_addr);
442 380
443static struct configfs_attribute *iscsi_stat_tgt_attr_attrs[] = { 381static struct configfs_attribute *iscsi_stat_tgt_attr_attrs[] = {
444 &iscsi_stat_tgt_attr_inst.attr, 382 &iscsi_stat_tgt_attr_attr_inst,
445 &iscsi_stat_tgt_attr_indx.attr, 383 &iscsi_stat_tgt_attr_attr_indx,
446 &iscsi_stat_tgt_attr_login_fails.attr, 384 &iscsi_stat_tgt_attr_attr_login_fails,
447 &iscsi_stat_tgt_attr_last_fail_time.attr, 385 &iscsi_stat_tgt_attr_attr_last_fail_time,
448 &iscsi_stat_tgt_attr_last_fail_type.attr, 386 &iscsi_stat_tgt_attr_attr_last_fail_type,
449 &iscsi_stat_tgt_attr_fail_intr_name.attr, 387 &iscsi_stat_tgt_attr_attr_fail_intr_name,
450 &iscsi_stat_tgt_attr_fail_intr_addr_type.attr, 388 &iscsi_stat_tgt_attr_attr_fail_intr_addr_type,
451 &iscsi_stat_tgt_attr_fail_intr_addr.attr, 389 &iscsi_stat_tgt_attr_attr_fail_intr_addr,
452 NULL, 390 NULL,
453}; 391};
454 392
455static struct configfs_item_operations iscsi_stat_tgt_attr_item_ops = {
456 .show_attribute = iscsi_stat_tgt_attr_attr_show,
457 .store_attribute = iscsi_stat_tgt_attr_attr_store,
458};
459
460struct config_item_type iscsi_stat_tgt_attr_cit = { 393struct config_item_type iscsi_stat_tgt_attr_cit = {
461 .ct_item_ops = &iscsi_stat_tgt_attr_item_ops,
462 .ct_attrs = iscsi_stat_tgt_attr_attrs, 394 .ct_attrs = iscsi_stat_tgt_attr_attrs,
463 .ct_owner = THIS_MODULE, 395 .ct_owner = THIS_MODULE,
464}; 396};
@@ -466,42 +398,29 @@ struct config_item_type iscsi_stat_tgt_attr_cit = {
466/* 398/*
467 * Target Login Stats Table 399 * Target Login Stats Table
468 */ 400 */
469CONFIGFS_EATTR_STRUCT(iscsi_stat_login, iscsi_wwn_stat_grps); 401static struct iscsi_tiqn *iscsi_login_stat_tiqn(struct config_item *item)
470#define ISCSI_STAT_LOGIN(_name, _mode) \ 402{
471static struct iscsi_stat_login_attribute \ 403 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
472 iscsi_stat_login_##_name = \ 404 struct iscsi_wwn_stat_grps, iscsi_login_stats_group);
473 __CONFIGFS_EATTR(_name, _mode, \ 405 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
474 iscsi_stat_login_show_attr_##_name, \ 406}
475 iscsi_stat_login_store_attr_##_name);
476
477#define ISCSI_STAT_LOGIN_RO(_name) \
478static struct iscsi_stat_login_attribute \
479 iscsi_stat_login_##_name = \
480 __CONFIGFS_EATTR_RO(_name, \
481 iscsi_stat_login_show_attr_##_name);
482
483static ssize_t iscsi_stat_login_show_attr_inst(
484 struct iscsi_wwn_stat_grps *igrps, char *page)
485{
486 struct iscsi_tiqn *tiqn = container_of(igrps,
487 struct iscsi_tiqn, tiqn_stat_grps);
488 407
489 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 408static ssize_t iscsi_stat_login_inst_show(struct config_item *item, char *page)
409{
410 return snprintf(page, PAGE_SIZE, "%u\n",
411 iscsi_login_stat_tiqn(item)->tiqn_index);
490} 412}
491ISCSI_STAT_LOGIN_RO(inst);
492 413
493static ssize_t iscsi_stat_login_show_attr_indx( 414static ssize_t iscsi_stat_login_indx_show(struct config_item *item,
494 struct iscsi_wwn_stat_grps *igrps, char *page) 415 char *page)
495{ 416{
496 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX); 417 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX);
497} 418}
498ISCSI_STAT_LOGIN_RO(indx);
499 419
500static ssize_t iscsi_stat_login_show_attr_accepts( 420static ssize_t iscsi_stat_login_accepts_show(struct config_item *item,
501 struct iscsi_wwn_stat_grps *igrps, char *page) 421 char *page)
502{ 422{
503 struct iscsi_tiqn *tiqn = container_of(igrps, 423 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
504 struct iscsi_tiqn, tiqn_stat_grps);
505 struct iscsi_login_stats *lstat = &tiqn->login_stats; 424 struct iscsi_login_stats *lstat = &tiqn->login_stats;
506 ssize_t ret; 425 ssize_t ret;
507 426
@@ -511,13 +430,11 @@ static ssize_t iscsi_stat_login_show_attr_accepts(
511 430
512 return ret; 431 return ret;
513} 432}
514ISCSI_STAT_LOGIN_RO(accepts);
515 433
516static ssize_t iscsi_stat_login_show_attr_other_fails( 434static ssize_t iscsi_stat_login_other_fails_show(struct config_item *item,
517 struct iscsi_wwn_stat_grps *igrps, char *page) 435 char *page)
518{ 436{
519 struct iscsi_tiqn *tiqn = container_of(igrps, 437 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
520 struct iscsi_tiqn, tiqn_stat_grps);
521 struct iscsi_login_stats *lstat = &tiqn->login_stats; 438 struct iscsi_login_stats *lstat = &tiqn->login_stats;
522 ssize_t ret; 439 ssize_t ret;
523 440
@@ -527,13 +444,11 @@ static ssize_t iscsi_stat_login_show_attr_other_fails(
527 444
528 return ret; 445 return ret;
529} 446}
530ISCSI_STAT_LOGIN_RO(other_fails);
531 447
532static ssize_t iscsi_stat_login_show_attr_redirects( 448static ssize_t iscsi_stat_login_redirects_show(struct config_item *item,
533 struct iscsi_wwn_stat_grps *igrps, char *page) 449 char *page)
534{ 450{
535 struct iscsi_tiqn *tiqn = container_of(igrps, 451 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
536 struct iscsi_tiqn, tiqn_stat_grps);
537 struct iscsi_login_stats *lstat = &tiqn->login_stats; 452 struct iscsi_login_stats *lstat = &tiqn->login_stats;
538 ssize_t ret; 453 ssize_t ret;
539 454
@@ -543,13 +458,11 @@ static ssize_t iscsi_stat_login_show_attr_redirects(
543 458
544 return ret; 459 return ret;
545} 460}
546ISCSI_STAT_LOGIN_RO(redirects);
547 461
548static ssize_t iscsi_stat_login_show_attr_authorize_fails( 462static ssize_t iscsi_stat_login_authorize_fails_show(struct config_item *item,
549 struct iscsi_wwn_stat_grps *igrps, char *page) 463 char *page)
550{ 464{
551 struct iscsi_tiqn *tiqn = container_of(igrps, 465 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
552 struct iscsi_tiqn, tiqn_stat_grps);
553 struct iscsi_login_stats *lstat = &tiqn->login_stats; 466 struct iscsi_login_stats *lstat = &tiqn->login_stats;
554 ssize_t ret; 467 ssize_t ret;
555 468
@@ -559,13 +472,11 @@ static ssize_t iscsi_stat_login_show_attr_authorize_fails(
559 472
560 return ret; 473 return ret;
561} 474}
562ISCSI_STAT_LOGIN_RO(authorize_fails);
563 475
564static ssize_t iscsi_stat_login_show_attr_authenticate_fails( 476static ssize_t iscsi_stat_login_authenticate_fails_show(
565 struct iscsi_wwn_stat_grps *igrps, char *page) 477 struct config_item *item, char *page)
566{ 478{
567 struct iscsi_tiqn *tiqn = container_of(igrps, 479 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
568 struct iscsi_tiqn, tiqn_stat_grps);
569 struct iscsi_login_stats *lstat = &tiqn->login_stats; 480 struct iscsi_login_stats *lstat = &tiqn->login_stats;
570 ssize_t ret; 481 ssize_t ret;
571 482
@@ -575,13 +486,11 @@ static ssize_t iscsi_stat_login_show_attr_authenticate_fails(
575 486
576 return ret; 487 return ret;
577} 488}
578ISCSI_STAT_LOGIN_RO(authenticate_fails);
579 489
580static ssize_t iscsi_stat_login_show_attr_negotiate_fails( 490static ssize_t iscsi_stat_login_negotiate_fails_show(struct config_item *item,
581 struct iscsi_wwn_stat_grps *igrps, char *page) 491 char *page)
582{ 492{
583 struct iscsi_tiqn *tiqn = container_of(igrps, 493 struct iscsi_tiqn *tiqn = iscsi_login_stat_tiqn(item);
584 struct iscsi_tiqn, tiqn_stat_grps);
585 struct iscsi_login_stats *lstat = &tiqn->login_stats; 494 struct iscsi_login_stats *lstat = &tiqn->login_stats;
586 ssize_t ret; 495 ssize_t ret;
587 496
@@ -591,30 +500,29 @@ static ssize_t iscsi_stat_login_show_attr_negotiate_fails(
591 500
592 return ret; 501 return ret;
593} 502}
594ISCSI_STAT_LOGIN_RO(negotiate_fails);
595 503
596CONFIGFS_EATTR_OPS(iscsi_stat_login, iscsi_wwn_stat_grps, 504CONFIGFS_ATTR_RO(iscsi_stat_login_, inst);
597 iscsi_login_stats_group); 505CONFIGFS_ATTR_RO(iscsi_stat_login_, indx);
506CONFIGFS_ATTR_RO(iscsi_stat_login_, accepts);
507CONFIGFS_ATTR_RO(iscsi_stat_login_, other_fails);
508CONFIGFS_ATTR_RO(iscsi_stat_login_, redirects);
509CONFIGFS_ATTR_RO(iscsi_stat_login_, authorize_fails);
510CONFIGFS_ATTR_RO(iscsi_stat_login_, authenticate_fails);
511CONFIGFS_ATTR_RO(iscsi_stat_login_, negotiate_fails);
598 512
599static struct configfs_attribute *iscsi_stat_login_stats_attrs[] = { 513static struct configfs_attribute *iscsi_stat_login_stats_attrs[] = {
600 &iscsi_stat_login_inst.attr, 514 &iscsi_stat_login_attr_inst,
601 &iscsi_stat_login_indx.attr, 515 &iscsi_stat_login_attr_indx,
602 &iscsi_stat_login_accepts.attr, 516 &iscsi_stat_login_attr_accepts,
603 &iscsi_stat_login_other_fails.attr, 517 &iscsi_stat_login_attr_other_fails,
604 &iscsi_stat_login_redirects.attr, 518 &iscsi_stat_login_attr_redirects,
605 &iscsi_stat_login_authorize_fails.attr, 519 &iscsi_stat_login_attr_authorize_fails,
606 &iscsi_stat_login_authenticate_fails.attr, 520 &iscsi_stat_login_attr_authenticate_fails,
607 &iscsi_stat_login_negotiate_fails.attr, 521 &iscsi_stat_login_attr_negotiate_fails,
608 NULL, 522 NULL,
609}; 523};
610 524
611static struct configfs_item_operations iscsi_stat_login_stats_item_ops = {
612 .show_attribute = iscsi_stat_login_attr_show,
613 .store_attribute = iscsi_stat_login_attr_store,
614};
615
616struct config_item_type iscsi_stat_login_cit = { 525struct config_item_type iscsi_stat_login_cit = {
617 .ct_item_ops = &iscsi_stat_login_stats_item_ops,
618 .ct_attrs = iscsi_stat_login_stats_attrs, 526 .ct_attrs = iscsi_stat_login_stats_attrs,
619 .ct_owner = THIS_MODULE, 527 .ct_owner = THIS_MODULE,
620}; 528};
@@ -622,78 +530,56 @@ struct config_item_type iscsi_stat_login_cit = {
622/* 530/*
623 * Target Logout Stats Table 531 * Target Logout Stats Table
624 */ 532 */
625 533static struct iscsi_tiqn *iscsi_logout_stat_tiqn(struct config_item *item)
626CONFIGFS_EATTR_STRUCT(iscsi_stat_logout, iscsi_wwn_stat_grps);
627#define ISCSI_STAT_LOGOUT(_name, _mode) \
628static struct iscsi_stat_logout_attribute \
629 iscsi_stat_logout_##_name = \
630 __CONFIGFS_EATTR(_name, _mode, \
631 iscsi_stat_logout_show_attr_##_name, \
632 iscsi_stat_logout_store_attr_##_name);
633
634#define ISCSI_STAT_LOGOUT_RO(_name) \
635static struct iscsi_stat_logout_attribute \
636 iscsi_stat_logout_##_name = \
637 __CONFIGFS_EATTR_RO(_name, \
638 iscsi_stat_logout_show_attr_##_name);
639
640static ssize_t iscsi_stat_logout_show_attr_inst(
641 struct iscsi_wwn_stat_grps *igrps, char *page)
642{ 534{
643 struct iscsi_tiqn *tiqn = container_of(igrps, 535 struct iscsi_wwn_stat_grps *igrps = container_of(to_config_group(item),
644 struct iscsi_tiqn, tiqn_stat_grps); 536 struct iscsi_wwn_stat_grps, iscsi_logout_stats_group);
537 return container_of(igrps, struct iscsi_tiqn, tiqn_stat_grps);
538}
645 539
646 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 540static ssize_t iscsi_stat_logout_inst_show(struct config_item *item, char *page)
541{
542 return snprintf(page, PAGE_SIZE, "%u\n",
543 iscsi_logout_stat_tiqn(item)->tiqn_index);
647} 544}
648ISCSI_STAT_LOGOUT_RO(inst);
649 545
650static ssize_t iscsi_stat_logout_show_attr_indx( 546static ssize_t iscsi_stat_logout_indx_show(struct config_item *item, char *page)
651 struct iscsi_wwn_stat_grps *igrps, char *page)
652{ 547{
653 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX); 548 return snprintf(page, PAGE_SIZE, "%u\n", ISCSI_NODE_INDEX);
654} 549}
655ISCSI_STAT_LOGOUT_RO(indx);
656 550
657static ssize_t iscsi_stat_logout_show_attr_normal_logouts( 551static ssize_t iscsi_stat_logout_normal_logouts_show(struct config_item *item,
658 struct iscsi_wwn_stat_grps *igrps, char *page) 552 char *page)
659{ 553{
660 struct iscsi_tiqn *tiqn = container_of(igrps, 554 struct iscsi_tiqn *tiqn = iscsi_logout_stat_tiqn(item);
661 struct iscsi_tiqn, tiqn_stat_grps);
662 struct iscsi_logout_stats *lstats = &tiqn->logout_stats; 555 struct iscsi_logout_stats *lstats = &tiqn->logout_stats;
663 556
664 return snprintf(page, PAGE_SIZE, "%u\n", lstats->normal_logouts); 557 return snprintf(page, PAGE_SIZE, "%u\n", lstats->normal_logouts);
665} 558}
666ISCSI_STAT_LOGOUT_RO(normal_logouts);
667 559
668static ssize_t iscsi_stat_logout_show_attr_abnormal_logouts( 560static ssize_t iscsi_stat_logout_abnormal_logouts_show(struct config_item *item,
669 struct iscsi_wwn_stat_grps *igrps, char *page) 561 char *page)
670{ 562{
671 struct iscsi_tiqn *tiqn = container_of(igrps, 563 struct iscsi_tiqn *tiqn = iscsi_logout_stat_tiqn(item);
672 struct iscsi_tiqn, tiqn_stat_grps);
673 struct iscsi_logout_stats *lstats = &tiqn->logout_stats; 564 struct iscsi_logout_stats *lstats = &tiqn->logout_stats;
674 565
675 return snprintf(page, PAGE_SIZE, "%u\n", lstats->abnormal_logouts); 566 return snprintf(page, PAGE_SIZE, "%u\n", lstats->abnormal_logouts);
676} 567}
677ISCSI_STAT_LOGOUT_RO(abnormal_logouts);
678 568
679CONFIGFS_EATTR_OPS(iscsi_stat_logout, iscsi_wwn_stat_grps, 569CONFIGFS_ATTR_RO(iscsi_stat_logout_, inst);
680 iscsi_logout_stats_group); 570CONFIGFS_ATTR_RO(iscsi_stat_logout_, indx);
571CONFIGFS_ATTR_RO(iscsi_stat_logout_, normal_logouts);
572CONFIGFS_ATTR_RO(iscsi_stat_logout_, abnormal_logouts);
681 573
682static struct configfs_attribute *iscsi_stat_logout_stats_attrs[] = { 574static struct configfs_attribute *iscsi_stat_logout_stats_attrs[] = {
683 &iscsi_stat_logout_inst.attr, 575 &iscsi_stat_logout_attr_inst,
684 &iscsi_stat_logout_indx.attr, 576 &iscsi_stat_logout_attr_indx,
685 &iscsi_stat_logout_normal_logouts.attr, 577 &iscsi_stat_logout_attr_normal_logouts,
686 &iscsi_stat_logout_abnormal_logouts.attr, 578 &iscsi_stat_logout_attr_abnormal_logouts,
687 NULL, 579 NULL,
688}; 580};
689 581
690static struct configfs_item_operations iscsi_stat_logout_stats_item_ops = {
691 .show_attribute = iscsi_stat_logout_attr_show,
692 .store_attribute = iscsi_stat_logout_attr_store,
693};
694
695struct config_item_type iscsi_stat_logout_cit = { 582struct config_item_type iscsi_stat_logout_cit = {
696 .ct_item_ops = &iscsi_stat_logout_stats_item_ops,
697 .ct_attrs = iscsi_stat_logout_stats_attrs, 583 .ct_attrs = iscsi_stat_logout_stats_attrs,
698 .ct_owner = THIS_MODULE, 584 .ct_owner = THIS_MODULE,
699}; 585};
@@ -701,39 +587,26 @@ struct config_item_type iscsi_stat_logout_cit = {
701/* 587/*
702 * Session Stats Table 588 * Session Stats Table
703 */ 589 */
590static struct iscsi_node_acl *iscsi_stat_nacl(struct config_item *item)
591{
592 struct iscsi_node_stat_grps *igrps = container_of(to_config_group(item),
593 struct iscsi_node_stat_grps, iscsi_sess_stats_group);
594 return container_of(igrps, struct iscsi_node_acl, node_stat_grps);
595}
704 596
705CONFIGFS_EATTR_STRUCT(iscsi_stat_sess, iscsi_node_stat_grps); 597static ssize_t iscsi_stat_sess_inst_show(struct config_item *item, char *page)
706#define ISCSI_STAT_SESS(_name, _mode) \ 598{
707static struct iscsi_stat_sess_attribute \ 599 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
708 iscsi_stat_sess_##_name = \
709 __CONFIGFS_EATTR(_name, _mode, \
710 iscsi_stat_sess_show_attr_##_name, \
711 iscsi_stat_sess_store_attr_##_name);
712
713#define ISCSI_STAT_SESS_RO(_name) \
714static struct iscsi_stat_sess_attribute \
715 iscsi_stat_sess_##_name = \
716 __CONFIGFS_EATTR_RO(_name, \
717 iscsi_stat_sess_show_attr_##_name);
718
719static ssize_t iscsi_stat_sess_show_attr_inst(
720 struct iscsi_node_stat_grps *igrps, char *page)
721{
722 struct iscsi_node_acl *acl = container_of(igrps,
723 struct iscsi_node_acl, node_stat_grps);
724 struct se_wwn *wwn = acl->se_node_acl.se_tpg->se_tpg_wwn; 600 struct se_wwn *wwn = acl->se_node_acl.se_tpg->se_tpg_wwn;
725 struct iscsi_tiqn *tiqn = container_of(wwn, 601 struct iscsi_tiqn *tiqn = container_of(wwn,
726 struct iscsi_tiqn, tiqn_wwn); 602 struct iscsi_tiqn, tiqn_wwn);
727 603
728 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index); 604 return snprintf(page, PAGE_SIZE, "%u\n", tiqn->tiqn_index);
729} 605}
730ISCSI_STAT_SESS_RO(inst);
731 606
732static ssize_t iscsi_stat_sess_show_attr_node( 607static ssize_t iscsi_stat_sess_node_show(struct config_item *item, char *page)
733 struct iscsi_node_stat_grps *igrps, char *page)
734{ 608{
735 struct iscsi_node_acl *acl = container_of(igrps, 609 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
736 struct iscsi_node_acl, node_stat_grps);
737 struct se_node_acl *se_nacl = &acl->se_node_acl; 610 struct se_node_acl *se_nacl = &acl->se_node_acl;
738 struct iscsi_session *sess; 611 struct iscsi_session *sess;
739 struct se_session *se_sess; 612 struct se_session *se_sess;
@@ -751,13 +624,10 @@ static ssize_t iscsi_stat_sess_show_attr_node(
751 624
752 return ret; 625 return ret;
753} 626}
754ISCSI_STAT_SESS_RO(node);
755 627
756static ssize_t iscsi_stat_sess_show_attr_indx( 628static ssize_t iscsi_stat_sess_indx_show(struct config_item *item, char *page)
757 struct iscsi_node_stat_grps *igrps, char *page)
758{ 629{
759 struct iscsi_node_acl *acl = container_of(igrps, 630 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
760 struct iscsi_node_acl, node_stat_grps);
761 struct se_node_acl *se_nacl = &acl->se_node_acl; 631 struct se_node_acl *se_nacl = &acl->se_node_acl;
762 struct iscsi_session *sess; 632 struct iscsi_session *sess;
763 struct se_session *se_sess; 633 struct se_session *se_sess;
@@ -775,13 +645,11 @@ static ssize_t iscsi_stat_sess_show_attr_indx(
775 645
776 return ret; 646 return ret;
777} 647}
778ISCSI_STAT_SESS_RO(indx);
779 648
780static ssize_t iscsi_stat_sess_show_attr_cmd_pdus( 649static ssize_t iscsi_stat_sess_cmd_pdus_show(struct config_item *item,
781 struct iscsi_node_stat_grps *igrps, char *page) 650 char *page)
782{ 651{
783 struct iscsi_node_acl *acl = container_of(igrps, 652 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
784 struct iscsi_node_acl, node_stat_grps);
785 struct se_node_acl *se_nacl = &acl->se_node_acl; 653 struct se_node_acl *se_nacl = &acl->se_node_acl;
786 struct iscsi_session *sess; 654 struct iscsi_session *sess;
787 struct se_session *se_sess; 655 struct se_session *se_sess;
@@ -799,13 +667,11 @@ static ssize_t iscsi_stat_sess_show_attr_cmd_pdus(
799 667
800 return ret; 668 return ret;
801} 669}
802ISCSI_STAT_SESS_RO(cmd_pdus);
803 670
804static ssize_t iscsi_stat_sess_show_attr_rsp_pdus( 671static ssize_t iscsi_stat_sess_rsp_pdus_show(struct config_item *item,
805 struct iscsi_node_stat_grps *igrps, char *page) 672 char *page)
806{ 673{
807 struct iscsi_node_acl *acl = container_of(igrps, 674 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
808 struct iscsi_node_acl, node_stat_grps);
809 struct se_node_acl *se_nacl = &acl->se_node_acl; 675 struct se_node_acl *se_nacl = &acl->se_node_acl;
810 struct iscsi_session *sess; 676 struct iscsi_session *sess;
811 struct se_session *se_sess; 677 struct se_session *se_sess;
@@ -823,13 +689,11 @@ static ssize_t iscsi_stat_sess_show_attr_rsp_pdus(
823 689
824 return ret; 690 return ret;
825} 691}
826ISCSI_STAT_SESS_RO(rsp_pdus);
827 692
828static ssize_t iscsi_stat_sess_show_attr_txdata_octs( 693static ssize_t iscsi_stat_sess_txdata_octs_show(struct config_item *item,
829 struct iscsi_node_stat_grps *igrps, char *page) 694 char *page)
830{ 695{
831 struct iscsi_node_acl *acl = container_of(igrps, 696 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
832 struct iscsi_node_acl, node_stat_grps);
833 struct se_node_acl *se_nacl = &acl->se_node_acl; 697 struct se_node_acl *se_nacl = &acl->se_node_acl;
834 struct iscsi_session *sess; 698 struct iscsi_session *sess;
835 struct se_session *se_sess; 699 struct se_session *se_sess;
@@ -847,13 +711,11 @@ static ssize_t iscsi_stat_sess_show_attr_txdata_octs(
847 711
848 return ret; 712 return ret;
849} 713}
850ISCSI_STAT_SESS_RO(txdata_octs);
851 714
852static ssize_t iscsi_stat_sess_show_attr_rxdata_octs( 715static ssize_t iscsi_stat_sess_rxdata_octs_show(struct config_item *item,
853 struct iscsi_node_stat_grps *igrps, char *page) 716 char *page)
854{ 717{
855 struct iscsi_node_acl *acl = container_of(igrps, 718 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
856 struct iscsi_node_acl, node_stat_grps);
857 struct se_node_acl *se_nacl = &acl->se_node_acl; 719 struct se_node_acl *se_nacl = &acl->se_node_acl;
858 struct iscsi_session *sess; 720 struct iscsi_session *sess;
859 struct se_session *se_sess; 721 struct se_session *se_sess;
@@ -871,13 +733,11 @@ static ssize_t iscsi_stat_sess_show_attr_rxdata_octs(
871 733
872 return ret; 734 return ret;
873} 735}
874ISCSI_STAT_SESS_RO(rxdata_octs);
875 736
876static ssize_t iscsi_stat_sess_show_attr_conn_digest_errors( 737static ssize_t iscsi_stat_sess_conn_digest_errors_show(struct config_item *item,
877 struct iscsi_node_stat_grps *igrps, char *page) 738 char *page)
878{ 739{
879 struct iscsi_node_acl *acl = container_of(igrps, 740 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
880 struct iscsi_node_acl, node_stat_grps);
881 struct se_node_acl *se_nacl = &acl->se_node_acl; 741 struct se_node_acl *se_nacl = &acl->se_node_acl;
882 struct iscsi_session *sess; 742 struct iscsi_session *sess;
883 struct se_session *se_sess; 743 struct se_session *se_sess;
@@ -895,13 +755,11 @@ static ssize_t iscsi_stat_sess_show_attr_conn_digest_errors(
895 755
896 return ret; 756 return ret;
897} 757}
898ISCSI_STAT_SESS_RO(conn_digest_errors);
899 758
900static ssize_t iscsi_stat_sess_show_attr_conn_timeout_errors( 759static ssize_t iscsi_stat_sess_conn_timeout_errors_show(
901 struct iscsi_node_stat_grps *igrps, char *page) 760 struct config_item *item, char *page)
902{ 761{
903 struct iscsi_node_acl *acl = container_of(igrps, 762 struct iscsi_node_acl *acl = iscsi_stat_nacl(item);
904 struct iscsi_node_acl, node_stat_grps);
905 struct se_node_acl *se_nacl = &acl->se_node_acl; 763 struct se_node_acl *se_nacl = &acl->se_node_acl;
906 struct iscsi_session *sess; 764 struct iscsi_session *sess;
907 struct se_session *se_sess; 765 struct se_session *se_sess;
@@ -919,31 +777,31 @@ static ssize_t iscsi_stat_sess_show_attr_conn_timeout_errors(
919 777
920 return ret; 778 return ret;
921} 779}
922ISCSI_STAT_SESS_RO(conn_timeout_errors);
923 780
924CONFIGFS_EATTR_OPS(iscsi_stat_sess, iscsi_node_stat_grps, 781CONFIGFS_ATTR_RO(iscsi_stat_sess_, inst);
925 iscsi_sess_stats_group); 782CONFIGFS_ATTR_RO(iscsi_stat_sess_, node);
783CONFIGFS_ATTR_RO(iscsi_stat_sess_, indx);
784CONFIGFS_ATTR_RO(iscsi_stat_sess_, cmd_pdus);
785CONFIGFS_ATTR_RO(iscsi_stat_sess_, rsp_pdus);
786CONFIGFS_ATTR_RO(iscsi_stat_sess_, txdata_octs);
787CONFIGFS_ATTR_RO(iscsi_stat_sess_, rxdata_octs);
788CONFIGFS_ATTR_RO(iscsi_stat_sess_, conn_digest_errors);
789CONFIGFS_ATTR_RO(iscsi_stat_sess_, conn_timeout_errors);
926 790
927static struct configfs_attribute *iscsi_stat_sess_stats_attrs[] = { 791static struct configfs_attribute *iscsi_stat_sess_stats_attrs[] = {
928 &iscsi_stat_sess_inst.attr, 792 &iscsi_stat_sess_attr_inst,
929 &iscsi_stat_sess_node.attr, 793 &iscsi_stat_sess_attr_node,
930 &iscsi_stat_sess_indx.attr, 794 &iscsi_stat_sess_attr_indx,
931 &iscsi_stat_sess_cmd_pdus.attr, 795 &iscsi_stat_sess_attr_cmd_pdus,
932 &iscsi_stat_sess_rsp_pdus.attr, 796 &iscsi_stat_sess_attr_rsp_pdus,
933 &iscsi_stat_sess_txdata_octs.attr, 797 &iscsi_stat_sess_attr_txdata_octs,
934 &iscsi_stat_sess_rxdata_octs.attr, 798 &iscsi_stat_sess_attr_rxdata_octs,
935 &iscsi_stat_sess_conn_digest_errors.attr, 799 &iscsi_stat_sess_attr_conn_digest_errors,
936 &iscsi_stat_sess_conn_timeout_errors.attr, 800 &iscsi_stat_sess_attr_conn_timeout_errors,
937 NULL, 801 NULL,
938}; 802};
939 803
940static struct configfs_item_operations iscsi_stat_sess_stats_item_ops = {
941 .show_attribute = iscsi_stat_sess_attr_show,
942 .store_attribute = iscsi_stat_sess_attr_store,
943};
944
945struct config_item_type iscsi_stat_sess_cit = { 804struct config_item_type iscsi_stat_sess_cit = {
946 .ct_item_ops = &iscsi_stat_sess_stats_item_ops,
947 .ct_attrs = iscsi_stat_sess_stats_attrs, 805 .ct_attrs = iscsi_stat_sess_stats_attrs,
948 .ct_owner = THIS_MODULE, 806 .ct_owner = THIS_MODULE,
949}; 807};
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 5bc85ffed720..999b6eba52e8 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -34,7 +34,6 @@
34 34
35#include <target/target_core_base.h> 35#include <target/target_core_base.h>
36#include <target/target_core_fabric.h> 36#include <target/target_core_fabric.h>
37#include <target/target_core_fabric_configfs.h>
38 37
39#include "tcm_loop.h" 38#include "tcm_loop.h"
40 39
@@ -763,21 +762,20 @@ static void tcm_loop_port_unlink(
763 762
764/* End items for tcm_loop_port_cit */ 763/* End items for tcm_loop_port_cit */
765 764
766static ssize_t tcm_loop_tpg_attrib_show_fabric_prot_type( 765static ssize_t tcm_loop_tpg_attrib_fabric_prot_type_show(
767 struct se_portal_group *se_tpg, 766 struct config_item *item, char *page)
768 char *page)
769{ 767{
768 struct se_portal_group *se_tpg = attrib_to_tpg(item);
770 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg, 769 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg,
771 tl_se_tpg); 770 tl_se_tpg);
772 771
773 return sprintf(page, "%d\n", tl_tpg->tl_fabric_prot_type); 772 return sprintf(page, "%d\n", tl_tpg->tl_fabric_prot_type);
774} 773}
775 774
776static ssize_t tcm_loop_tpg_attrib_store_fabric_prot_type( 775static ssize_t tcm_loop_tpg_attrib_fabric_prot_type_store(
777 struct se_portal_group *se_tpg, 776 struct config_item *item, const char *page, size_t count)
778 const char *page,
779 size_t count)
780{ 777{
778 struct se_portal_group *se_tpg = attrib_to_tpg(item);
781 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg, 779 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, struct tcm_loop_tpg,
782 tl_se_tpg); 780 tl_se_tpg);
783 unsigned long val; 781 unsigned long val;
@@ -796,10 +794,10 @@ static ssize_t tcm_loop_tpg_attrib_store_fabric_prot_type(
796 return count; 794 return count;
797} 795}
798 796
799TF_TPG_ATTRIB_ATTR(tcm_loop, fabric_prot_type, S_IRUGO | S_IWUSR); 797CONFIGFS_ATTR(tcm_loop_tpg_attrib_, fabric_prot_type);
800 798
801static struct configfs_attribute *tcm_loop_tpg_attrib_attrs[] = { 799static struct configfs_attribute *tcm_loop_tpg_attrib_attrs[] = {
802 &tcm_loop_tpg_attrib_fabric_prot_type.attr, 800 &tcm_loop_tpg_attrib_attr_fabric_prot_type,
803 NULL, 801 NULL,
804}; 802};
805 803
@@ -894,10 +892,9 @@ static int tcm_loop_drop_nexus(
894 892
895/* End items for tcm_loop_nexus_cit */ 893/* End items for tcm_loop_nexus_cit */
896 894
897static ssize_t tcm_loop_tpg_show_nexus( 895static ssize_t tcm_loop_tpg_nexus_show(struct config_item *item, char *page)
898 struct se_portal_group *se_tpg,
899 char *page)
900{ 896{
897 struct se_portal_group *se_tpg = to_tpg(item);
901 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, 898 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
902 struct tcm_loop_tpg, tl_se_tpg); 899 struct tcm_loop_tpg, tl_se_tpg);
903 struct tcm_loop_nexus *tl_nexus; 900 struct tcm_loop_nexus *tl_nexus;
@@ -913,11 +910,10 @@ static ssize_t tcm_loop_tpg_show_nexus(
913 return ret; 910 return ret;
914} 911}
915 912
916static ssize_t tcm_loop_tpg_store_nexus( 913static ssize_t tcm_loop_tpg_nexus_store(struct config_item *item,
917 struct se_portal_group *se_tpg, 914 const char *page, size_t count)
918 const char *page,
919 size_t count)
920{ 915{
916 struct se_portal_group *se_tpg = to_tpg(item);
921 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, 917 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
922 struct tcm_loop_tpg, tl_se_tpg); 918 struct tcm_loop_tpg, tl_se_tpg);
923 struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba; 919 struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba;
@@ -992,12 +988,10 @@ check_newline:
992 return count; 988 return count;
993} 989}
994 990
995TF_TPG_BASE_ATTR(tcm_loop, nexus, S_IRUGO | S_IWUSR); 991static ssize_t tcm_loop_tpg_transport_status_show(struct config_item *item,
996 992 char *page)
997static ssize_t tcm_loop_tpg_show_transport_status(
998 struct se_portal_group *se_tpg,
999 char *page)
1000{ 993{
994 struct se_portal_group *se_tpg = to_tpg(item);
1001 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, 995 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
1002 struct tcm_loop_tpg, tl_se_tpg); 996 struct tcm_loop_tpg, tl_se_tpg);
1003 const char *status = NULL; 997 const char *status = NULL;
@@ -1020,11 +1014,10 @@ static ssize_t tcm_loop_tpg_show_transport_status(
1020 return ret; 1014 return ret;
1021} 1015}
1022 1016
1023static ssize_t tcm_loop_tpg_store_transport_status( 1017static ssize_t tcm_loop_tpg_transport_status_store(struct config_item *item,
1024 struct se_portal_group *se_tpg, 1018 const char *page, size_t count)
1025 const char *page,
1026 size_t count)
1027{ 1019{
1020 struct se_portal_group *se_tpg = to_tpg(item);
1028 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg, 1021 struct tcm_loop_tpg *tl_tpg = container_of(se_tpg,
1029 struct tcm_loop_tpg, tl_se_tpg); 1022 struct tcm_loop_tpg, tl_se_tpg);
1030 1023
@@ -1044,11 +1037,12 @@ static ssize_t tcm_loop_tpg_store_transport_status(
1044 return -EINVAL; 1037 return -EINVAL;
1045} 1038}
1046 1039
1047TF_TPG_BASE_ATTR(tcm_loop, transport_status, S_IRUGO | S_IWUSR); 1040CONFIGFS_ATTR(tcm_loop_tpg_, nexus);
1041CONFIGFS_ATTR(tcm_loop_tpg_, transport_status);
1048 1042
1049static struct configfs_attribute *tcm_loop_tpg_attrs[] = { 1043static struct configfs_attribute *tcm_loop_tpg_attrs[] = {
1050 &tcm_loop_tpg_nexus.attr, 1044 &tcm_loop_tpg_attr_nexus,
1051 &tcm_loop_tpg_transport_status.attr, 1045 &tcm_loop_tpg_attr_transport_status,
1052 NULL, 1046 NULL,
1053}; 1047};
1054 1048
@@ -1216,17 +1210,15 @@ static void tcm_loop_drop_scsi_hba(
1216} 1210}
1217 1211
1218/* Start items for tcm_loop_cit */ 1212/* Start items for tcm_loop_cit */
1219static ssize_t tcm_loop_wwn_show_attr_version( 1213static ssize_t tcm_loop_wwn_version_show(struct config_item *item, char *page)
1220 struct target_fabric_configfs *tf,
1221 char *page)
1222{ 1214{
1223 return sprintf(page, "TCM Loopback Fabric module %s\n", TCM_LOOP_VERSION); 1215 return sprintf(page, "TCM Loopback Fabric module %s\n", TCM_LOOP_VERSION);
1224} 1216}
1225 1217
1226TF_WWN_ATTR_RO(tcm_loop, version); 1218CONFIGFS_ATTR_RO(tcm_loop_wwn_, version);
1227 1219
1228static struct configfs_attribute *tcm_loop_wwn_attrs[] = { 1220static struct configfs_attribute *tcm_loop_wwn_attrs[] = {
1229 &tcm_loop_wwn_version.attr, 1221 &tcm_loop_wwn_attr_version,
1230 NULL, 1222 NULL,
1231}; 1223};
1232 1224
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
index 0edf320fb685..35f7d31b29d2 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
@@ -35,8 +35,6 @@
35#include <target/target_core_base.h> 35#include <target/target_core_base.h>
36#include <target/target_core_backend.h> 36#include <target/target_core_backend.h>
37#include <target/target_core_fabric.h> 37#include <target/target_core_fabric.h>
38#include <target/target_core_fabric_configfs.h>
39#include <target/configfs_macros.h>
40#include <asm/unaligned.h> 38#include <asm/unaligned.h>
41 39
42#include "sbp_target.h" 40#include "sbp_target.h"
@@ -2111,24 +2109,21 @@ static void sbp_drop_tport(struct se_wwn *wwn)
2111 kfree(tport); 2109 kfree(tport);
2112} 2110}
2113 2111
2114static ssize_t sbp_wwn_show_attr_version( 2112static ssize_t sbp_wwn_version_show(struct config_item *item, char *page)
2115 struct target_fabric_configfs *tf,
2116 char *page)
2117{ 2113{
2118 return sprintf(page, "FireWire SBP fabric module %s\n", SBP_VERSION); 2114 return sprintf(page, "FireWire SBP fabric module %s\n", SBP_VERSION);
2119} 2115}
2120 2116
2121TF_WWN_ATTR_RO(sbp, version); 2117CONFIGFS_ATTR_RO(sbp_wwn_, version);
2122 2118
2123static struct configfs_attribute *sbp_wwn_attrs[] = { 2119static struct configfs_attribute *sbp_wwn_attrs[] = {
2124 &sbp_wwn_version.attr, 2120 &sbp_wwn_attr_version,
2125 NULL, 2121 NULL,
2126}; 2122};
2127 2123
2128static ssize_t sbp_tpg_show_directory_id( 2124static ssize_t sbp_tpg_directory_id_show(struct config_item *item, char *page)
2129 struct se_portal_group *se_tpg,
2130 char *page)
2131{ 2125{
2126 struct se_portal_group *se_tpg = to_tpg(item);
2132 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2127 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2133 struct sbp_tport *tport = tpg->tport; 2128 struct sbp_tport *tport = tpg->tport;
2134 2129
@@ -2138,11 +2133,10 @@ static ssize_t sbp_tpg_show_directory_id(
2138 return sprintf(page, "%06x\n", tport->directory_id); 2133 return sprintf(page, "%06x\n", tport->directory_id);
2139} 2134}
2140 2135
2141static ssize_t sbp_tpg_store_directory_id( 2136static ssize_t sbp_tpg_directory_id_store(struct config_item *item,
2142 struct se_portal_group *se_tpg, 2137 const char *page, size_t count)
2143 const char *page,
2144 size_t count)
2145{ 2138{
2139 struct se_portal_group *se_tpg = to_tpg(item);
2146 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2140 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2147 struct sbp_tport *tport = tpg->tport; 2141 struct sbp_tport *tport = tpg->tport;
2148 unsigned long val; 2142 unsigned long val;
@@ -2166,20 +2160,18 @@ static ssize_t sbp_tpg_store_directory_id(
2166 return count; 2160 return count;
2167} 2161}
2168 2162
2169static ssize_t sbp_tpg_show_enable( 2163static ssize_t sbp_tpg_enable_show(struct config_item *item, char *page)
2170 struct se_portal_group *se_tpg,
2171 char *page)
2172{ 2164{
2165 struct se_portal_group *se_tpg = to_tpg(item);
2173 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2166 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2174 struct sbp_tport *tport = tpg->tport; 2167 struct sbp_tport *tport = tpg->tport;
2175 return sprintf(page, "%d\n", tport->enable); 2168 return sprintf(page, "%d\n", tport->enable);
2176} 2169}
2177 2170
2178static ssize_t sbp_tpg_store_enable( 2171static ssize_t sbp_tpg_enable_store(struct config_item *item,
2179 struct se_portal_group *se_tpg, 2172 const char *page, size_t count)
2180 const char *page,
2181 size_t count)
2182{ 2173{
2174 struct se_portal_group *se_tpg = to_tpg(item);
2183 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2175 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2184 struct sbp_tport *tport = tpg->tport; 2176 struct sbp_tport *tport = tpg->tport;
2185 unsigned long val; 2177 unsigned long val;
@@ -2219,29 +2211,28 @@ static ssize_t sbp_tpg_store_enable(
2219 return count; 2211 return count;
2220} 2212}
2221 2213
2222TF_TPG_BASE_ATTR(sbp, directory_id, S_IRUGO | S_IWUSR); 2214CONFIGFS_ATTR(sbp_tpg_, directory_id);
2223TF_TPG_BASE_ATTR(sbp, enable, S_IRUGO | S_IWUSR); 2215CONFIGFS_ATTR(sbp_tpg_, enable);
2224 2216
2225static struct configfs_attribute *sbp_tpg_base_attrs[] = { 2217static struct configfs_attribute *sbp_tpg_base_attrs[] = {
2226 &sbp_tpg_directory_id.attr, 2218 &sbp_tpg_attr_directory_id,
2227 &sbp_tpg_enable.attr, 2219 &sbp_tpg_attr_enable,
2228 NULL, 2220 NULL,
2229}; 2221};
2230 2222
2231static ssize_t sbp_tpg_attrib_show_mgt_orb_timeout( 2223static ssize_t sbp_tpg_attrib_mgt_orb_timeout_show(struct config_item *item,
2232 struct se_portal_group *se_tpg,
2233 char *page) 2224 char *page)
2234{ 2225{
2226 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2235 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2227 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2236 struct sbp_tport *tport = tpg->tport; 2228 struct sbp_tport *tport = tpg->tport;
2237 return sprintf(page, "%d\n", tport->mgt_orb_timeout); 2229 return sprintf(page, "%d\n", tport->mgt_orb_timeout);
2238} 2230}
2239 2231
2240static ssize_t sbp_tpg_attrib_store_mgt_orb_timeout( 2232static ssize_t sbp_tpg_attrib_mgt_orb_timeout_store(struct config_item *item,
2241 struct se_portal_group *se_tpg, 2233 const char *page, size_t count)
2242 const char *page,
2243 size_t count)
2244{ 2234{
2235 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2245 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2236 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2246 struct sbp_tport *tport = tpg->tport; 2237 struct sbp_tport *tport = tpg->tport;
2247 unsigned long val; 2238 unsigned long val;
@@ -2264,20 +2255,19 @@ static ssize_t sbp_tpg_attrib_store_mgt_orb_timeout(
2264 return count; 2255 return count;
2265} 2256}
2266 2257
2267static ssize_t sbp_tpg_attrib_show_max_reconnect_timeout( 2258static ssize_t sbp_tpg_attrib_max_reconnect_timeout_show(struct config_item *item,
2268 struct se_portal_group *se_tpg,
2269 char *page) 2259 char *page)
2270{ 2260{
2261 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2271 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2262 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2272 struct sbp_tport *tport = tpg->tport; 2263 struct sbp_tport *tport = tpg->tport;
2273 return sprintf(page, "%d\n", tport->max_reconnect_timeout); 2264 return sprintf(page, "%d\n", tport->max_reconnect_timeout);
2274} 2265}
2275 2266
2276static ssize_t sbp_tpg_attrib_store_max_reconnect_timeout( 2267static ssize_t sbp_tpg_attrib_max_reconnect_timeout_store(struct config_item *item,
2277 struct se_portal_group *se_tpg, 2268 const char *page, size_t count)
2278 const char *page,
2279 size_t count)
2280{ 2269{
2270 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2281 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2271 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2282 struct sbp_tport *tport = tpg->tport; 2272 struct sbp_tport *tport = tpg->tport;
2283 unsigned long val; 2273 unsigned long val;
@@ -2300,20 +2290,19 @@ static ssize_t sbp_tpg_attrib_store_max_reconnect_timeout(
2300 return count; 2290 return count;
2301} 2291}
2302 2292
2303static ssize_t sbp_tpg_attrib_show_max_logins_per_lun( 2293static ssize_t sbp_tpg_attrib_max_logins_per_lun_show(struct config_item *item,
2304 struct se_portal_group *se_tpg,
2305 char *page) 2294 char *page)
2306{ 2295{
2296 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2307 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2297 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2308 struct sbp_tport *tport = tpg->tport; 2298 struct sbp_tport *tport = tpg->tport;
2309 return sprintf(page, "%d\n", tport->max_logins_per_lun); 2299 return sprintf(page, "%d\n", tport->max_logins_per_lun);
2310} 2300}
2311 2301
2312static ssize_t sbp_tpg_attrib_store_max_logins_per_lun( 2302static ssize_t sbp_tpg_attrib_max_logins_per_lun_store(struct config_item *item,
2313 struct se_portal_group *se_tpg, 2303 const char *page, size_t count)
2314 const char *page,
2315 size_t count)
2316{ 2304{
2305 struct se_portal_group *se_tpg = attrib_to_tpg(item);
2317 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg); 2306 struct sbp_tpg *tpg = container_of(se_tpg, struct sbp_tpg, se_tpg);
2318 struct sbp_tport *tport = tpg->tport; 2307 struct sbp_tport *tport = tpg->tport;
2319 unsigned long val; 2308 unsigned long val;
@@ -2330,14 +2319,14 @@ static ssize_t sbp_tpg_attrib_store_max_logins_per_lun(
2330 return count; 2319 return count;
2331} 2320}
2332 2321
2333TF_TPG_ATTRIB_ATTR(sbp, mgt_orb_timeout, S_IRUGO | S_IWUSR); 2322CONFIGFS_ATTR(sbp_tpg_attrib_, mgt_orb_timeout);
2334TF_TPG_ATTRIB_ATTR(sbp, max_reconnect_timeout, S_IRUGO | S_IWUSR); 2323CONFIGFS_ATTR(sbp_tpg_attrib_, max_reconnect_timeout);
2335TF_TPG_ATTRIB_ATTR(sbp, max_logins_per_lun, S_IRUGO | S_IWUSR); 2324CONFIGFS_ATTR(sbp_tpg_attrib_, max_logins_per_lun);
2336 2325
2337static struct configfs_attribute *sbp_tpg_attrib_attrs[] = { 2326static struct configfs_attribute *sbp_tpg_attrib_attrs[] = {
2338 &sbp_tpg_attrib_mgt_orb_timeout.attr, 2327 &sbp_tpg_attrib_attr_mgt_orb_timeout,
2339 &sbp_tpg_attrib_max_reconnect_timeout.attr, 2328 &sbp_tpg_attrib_attr_max_reconnect_timeout,
2340 &sbp_tpg_attrib_max_logins_per_lun.attr, 2329 &sbp_tpg_attrib_attr_max_logins_per_lun,
2341 NULL, 2330 NULL,
2342}; 2331};
2343 2332
diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
index 860e84046177..b9b9ffde4c7a 100644
--- a/drivers/target/target_core_configfs.c
+++ b/drivers/target/target_core_configfs.c
@@ -40,8 +40,6 @@
40#include <target/target_core_base.h> 40#include <target/target_core_base.h>
41#include <target/target_core_backend.h> 41#include <target/target_core_backend.h>
42#include <target/target_core_fabric.h> 42#include <target/target_core_fabric.h>
43#include <target/target_core_fabric_configfs.h>
44#include <target/configfs_macros.h>
45 43
46#include "target_core_internal.h" 44#include "target_core_internal.h"
47#include "target_core_alua.h" 45#include "target_core_alua.h"
@@ -78,12 +76,6 @@ extern struct t10_alua_lu_gp *default_lu_gp;
78static LIST_HEAD(g_tf_list); 76static LIST_HEAD(g_tf_list);
79static DEFINE_MUTEX(g_tf_lock); 77static DEFINE_MUTEX(g_tf_lock);
80 78
81struct target_core_configfs_attribute {
82 struct configfs_attribute attr;
83 ssize_t (*show)(void *, char *);
84 ssize_t (*store)(void *, const char *, size_t);
85};
86
87static struct config_group target_core_hbagroup; 79static struct config_group target_core_hbagroup;
88static struct config_group alua_group; 80static struct config_group alua_group;
89static struct config_group alua_lu_gps_group; 81static struct config_group alua_lu_gps_group;
@@ -97,24 +89,15 @@ item_to_hba(struct config_item *item)
97/* 89/*
98 * Attributes for /sys/kernel/config/target/ 90 * Attributes for /sys/kernel/config/target/
99 */ 91 */
100static ssize_t target_core_attr_show(struct config_item *item, 92static ssize_t target_core_item_version_show(struct config_item *item,
101 struct configfs_attribute *attr, 93 char *page)
102 char *page)
103{ 94{
104 return sprintf(page, "Target Engine Core ConfigFS Infrastructure %s" 95 return sprintf(page, "Target Engine Core ConfigFS Infrastructure %s"
105 " on %s/%s on "UTS_RELEASE"\n", TARGET_CORE_VERSION, 96 " on %s/%s on "UTS_RELEASE"\n", TARGET_CORE_VERSION,
106 utsname()->sysname, utsname()->machine); 97 utsname()->sysname, utsname()->machine);
107} 98}
108 99
109static struct configfs_item_operations target_core_fabric_item_ops = { 100CONFIGFS_ATTR_RO(target_core_item_, version);
110 .show_attribute = target_core_attr_show,
111};
112
113static struct configfs_attribute target_core_item_attr_version = {
114 .ca_owner = THIS_MODULE,
115 .ca_name = "version",
116 .ca_mode = S_IRUGO,
117};
118 101
119static struct target_fabric_configfs *target_core_get_fabric( 102static struct target_fabric_configfs *target_core_get_fabric(
120 const char *name) 103 const char *name)
@@ -273,7 +256,6 @@ static struct configfs_attribute *target_core_fabric_item_attrs[] = {
273 * Provides Fabrics Groups and Item Attributes for /sys/kernel/config/target/ 256 * Provides Fabrics Groups and Item Attributes for /sys/kernel/config/target/
274 */ 257 */
275static struct config_item_type target_core_fabrics_item = { 258static struct config_item_type target_core_fabrics_item = {
276 .ct_item_ops = &target_core_fabric_item_ops,
277 .ct_group_ops = &target_core_fabric_group_ops, 259 .ct_group_ops = &target_core_fabric_group_ops,
278 .ct_attrs = target_core_fabric_item_attrs, 260 .ct_attrs = target_core_fabric_item_attrs,
279 .ct_owner = THIS_MODULE, 261 .ct_owner = THIS_MODULE,
@@ -476,47 +458,54 @@ EXPORT_SYMBOL(target_unregister_template);
476// Stop functions called by external Target Fabrics Modules 458// Stop functions called by external Target Fabrics Modules
477//############################################################################*/ 459//############################################################################*/
478 460
461static inline struct se_dev_attrib *to_attrib(struct config_item *item)
462{
463 return container_of(to_config_group(item), struct se_dev_attrib,
464 da_group);
465}
466
479/* Start functions for struct config_item_type tb_dev_attrib_cit */ 467/* Start functions for struct config_item_type tb_dev_attrib_cit */
480#define DEF_TB_DEV_ATTRIB_SHOW(_name) \ 468#define DEF_CONFIGFS_ATTRIB_SHOW(_name) \
481static ssize_t show_##_name(struct se_dev_attrib *da, char *page) \ 469static ssize_t _name##_show(struct config_item *item, char *page) \
482{ \ 470{ \
483 return snprintf(page, PAGE_SIZE, "%u\n", da->_name); \ 471 return snprintf(page, PAGE_SIZE, "%u\n", to_attrib(item)->_name); \
484} 472}
485 473
486DEF_TB_DEV_ATTRIB_SHOW(emulate_model_alias); 474DEF_CONFIGFS_ATTRIB_SHOW(emulate_model_alias);
487DEF_TB_DEV_ATTRIB_SHOW(emulate_dpo); 475DEF_CONFIGFS_ATTRIB_SHOW(emulate_dpo);
488DEF_TB_DEV_ATTRIB_SHOW(emulate_fua_write); 476DEF_CONFIGFS_ATTRIB_SHOW(emulate_fua_write);
489DEF_TB_DEV_ATTRIB_SHOW(emulate_fua_read); 477DEF_CONFIGFS_ATTRIB_SHOW(emulate_fua_read);
490DEF_TB_DEV_ATTRIB_SHOW(emulate_write_cache); 478DEF_CONFIGFS_ATTRIB_SHOW(emulate_write_cache);
491DEF_TB_DEV_ATTRIB_SHOW(emulate_ua_intlck_ctrl); 479DEF_CONFIGFS_ATTRIB_SHOW(emulate_ua_intlck_ctrl);
492DEF_TB_DEV_ATTRIB_SHOW(emulate_tas); 480DEF_CONFIGFS_ATTRIB_SHOW(emulate_tas);
493DEF_TB_DEV_ATTRIB_SHOW(emulate_tpu); 481DEF_CONFIGFS_ATTRIB_SHOW(emulate_tpu);
494DEF_TB_DEV_ATTRIB_SHOW(emulate_tpws); 482DEF_CONFIGFS_ATTRIB_SHOW(emulate_tpws);
495DEF_TB_DEV_ATTRIB_SHOW(emulate_caw); 483DEF_CONFIGFS_ATTRIB_SHOW(emulate_caw);
496DEF_TB_DEV_ATTRIB_SHOW(emulate_3pc); 484DEF_CONFIGFS_ATTRIB_SHOW(emulate_3pc);
497DEF_TB_DEV_ATTRIB_SHOW(pi_prot_type); 485DEF_CONFIGFS_ATTRIB_SHOW(pi_prot_type);
498DEF_TB_DEV_ATTRIB_SHOW(hw_pi_prot_type); 486DEF_CONFIGFS_ATTRIB_SHOW(hw_pi_prot_type);
499DEF_TB_DEV_ATTRIB_SHOW(pi_prot_format); 487DEF_CONFIGFS_ATTRIB_SHOW(pi_prot_format);
500DEF_TB_DEV_ATTRIB_SHOW(enforce_pr_isids); 488DEF_CONFIGFS_ATTRIB_SHOW(enforce_pr_isids);
501DEF_TB_DEV_ATTRIB_SHOW(is_nonrot); 489DEF_CONFIGFS_ATTRIB_SHOW(is_nonrot);
502DEF_TB_DEV_ATTRIB_SHOW(emulate_rest_reord); 490DEF_CONFIGFS_ATTRIB_SHOW(emulate_rest_reord);
503DEF_TB_DEV_ATTRIB_SHOW(force_pr_aptpl); 491DEF_CONFIGFS_ATTRIB_SHOW(force_pr_aptpl);
504DEF_TB_DEV_ATTRIB_SHOW(hw_block_size); 492DEF_CONFIGFS_ATTRIB_SHOW(hw_block_size);
505DEF_TB_DEV_ATTRIB_SHOW(block_size); 493DEF_CONFIGFS_ATTRIB_SHOW(block_size);
506DEF_TB_DEV_ATTRIB_SHOW(hw_max_sectors); 494DEF_CONFIGFS_ATTRIB_SHOW(hw_max_sectors);
507DEF_TB_DEV_ATTRIB_SHOW(optimal_sectors); 495DEF_CONFIGFS_ATTRIB_SHOW(optimal_sectors);
508DEF_TB_DEV_ATTRIB_SHOW(hw_queue_depth); 496DEF_CONFIGFS_ATTRIB_SHOW(hw_queue_depth);
509DEF_TB_DEV_ATTRIB_SHOW(queue_depth); 497DEF_CONFIGFS_ATTRIB_SHOW(queue_depth);
510DEF_TB_DEV_ATTRIB_SHOW(max_unmap_lba_count); 498DEF_CONFIGFS_ATTRIB_SHOW(max_unmap_lba_count);
511DEF_TB_DEV_ATTRIB_SHOW(max_unmap_block_desc_count); 499DEF_CONFIGFS_ATTRIB_SHOW(max_unmap_block_desc_count);
512DEF_TB_DEV_ATTRIB_SHOW(unmap_granularity); 500DEF_CONFIGFS_ATTRIB_SHOW(unmap_granularity);
513DEF_TB_DEV_ATTRIB_SHOW(unmap_granularity_alignment); 501DEF_CONFIGFS_ATTRIB_SHOW(unmap_granularity_alignment);
514DEF_TB_DEV_ATTRIB_SHOW(max_write_same_len); 502DEF_CONFIGFS_ATTRIB_SHOW(max_write_same_len);
515 503
516#define DEF_TB_DEV_ATTRIB_STORE_U32(_name) \ 504#define DEF_CONFIGFS_ATTRIB_STORE_U32(_name) \
517static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ 505static ssize_t _name##_store(struct config_item *item, const char *page,\
518 size_t count) \ 506 size_t count) \
519{ \ 507{ \
508 struct se_dev_attrib *da = to_attrib(item); \
520 u32 val; \ 509 u32 val; \
521 int ret; \ 510 int ret; \
522 \ 511 \
@@ -527,16 +516,17 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\
527 return count; \ 516 return count; \
528} 517}
529 518
530DEF_TB_DEV_ATTRIB_STORE_U32(max_unmap_lba_count); 519DEF_CONFIGFS_ATTRIB_STORE_U32(max_unmap_lba_count);
531DEF_TB_DEV_ATTRIB_STORE_U32(max_unmap_block_desc_count); 520DEF_CONFIGFS_ATTRIB_STORE_U32(max_unmap_block_desc_count);
532DEF_TB_DEV_ATTRIB_STORE_U32(unmap_granularity); 521DEF_CONFIGFS_ATTRIB_STORE_U32(unmap_granularity);
533DEF_TB_DEV_ATTRIB_STORE_U32(unmap_granularity_alignment); 522DEF_CONFIGFS_ATTRIB_STORE_U32(unmap_granularity_alignment);
534DEF_TB_DEV_ATTRIB_STORE_U32(max_write_same_len); 523DEF_CONFIGFS_ATTRIB_STORE_U32(max_write_same_len);
535 524
536#define DEF_TB_DEV_ATTRIB_STORE_BOOL(_name) \ 525#define DEF_CONFIGFS_ATTRIB_STORE_BOOL(_name) \
537static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ 526static ssize_t _name##_store(struct config_item *item, const char *page, \
538 size_t count) \ 527 size_t count) \
539{ \ 528{ \
529 struct se_dev_attrib *da = to_attrib(item); \
540 bool flag; \ 530 bool flag; \
541 int ret; \ 531 int ret; \
542 \ 532 \
@@ -547,14 +537,14 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\
547 return count; \ 537 return count; \
548} 538}
549 539
550DEF_TB_DEV_ATTRIB_STORE_BOOL(emulate_fua_write); 540DEF_CONFIGFS_ATTRIB_STORE_BOOL(emulate_fua_write);
551DEF_TB_DEV_ATTRIB_STORE_BOOL(emulate_caw); 541DEF_CONFIGFS_ATTRIB_STORE_BOOL(emulate_caw);
552DEF_TB_DEV_ATTRIB_STORE_BOOL(emulate_3pc); 542DEF_CONFIGFS_ATTRIB_STORE_BOOL(emulate_3pc);
553DEF_TB_DEV_ATTRIB_STORE_BOOL(enforce_pr_isids); 543DEF_CONFIGFS_ATTRIB_STORE_BOOL(enforce_pr_isids);
554DEF_TB_DEV_ATTRIB_STORE_BOOL(is_nonrot); 544DEF_CONFIGFS_ATTRIB_STORE_BOOL(is_nonrot);
555 545
556#define DEF_TB_DEV_ATTRIB_STORE_STUB(_name) \ 546#define DEF_CONFIGFS_ATTRIB_STORE_STUB(_name) \
557static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\ 547static ssize_t _name##_store(struct config_item *item, const char *page,\
558 size_t count) \ 548 size_t count) \
559{ \ 549{ \
560 printk_once(KERN_WARNING \ 550 printk_once(KERN_WARNING \
@@ -562,8 +552,8 @@ static ssize_t store_##_name(struct se_dev_attrib *da, const char *page,\
562 return count; \ 552 return count; \
563} 553}
564 554
565DEF_TB_DEV_ATTRIB_STORE_STUB(emulate_dpo); 555DEF_CONFIGFS_ATTRIB_STORE_STUB(emulate_dpo);
566DEF_TB_DEV_ATTRIB_STORE_STUB(emulate_fua_read); 556DEF_CONFIGFS_ATTRIB_STORE_STUB(emulate_fua_read);
567 557
568static void dev_set_t10_wwn_model_alias(struct se_device *dev) 558static void dev_set_t10_wwn_model_alias(struct se_device *dev)
569{ 559{
@@ -578,9 +568,10 @@ static void dev_set_t10_wwn_model_alias(struct se_device *dev)
578 snprintf(&dev->t10_wwn.model[0], 16, "%s", configname); 568 snprintf(&dev->t10_wwn.model[0], 16, "%s", configname);
579} 569}
580 570
581static ssize_t store_emulate_model_alias(struct se_dev_attrib *da, 571static ssize_t emulate_model_alias_store(struct config_item *item,
582 const char *page, size_t count) 572 const char *page, size_t count)
583{ 573{
574 struct se_dev_attrib *da = to_attrib(item);
584 struct se_device *dev = da->da_dev; 575 struct se_device *dev = da->da_dev;
585 bool flag; 576 bool flag;
586 int ret; 577 int ret;
@@ -606,9 +597,10 @@ static ssize_t store_emulate_model_alias(struct se_dev_attrib *da,
606 return count; 597 return count;
607} 598}
608 599
609static ssize_t store_emulate_write_cache(struct se_dev_attrib *da, 600static ssize_t emulate_write_cache_store(struct config_item *item,
610 const char *page, size_t count) 601 const char *page, size_t count)
611{ 602{
603 struct se_dev_attrib *da = to_attrib(item);
612 bool flag; 604 bool flag;
613 int ret; 605 int ret;
614 606
@@ -627,9 +619,10 @@ static ssize_t store_emulate_write_cache(struct se_dev_attrib *da,
627 return count; 619 return count;
628} 620}
629 621
630static ssize_t store_emulate_ua_intlck_ctrl(struct se_dev_attrib *da, 622static ssize_t emulate_ua_intlck_ctrl_store(struct config_item *item,
631 const char *page, size_t count) 623 const char *page, size_t count)
632{ 624{
625 struct se_dev_attrib *da = to_attrib(item);
633 u32 val; 626 u32 val;
634 int ret; 627 int ret;
635 628
@@ -654,9 +647,10 @@ static ssize_t store_emulate_ua_intlck_ctrl(struct se_dev_attrib *da,
654 return count; 647 return count;
655} 648}
656 649
657static ssize_t store_emulate_tas(struct se_dev_attrib *da, 650static ssize_t emulate_tas_store(struct config_item *item,
658 const char *page, size_t count) 651 const char *page, size_t count)
659{ 652{
653 struct se_dev_attrib *da = to_attrib(item);
660 bool flag; 654 bool flag;
661 int ret; 655 int ret;
662 656
@@ -677,9 +671,10 @@ static ssize_t store_emulate_tas(struct se_dev_attrib *da,
677 return count; 671 return count;
678} 672}
679 673
680static ssize_t store_emulate_tpu(struct se_dev_attrib *da, 674static ssize_t emulate_tpu_store(struct config_item *item,
681 const char *page, size_t count) 675 const char *page, size_t count)
682{ 676{
677 struct se_dev_attrib *da = to_attrib(item);
683 bool flag; 678 bool flag;
684 int ret; 679 int ret;
685 680
@@ -702,9 +697,10 @@ static ssize_t store_emulate_tpu(struct se_dev_attrib *da,
702 return count; 697 return count;
703} 698}
704 699
705static ssize_t store_emulate_tpws(struct se_dev_attrib *da, 700static ssize_t emulate_tpws_store(struct config_item *item,
706 const char *page, size_t count) 701 const char *page, size_t count)
707{ 702{
703 struct se_dev_attrib *da = to_attrib(item);
708 bool flag; 704 bool flag;
709 int ret; 705 int ret;
710 706
@@ -727,9 +723,10 @@ static ssize_t store_emulate_tpws(struct se_dev_attrib *da,
727 return count; 723 return count;
728} 724}
729 725
730static ssize_t store_pi_prot_type(struct se_dev_attrib *da, 726static ssize_t pi_prot_type_store(struct config_item *item,
731 const char *page, size_t count) 727 const char *page, size_t count)
732{ 728{
729 struct se_dev_attrib *da = to_attrib(item);
733 int old_prot = da->pi_prot_type, ret; 730 int old_prot = da->pi_prot_type, ret;
734 struct se_device *dev = da->da_dev; 731 struct se_device *dev = da->da_dev;
735 u32 flag; 732 u32 flag;
@@ -787,9 +784,10 @@ static ssize_t store_pi_prot_type(struct se_dev_attrib *da,
787 return count; 784 return count;
788} 785}
789 786
790static ssize_t store_pi_prot_format(struct se_dev_attrib *da, 787static ssize_t pi_prot_format_store(struct config_item *item,
791 const char *page, size_t count) 788 const char *page, size_t count)
792{ 789{
790 struct se_dev_attrib *da = to_attrib(item);
793 struct se_device *dev = da->da_dev; 791 struct se_device *dev = da->da_dev;
794 bool flag; 792 bool flag;
795 int ret; 793 int ret;
@@ -824,9 +822,10 @@ static ssize_t store_pi_prot_format(struct se_dev_attrib *da,
824 return count; 822 return count;
825} 823}
826 824
827static ssize_t store_force_pr_aptpl(struct se_dev_attrib *da, 825static ssize_t force_pr_aptpl_store(struct config_item *item,
828 const char *page, size_t count) 826 const char *page, size_t count)
829{ 827{
828 struct se_dev_attrib *da = to_attrib(item);
830 bool flag; 829 bool flag;
831 int ret; 830 int ret;
832 831
@@ -845,9 +844,10 @@ static ssize_t store_force_pr_aptpl(struct se_dev_attrib *da,
845 return count; 844 return count;
846} 845}
847 846
848static ssize_t store_emulate_rest_reord(struct se_dev_attrib *da, 847static ssize_t emulate_rest_reord_store(struct config_item *item,
849 const char *page, size_t count) 848 const char *page, size_t count)
850{ 849{
850 struct se_dev_attrib *da = to_attrib(item);
851 bool flag; 851 bool flag;
852 int ret; 852 int ret;
853 853
@@ -869,9 +869,10 @@ static ssize_t store_emulate_rest_reord(struct se_dev_attrib *da,
869/* 869/*
870 * Note, this can only be called on unexported SE Device Object. 870 * Note, this can only be called on unexported SE Device Object.
871 */ 871 */
872static ssize_t store_queue_depth(struct se_dev_attrib *da, 872static ssize_t queue_depth_store(struct config_item *item,
873 const char *page, size_t count) 873 const char *page, size_t count)
874{ 874{
875 struct se_dev_attrib *da = to_attrib(item);
875 struct se_device *dev = da->da_dev; 876 struct se_device *dev = da->da_dev;
876 u32 val; 877 u32 val;
877 int ret; 878 int ret;
@@ -905,9 +906,10 @@ static ssize_t store_queue_depth(struct se_dev_attrib *da,
905 return count; 906 return count;
906} 907}
907 908
908static ssize_t store_optimal_sectors(struct se_dev_attrib *da, 909static ssize_t optimal_sectors_store(struct config_item *item,
909 const char *page, size_t count) 910 const char *page, size_t count)
910{ 911{
912 struct se_dev_attrib *da = to_attrib(item);
911 u32 val; 913 u32 val;
912 int ret; 914 int ret;
913 915
@@ -934,9 +936,10 @@ static ssize_t store_optimal_sectors(struct se_dev_attrib *da,
934 return count; 936 return count;
935} 937}
936 938
937static ssize_t store_block_size(struct se_dev_attrib *da, 939static ssize_t block_size_store(struct config_item *item,
938 const char *page, size_t count) 940 const char *page, size_t count)
939{ 941{
942 struct se_dev_attrib *da = to_attrib(item);
940 u32 val; 943 u32 val;
941 int ret; 944 int ret;
942 945
@@ -967,50 +970,35 @@ static ssize_t store_block_size(struct se_dev_attrib *da,
967 return count; 970 return count;
968} 971}
969 972
970CONFIGFS_EATTR_STRUCT(target_backend_dev_attrib, se_dev_attrib); 973CONFIGFS_ATTR(, emulate_model_alias);
971#define TB_DEV_ATTR(_backend, _name, _mode) \ 974CONFIGFS_ATTR(, emulate_dpo);
972static struct target_backend_dev_attrib_attribute _backend##_dev_attrib_##_name = \ 975CONFIGFS_ATTR(, emulate_fua_write);
973 __CONFIGFS_EATTR(_name, _mode, \ 976CONFIGFS_ATTR(, emulate_fua_read);
974 show_##_name, \ 977CONFIGFS_ATTR(, emulate_write_cache);
975 store_##_name); 978CONFIGFS_ATTR(, emulate_ua_intlck_ctrl);
976 979CONFIGFS_ATTR(, emulate_tas);
977#define TB_DEV_ATTR_RO(_backend, _name) \ 980CONFIGFS_ATTR(, emulate_tpu);
978static struct target_backend_dev_attrib_attribute _backend##_dev_attrib_##_name = \ 981CONFIGFS_ATTR(, emulate_tpws);
979 __CONFIGFS_EATTR_RO(_name, \ 982CONFIGFS_ATTR(, emulate_caw);
980 show_##_name); 983CONFIGFS_ATTR(, emulate_3pc);
981 984CONFIGFS_ATTR(, pi_prot_type);
982TB_DEV_ATTR(target_core, emulate_model_alias, S_IRUGO | S_IWUSR); 985CONFIGFS_ATTR_RO(, hw_pi_prot_type);
983TB_DEV_ATTR(target_core, emulate_dpo, S_IRUGO | S_IWUSR); 986CONFIGFS_ATTR(, pi_prot_format);
984TB_DEV_ATTR(target_core, emulate_fua_write, S_IRUGO | S_IWUSR); 987CONFIGFS_ATTR(, enforce_pr_isids);
985TB_DEV_ATTR(target_core, emulate_fua_read, S_IRUGO | S_IWUSR); 988CONFIGFS_ATTR(, is_nonrot);
986TB_DEV_ATTR(target_core, emulate_write_cache, S_IRUGO | S_IWUSR); 989CONFIGFS_ATTR(, emulate_rest_reord);
987TB_DEV_ATTR(target_core, emulate_ua_intlck_ctrl, S_IRUGO | S_IWUSR); 990CONFIGFS_ATTR(, force_pr_aptpl);
988TB_DEV_ATTR(target_core, emulate_tas, S_IRUGO | S_IWUSR); 991CONFIGFS_ATTR_RO(, hw_block_size);
989TB_DEV_ATTR(target_core, emulate_tpu, S_IRUGO | S_IWUSR); 992CONFIGFS_ATTR(, block_size);
990TB_DEV_ATTR(target_core, emulate_tpws, S_IRUGO | S_IWUSR); 993CONFIGFS_ATTR_RO(, hw_max_sectors);
991TB_DEV_ATTR(target_core, emulate_caw, S_IRUGO | S_IWUSR); 994CONFIGFS_ATTR(, optimal_sectors);
992TB_DEV_ATTR(target_core, emulate_3pc, S_IRUGO | S_IWUSR); 995CONFIGFS_ATTR_RO(, hw_queue_depth);
993TB_DEV_ATTR(target_core, pi_prot_type, S_IRUGO | S_IWUSR); 996CONFIGFS_ATTR(, queue_depth);
994TB_DEV_ATTR_RO(target_core, hw_pi_prot_type); 997CONFIGFS_ATTR(, max_unmap_lba_count);
995TB_DEV_ATTR(target_core, pi_prot_format, S_IRUGO | S_IWUSR); 998CONFIGFS_ATTR(, max_unmap_block_desc_count);
996TB_DEV_ATTR(target_core, enforce_pr_isids, S_IRUGO | S_IWUSR); 999CONFIGFS_ATTR(, unmap_granularity);
997TB_DEV_ATTR(target_core, is_nonrot, S_IRUGO | S_IWUSR); 1000CONFIGFS_ATTR(, unmap_granularity_alignment);
998TB_DEV_ATTR(target_core, emulate_rest_reord, S_IRUGO | S_IWUSR); 1001CONFIGFS_ATTR(, max_write_same_len);
999TB_DEV_ATTR(target_core, force_pr_aptpl, S_IRUGO | S_IWUSR)
1000TB_DEV_ATTR_RO(target_core, hw_block_size);
1001TB_DEV_ATTR(target_core, block_size, S_IRUGO | S_IWUSR)
1002TB_DEV_ATTR_RO(target_core, hw_max_sectors);
1003TB_DEV_ATTR(target_core, optimal_sectors, S_IRUGO | S_IWUSR);
1004TB_DEV_ATTR_RO(target_core, hw_queue_depth);
1005TB_DEV_ATTR(target_core, queue_depth, S_IRUGO | S_IWUSR);
1006TB_DEV_ATTR(target_core, max_unmap_lba_count, S_IRUGO | S_IWUSR);
1007TB_DEV_ATTR(target_core, max_unmap_block_desc_count, S_IRUGO | S_IWUSR);
1008TB_DEV_ATTR(target_core, unmap_granularity, S_IRUGO | S_IWUSR);
1009TB_DEV_ATTR(target_core, unmap_granularity_alignment, S_IRUGO | S_IWUSR);
1010TB_DEV_ATTR(target_core, max_write_same_len, S_IRUGO | S_IWUSR);
1011
1012CONFIGFS_EATTR_STRUCT(target_core_dev_attrib, se_dev_attrib);
1013CONFIGFS_EATTR_OPS(target_core_dev_attrib, se_dev_attrib, da_group);
1014 1002
1015/* 1003/*
1016 * dev_attrib attributes for devices using the target core SBC/SPC 1004 * dev_attrib attributes for devices using the target core SBC/SPC
@@ -1018,100 +1006,78 @@ CONFIGFS_EATTR_OPS(target_core_dev_attrib, se_dev_attrib, da_group);
1018 * these. 1006 * these.
1019 */ 1007 */
1020struct configfs_attribute *sbc_attrib_attrs[] = { 1008struct configfs_attribute *sbc_attrib_attrs[] = {
1021 &target_core_dev_attrib_emulate_model_alias.attr, 1009 &attr_emulate_model_alias,
1022 &target_core_dev_attrib_emulate_dpo.attr, 1010 &attr_emulate_dpo,
1023 &target_core_dev_attrib_emulate_fua_write.attr, 1011 &attr_emulate_fua_write,
1024 &target_core_dev_attrib_emulate_fua_read.attr, 1012 &attr_emulate_fua_read,
1025 &target_core_dev_attrib_emulate_write_cache.attr, 1013 &attr_emulate_write_cache,
1026 &target_core_dev_attrib_emulate_ua_intlck_ctrl.attr, 1014 &attr_emulate_ua_intlck_ctrl,
1027 &target_core_dev_attrib_emulate_tas.attr, 1015 &attr_emulate_tas,
1028 &target_core_dev_attrib_emulate_tpu.attr, 1016 &attr_emulate_tpu,
1029 &target_core_dev_attrib_emulate_tpws.attr, 1017 &attr_emulate_tpws,
1030 &target_core_dev_attrib_emulate_caw.attr, 1018 &attr_emulate_caw,
1031 &target_core_dev_attrib_emulate_3pc.attr, 1019 &attr_emulate_3pc,
1032 &target_core_dev_attrib_pi_prot_type.attr, 1020 &attr_pi_prot_type,
1033 &target_core_dev_attrib_hw_pi_prot_type.attr, 1021 &attr_hw_pi_prot_type,
1034 &target_core_dev_attrib_pi_prot_format.attr, 1022 &attr_pi_prot_format,
1035 &target_core_dev_attrib_enforce_pr_isids.attr, 1023 &attr_enforce_pr_isids,
1036 &target_core_dev_attrib_is_nonrot.attr, 1024 &attr_is_nonrot,
1037 &target_core_dev_attrib_emulate_rest_reord.attr, 1025 &attr_emulate_rest_reord,
1038 &target_core_dev_attrib_force_pr_aptpl.attr, 1026 &attr_force_pr_aptpl,
1039 &target_core_dev_attrib_hw_block_size.attr, 1027 &attr_hw_block_size,
1040 &target_core_dev_attrib_block_size.attr, 1028 &attr_block_size,
1041 &target_core_dev_attrib_hw_max_sectors.attr, 1029 &attr_hw_max_sectors,
1042 &target_core_dev_attrib_optimal_sectors.attr, 1030 &attr_optimal_sectors,
1043 &target_core_dev_attrib_hw_queue_depth.attr, 1031 &attr_hw_queue_depth,
1044 &target_core_dev_attrib_queue_depth.attr, 1032 &attr_queue_depth,
1045 &target_core_dev_attrib_max_unmap_lba_count.attr, 1033 &attr_max_unmap_lba_count,
1046 &target_core_dev_attrib_max_unmap_block_desc_count.attr, 1034 &attr_max_unmap_block_desc_count,
1047 &target_core_dev_attrib_unmap_granularity.attr, 1035 &attr_unmap_granularity,
1048 &target_core_dev_attrib_unmap_granularity_alignment.attr, 1036 &attr_unmap_granularity_alignment,
1049 &target_core_dev_attrib_max_write_same_len.attr, 1037 &attr_max_write_same_len,
1050 NULL, 1038 NULL,
1051}; 1039};
1052EXPORT_SYMBOL(sbc_attrib_attrs); 1040EXPORT_SYMBOL(sbc_attrib_attrs);
1053 1041
1054TB_DEV_ATTR_RO(target_pt, hw_pi_prot_type);
1055TB_DEV_ATTR_RO(target_pt, hw_block_size);
1056TB_DEV_ATTR_RO(target_pt, hw_max_sectors);
1057TB_DEV_ATTR_RO(target_pt, hw_queue_depth);
1058
1059/* 1042/*
1060 * Minimal dev_attrib attributes for devices passing through CDBs. 1043 * Minimal dev_attrib attributes for devices passing through CDBs.
1061 * In this case we only provide a few read-only attributes for 1044 * In this case we only provide a few read-only attributes for
1062 * backwards compatibility. 1045 * backwards compatibility.
1063 */ 1046 */
1064struct configfs_attribute *passthrough_attrib_attrs[] = { 1047struct configfs_attribute *passthrough_attrib_attrs[] = {
1065 &target_pt_dev_attrib_hw_pi_prot_type.attr, 1048 &attr_hw_pi_prot_type,
1066 &target_pt_dev_attrib_hw_block_size.attr, 1049 &attr_hw_block_size,
1067 &target_pt_dev_attrib_hw_max_sectors.attr, 1050 &attr_hw_max_sectors,
1068 &target_pt_dev_attrib_hw_queue_depth.attr, 1051 &attr_hw_queue_depth,
1069 NULL, 1052 NULL,
1070}; 1053};
1071EXPORT_SYMBOL(passthrough_attrib_attrs); 1054EXPORT_SYMBOL(passthrough_attrib_attrs);
1072 1055
1073static struct configfs_item_operations target_core_dev_attrib_ops = { 1056TB_CIT_SETUP_DRV(dev_attrib, NULL, NULL);
1074 .show_attribute = target_core_dev_attrib_attr_show,
1075 .store_attribute = target_core_dev_attrib_attr_store,
1076};
1077
1078TB_CIT_SETUP_DRV(dev_attrib, &target_core_dev_attrib_ops, NULL);
1079 1057
1080/* End functions for struct config_item_type tb_dev_attrib_cit */ 1058/* End functions for struct config_item_type tb_dev_attrib_cit */
1081 1059
1082/* Start functions for struct config_item_type tb_dev_wwn_cit */ 1060/* Start functions for struct config_item_type tb_dev_wwn_cit */
1083 1061
1084CONFIGFS_EATTR_STRUCT(target_core_dev_wwn, t10_wwn); 1062static struct t10_wwn *to_t10_wwn(struct config_item *item)
1085#define SE_DEV_WWN_ATTR(_name, _mode) \ 1063{
1086static struct target_core_dev_wwn_attribute target_core_dev_wwn_##_name = \ 1064 return container_of(to_config_group(item), struct t10_wwn, t10_wwn_group);
1087 __CONFIGFS_EATTR(_name, _mode, \ 1065}
1088 target_core_dev_wwn_show_attr_##_name, \
1089 target_core_dev_wwn_store_attr_##_name);
1090
1091#define SE_DEV_WWN_ATTR_RO(_name); \
1092do { \
1093 static struct target_core_dev_wwn_attribute \
1094 target_core_dev_wwn_##_name = \
1095 __CONFIGFS_EATTR_RO(_name, \
1096 target_core_dev_wwn_show_attr_##_name); \
1097} while (0);
1098 1066
1099/* 1067/*
1100 * VPD page 0x80 Unit serial 1068 * VPD page 0x80 Unit serial
1101 */ 1069 */
1102static ssize_t target_core_dev_wwn_show_attr_vpd_unit_serial( 1070static ssize_t target_wwn_vpd_unit_serial_show(struct config_item *item,
1103 struct t10_wwn *t10_wwn, 1071 char *page)
1104 char *page)
1105{ 1072{
1106 return sprintf(page, "T10 VPD Unit Serial Number: %s\n", 1073 return sprintf(page, "T10 VPD Unit Serial Number: %s\n",
1107 &t10_wwn->unit_serial[0]); 1074 &to_t10_wwn(item)->unit_serial[0]);
1108} 1075}
1109 1076
1110static ssize_t target_core_dev_wwn_store_attr_vpd_unit_serial( 1077static ssize_t target_wwn_vpd_unit_serial_store(struct config_item *item,
1111 struct t10_wwn *t10_wwn, 1078 const char *page, size_t count)
1112 const char *page,
1113 size_t count)
1114{ 1079{
1080 struct t10_wwn *t10_wwn = to_t10_wwn(item);
1115 struct se_device *dev = t10_wwn->t10_dev; 1081 struct se_device *dev = t10_wwn->t10_dev;
1116 unsigned char buf[INQUIRY_VPD_SERIAL_LEN]; 1082 unsigned char buf[INQUIRY_VPD_SERIAL_LEN];
1117 1083
@@ -1167,15 +1133,13 @@ static ssize_t target_core_dev_wwn_store_attr_vpd_unit_serial(
1167 return count; 1133 return count;
1168} 1134}
1169 1135
1170SE_DEV_WWN_ATTR(vpd_unit_serial, S_IRUGO | S_IWUSR);
1171
1172/* 1136/*
1173 * VPD page 0x83 Protocol Identifier 1137 * VPD page 0x83 Protocol Identifier
1174 */ 1138 */
1175static ssize_t target_core_dev_wwn_show_attr_vpd_protocol_identifier( 1139static ssize_t target_wwn_vpd_protocol_identifier_show(struct config_item *item,
1176 struct t10_wwn *t10_wwn, 1140 char *page)
1177 char *page)
1178{ 1141{
1142 struct t10_wwn *t10_wwn = to_t10_wwn(item);
1179 struct t10_vpd *vpd; 1143 struct t10_vpd *vpd;
1180 unsigned char buf[VPD_TMP_BUF_SIZE]; 1144 unsigned char buf[VPD_TMP_BUF_SIZE];
1181 ssize_t len = 0; 1145 ssize_t len = 0;
@@ -1199,25 +1163,15 @@ static ssize_t target_core_dev_wwn_show_attr_vpd_protocol_identifier(
1199 return len; 1163 return len;
1200} 1164}
1201 1165
1202static ssize_t target_core_dev_wwn_store_attr_vpd_protocol_identifier(
1203 struct t10_wwn *t10_wwn,
1204 const char *page,
1205 size_t count)
1206{
1207 return -ENOSYS;
1208}
1209
1210SE_DEV_WWN_ATTR(vpd_protocol_identifier, S_IRUGO | S_IWUSR);
1211
1212/* 1166/*
1213 * Generic wrapper for dumping VPD identifiers by association. 1167 * Generic wrapper for dumping VPD identifiers by association.
1214 */ 1168 */
1215#define DEF_DEV_WWN_ASSOC_SHOW(_name, _assoc) \ 1169#define DEF_DEV_WWN_ASSOC_SHOW(_name, _assoc) \
1216static ssize_t target_core_dev_wwn_show_attr_##_name( \ 1170static ssize_t target_wwn_##_name##_show(struct config_item *item, \
1217 struct t10_wwn *t10_wwn, \ 1171 char *page) \
1218 char *page) \
1219{ \ 1172{ \
1220 struct t10_vpd *vpd; \ 1173 struct t10_wwn *t10_wwn = to_t10_wwn(item); \
1174 struct t10_vpd *vpd; \
1221 unsigned char buf[VPD_TMP_BUF_SIZE]; \ 1175 unsigned char buf[VPD_TMP_BUF_SIZE]; \
1222 ssize_t len = 0; \ 1176 ssize_t len = 0; \
1223 \ 1177 \
@@ -1249,84 +1203,39 @@ static ssize_t target_core_dev_wwn_show_attr_##_name( \
1249 return len; \ 1203 return len; \
1250} 1204}
1251 1205
1252/* 1206/* VPD page 0x83 Association: Logical Unit */
1253 * VPD page 0x83 Association: Logical Unit
1254 */
1255DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_logical_unit, 0x00); 1207DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_logical_unit, 0x00);
1256 1208/* VPD page 0x83 Association: Target Port */
1257static ssize_t target_core_dev_wwn_store_attr_vpd_assoc_logical_unit(
1258 struct t10_wwn *t10_wwn,
1259 const char *page,
1260 size_t count)
1261{
1262 return -ENOSYS;
1263}
1264
1265SE_DEV_WWN_ATTR(vpd_assoc_logical_unit, S_IRUGO | S_IWUSR);
1266
1267/*
1268 * VPD page 0x83 Association: Target Port
1269 */
1270DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_target_port, 0x10); 1209DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_target_port, 0x10);
1271 1210/* VPD page 0x83 Association: SCSI Target Device */
1272static ssize_t target_core_dev_wwn_store_attr_vpd_assoc_target_port(
1273 struct t10_wwn *t10_wwn,
1274 const char *page,
1275 size_t count)
1276{
1277 return -ENOSYS;
1278}
1279
1280SE_DEV_WWN_ATTR(vpd_assoc_target_port, S_IRUGO | S_IWUSR);
1281
1282/*
1283 * VPD page 0x83 Association: SCSI Target Device
1284 */
1285DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_scsi_target_device, 0x20); 1211DEF_DEV_WWN_ASSOC_SHOW(vpd_assoc_scsi_target_device, 0x20);
1286 1212
1287static ssize_t target_core_dev_wwn_store_attr_vpd_assoc_scsi_target_device( 1213CONFIGFS_ATTR(target_wwn_, vpd_unit_serial);
1288 struct t10_wwn *t10_wwn, 1214CONFIGFS_ATTR_RO(target_wwn_, vpd_protocol_identifier);
1289 const char *page, 1215CONFIGFS_ATTR_RO(target_wwn_, vpd_assoc_logical_unit);
1290 size_t count) 1216CONFIGFS_ATTR_RO(target_wwn_, vpd_assoc_target_port);
1291{ 1217CONFIGFS_ATTR_RO(target_wwn_, vpd_assoc_scsi_target_device);
1292 return -ENOSYS;
1293}
1294
1295SE_DEV_WWN_ATTR(vpd_assoc_scsi_target_device, S_IRUGO | S_IWUSR);
1296
1297CONFIGFS_EATTR_OPS(target_core_dev_wwn, t10_wwn, t10_wwn_group);
1298 1218
1299static struct configfs_attribute *target_core_dev_wwn_attrs[] = { 1219static struct configfs_attribute *target_core_dev_wwn_attrs[] = {
1300 &target_core_dev_wwn_vpd_unit_serial.attr, 1220 &target_wwn_attr_vpd_unit_serial,
1301 &target_core_dev_wwn_vpd_protocol_identifier.attr, 1221 &target_wwn_attr_vpd_protocol_identifier,
1302 &target_core_dev_wwn_vpd_assoc_logical_unit.attr, 1222 &target_wwn_attr_vpd_assoc_logical_unit,
1303 &target_core_dev_wwn_vpd_assoc_target_port.attr, 1223 &target_wwn_attr_vpd_assoc_target_port,
1304 &target_core_dev_wwn_vpd_assoc_scsi_target_device.attr, 1224 &target_wwn_attr_vpd_assoc_scsi_target_device,
1305 NULL, 1225 NULL,
1306}; 1226};
1307 1227
1308static struct configfs_item_operations target_core_dev_wwn_ops = { 1228TB_CIT_SETUP(dev_wwn, NULL, NULL, target_core_dev_wwn_attrs);
1309 .show_attribute = target_core_dev_wwn_attr_show,
1310 .store_attribute = target_core_dev_wwn_attr_store,
1311};
1312
1313TB_CIT_SETUP(dev_wwn, &target_core_dev_wwn_ops, NULL, target_core_dev_wwn_attrs);
1314 1229
1315/* End functions for struct config_item_type tb_dev_wwn_cit */ 1230/* End functions for struct config_item_type tb_dev_wwn_cit */
1316 1231
1317/* Start functions for struct config_item_type tb_dev_pr_cit */ 1232/* Start functions for struct config_item_type tb_dev_pr_cit */
1318 1233
1319CONFIGFS_EATTR_STRUCT(target_core_dev_pr, se_device); 1234static struct se_device *pr_to_dev(struct config_item *item)
1320#define SE_DEV_PR_ATTR(_name, _mode) \ 1235{
1321static struct target_core_dev_pr_attribute target_core_dev_pr_##_name = \ 1236 return container_of(to_config_group(item), struct se_device,
1322 __CONFIGFS_EATTR(_name, _mode, \ 1237 dev_pr_group);
1323 target_core_dev_pr_show_attr_##_name, \ 1238}
1324 target_core_dev_pr_store_attr_##_name);
1325
1326#define SE_DEV_PR_ATTR_RO(_name); \
1327static struct target_core_dev_pr_attribute target_core_dev_pr_##_name = \
1328 __CONFIGFS_EATTR_RO(_name, \
1329 target_core_dev_pr_show_attr_##_name);
1330 1239
1331static ssize_t target_core_dev_pr_show_spc3_res(struct se_device *dev, 1240static ssize_t target_core_dev_pr_show_spc3_res(struct se_device *dev,
1332 char *page) 1241 char *page)
@@ -1367,9 +1276,9 @@ static ssize_t target_core_dev_pr_show_spc2_res(struct se_device *dev,
1367 return len; 1276 return len;
1368} 1277}
1369 1278
1370static ssize_t target_core_dev_pr_show_attr_res_holder(struct se_device *dev, 1279static ssize_t target_pr_res_holder_show(struct config_item *item, char *page)
1371 char *page)
1372{ 1280{
1281 struct se_device *dev = pr_to_dev(item);
1373 int ret; 1282 int ret;
1374 1283
1375 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) 1284 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
@@ -1384,11 +1293,10 @@ static ssize_t target_core_dev_pr_show_attr_res_holder(struct se_device *dev,
1384 return ret; 1293 return ret;
1385} 1294}
1386 1295
1387SE_DEV_PR_ATTR_RO(res_holder); 1296static ssize_t target_pr_res_pr_all_tgt_pts_show(struct config_item *item,
1388 1297 char *page)
1389static ssize_t target_core_dev_pr_show_attr_res_pr_all_tgt_pts(
1390 struct se_device *dev, char *page)
1391{ 1298{
1299 struct se_device *dev = pr_to_dev(item);
1392 ssize_t len = 0; 1300 ssize_t len = 0;
1393 1301
1394 spin_lock(&dev->dev_reservation_lock); 1302 spin_lock(&dev->dev_reservation_lock);
@@ -1406,22 +1314,17 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_all_tgt_pts(
1406 return len; 1314 return len;
1407} 1315}
1408 1316
1409SE_DEV_PR_ATTR_RO(res_pr_all_tgt_pts); 1317static ssize_t target_pr_res_pr_generation_show(struct config_item *item,
1410 1318 char *page)
1411static ssize_t target_core_dev_pr_show_attr_res_pr_generation(
1412 struct se_device *dev, char *page)
1413{ 1319{
1414 return sprintf(page, "0x%08x\n", dev->t10_pr.pr_generation); 1320 return sprintf(page, "0x%08x\n", pr_to_dev(item)->t10_pr.pr_generation);
1415} 1321}
1416 1322
1417SE_DEV_PR_ATTR_RO(res_pr_generation);
1418 1323
1419/* 1324static ssize_t target_pr_res_pr_holder_tg_port_show(struct config_item *item,
1420 * res_pr_holder_tg_port 1325 char *page)
1421 */
1422static ssize_t target_core_dev_pr_show_attr_res_pr_holder_tg_port(
1423 struct se_device *dev, char *page)
1424{ 1326{
1327 struct se_device *dev = pr_to_dev(item);
1425 struct se_node_acl *se_nacl; 1328 struct se_node_acl *se_nacl;
1426 struct se_portal_group *se_tpg; 1329 struct se_portal_group *se_tpg;
1427 struct t10_pr_registration *pr_reg; 1330 struct t10_pr_registration *pr_reg;
@@ -1453,11 +1356,11 @@ out_unlock:
1453 return len; 1356 return len;
1454} 1357}
1455 1358
1456SE_DEV_PR_ATTR_RO(res_pr_holder_tg_port);
1457 1359
1458static ssize_t target_core_dev_pr_show_attr_res_pr_registered_i_pts( 1360static ssize_t target_pr_res_pr_registered_i_pts_show(struct config_item *item,
1459 struct se_device *dev, char *page) 1361 char *page)
1460{ 1362{
1363 struct se_device *dev = pr_to_dev(item);
1461 const struct target_core_fabric_ops *tfo; 1364 const struct target_core_fabric_ops *tfo;
1462 struct t10_pr_registration *pr_reg; 1365 struct t10_pr_registration *pr_reg;
1463 unsigned char buf[384]; 1366 unsigned char buf[384];
@@ -1495,11 +1398,9 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_registered_i_pts(
1495 return len; 1398 return len;
1496} 1399}
1497 1400
1498SE_DEV_PR_ATTR_RO(res_pr_registered_i_pts); 1401static ssize_t target_pr_res_pr_type_show(struct config_item *item, char *page)
1499
1500static ssize_t target_core_dev_pr_show_attr_res_pr_type(
1501 struct se_device *dev, char *page)
1502{ 1402{
1403 struct se_device *dev = pr_to_dev(item);
1503 struct t10_pr_registration *pr_reg; 1404 struct t10_pr_registration *pr_reg;
1504 ssize_t len = 0; 1405 ssize_t len = 0;
1505 1406
@@ -1516,11 +1417,10 @@ static ssize_t target_core_dev_pr_show_attr_res_pr_type(
1516 return len; 1417 return len;
1517} 1418}
1518 1419
1519SE_DEV_PR_ATTR_RO(res_pr_type); 1420static ssize_t target_pr_res_type_show(struct config_item *item, char *page)
1520
1521static ssize_t target_core_dev_pr_show_attr_res_type(
1522 struct se_device *dev, char *page)
1523{ 1421{
1422 struct se_device *dev = pr_to_dev(item);
1423
1524 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) 1424 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
1525 return sprintf(page, "SPC_PASSTHROUGH\n"); 1425 return sprintf(page, "SPC_PASSTHROUGH\n");
1526 else if (dev->dev_reservation_flags & DRF_SPC2_RESERVATIONS) 1426 else if (dev->dev_reservation_flags & DRF_SPC2_RESERVATIONS)
@@ -1529,11 +1429,11 @@ static ssize_t target_core_dev_pr_show_attr_res_type(
1529 return sprintf(page, "SPC3_PERSISTENT_RESERVATIONS\n"); 1429 return sprintf(page, "SPC3_PERSISTENT_RESERVATIONS\n");
1530} 1430}
1531 1431
1532SE_DEV_PR_ATTR_RO(res_type); 1432static ssize_t target_pr_res_aptpl_active_show(struct config_item *item,
1533 1433 char *page)
1534static ssize_t target_core_dev_pr_show_attr_res_aptpl_active(
1535 struct se_device *dev, char *page)
1536{ 1434{
1435 struct se_device *dev = pr_to_dev(item);
1436
1537 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) 1437 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
1538 return 0; 1438 return 0;
1539 1439
@@ -1541,14 +1441,11 @@ static ssize_t target_core_dev_pr_show_attr_res_aptpl_active(
1541 (dev->t10_pr.pr_aptpl_active) ? "Activated" : "Disabled"); 1441 (dev->t10_pr.pr_aptpl_active) ? "Activated" : "Disabled");
1542} 1442}
1543 1443
1544SE_DEV_PR_ATTR_RO(res_aptpl_active); 1444static ssize_t target_pr_res_aptpl_metadata_show(struct config_item *item,
1545 1445 char *page)
1546/*
1547 * res_aptpl_metadata
1548 */
1549static ssize_t target_core_dev_pr_show_attr_res_aptpl_metadata(
1550 struct se_device *dev, char *page)
1551{ 1446{
1447 struct se_device *dev = pr_to_dev(item);
1448
1552 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH) 1449 if (dev->transport->transport_flags & TRANSPORT_FLAG_PASSTHROUGH)
1553 return 0; 1450 return 0;
1554 1451
@@ -1580,11 +1477,10 @@ static match_table_t tokens = {
1580 {Opt_err, NULL} 1477 {Opt_err, NULL}
1581}; 1478};
1582 1479
1583static ssize_t target_core_dev_pr_store_attr_res_aptpl_metadata( 1480static ssize_t target_pr_res_aptpl_metadata_store(struct config_item *item,
1584 struct se_device *dev, 1481 const char *page, size_t count)
1585 const char *page,
1586 size_t count)
1587{ 1482{
1483 struct se_device *dev = pr_to_dev(item);
1588 unsigned char *i_fabric = NULL, *i_port = NULL, *isid = NULL; 1484 unsigned char *i_fabric = NULL, *i_port = NULL, *isid = NULL;
1589 unsigned char *t_fabric = NULL, *t_port = NULL; 1485 unsigned char *t_fabric = NULL, *t_port = NULL;
1590 char *orig, *ptr, *opts; 1486 char *orig, *ptr, *opts;
@@ -1765,37 +1661,44 @@ out:
1765 return (ret == 0) ? count : ret; 1661 return (ret == 0) ? count : ret;
1766} 1662}
1767 1663
1768SE_DEV_PR_ATTR(res_aptpl_metadata, S_IRUGO | S_IWUSR);
1769 1664
1770CONFIGFS_EATTR_OPS(target_core_dev_pr, se_device, dev_pr_group); 1665CONFIGFS_ATTR_RO(target_pr_, res_holder);
1666CONFIGFS_ATTR_RO(target_pr_, res_pr_all_tgt_pts);
1667CONFIGFS_ATTR_RO(target_pr_, res_pr_generation);
1668CONFIGFS_ATTR_RO(target_pr_, res_pr_holder_tg_port);
1669CONFIGFS_ATTR_RO(target_pr_, res_pr_registered_i_pts);
1670CONFIGFS_ATTR_RO(target_pr_, res_pr_type);
1671CONFIGFS_ATTR_RO(target_pr_, res_type);
1672CONFIGFS_ATTR_RO(target_pr_, res_aptpl_active);
1673CONFIGFS_ATTR(target_pr_, res_aptpl_metadata);
1771 1674
1772static struct configfs_attribute *target_core_dev_pr_attrs[] = { 1675static struct configfs_attribute *target_core_dev_pr_attrs[] = {
1773 &target_core_dev_pr_res_holder.attr, 1676 &target_pr_attr_res_holder,
1774 &target_core_dev_pr_res_pr_all_tgt_pts.attr, 1677 &target_pr_attr_res_pr_all_tgt_pts,
1775 &target_core_dev_pr_res_pr_generation.attr, 1678 &target_pr_attr_res_pr_generation,
1776 &target_core_dev_pr_res_pr_holder_tg_port.attr, 1679 &target_pr_attr_res_pr_holder_tg_port,
1777 &target_core_dev_pr_res_pr_registered_i_pts.attr, 1680 &target_pr_attr_res_pr_registered_i_pts,
1778 &target_core_dev_pr_res_pr_type.attr, 1681 &target_pr_attr_res_pr_type,
1779 &target_core_dev_pr_res_type.attr, 1682 &target_pr_attr_res_type,
1780 &target_core_dev_pr_res_aptpl_active.attr, 1683 &target_pr_attr_res_aptpl_active,
1781 &target_core_dev_pr_res_aptpl_metadata.attr, 1684 &target_pr_attr_res_aptpl_metadata,
1782 NULL, 1685 NULL,
1783}; 1686};
1784 1687
1785static struct configfs_item_operations target_core_dev_pr_ops = { 1688TB_CIT_SETUP(dev_pr, NULL, NULL, target_core_dev_pr_attrs);
1786 .show_attribute = target_core_dev_pr_attr_show,
1787 .store_attribute = target_core_dev_pr_attr_store,
1788};
1789
1790TB_CIT_SETUP(dev_pr, &target_core_dev_pr_ops, NULL, target_core_dev_pr_attrs);
1791 1689
1792/* End functions for struct config_item_type tb_dev_pr_cit */ 1690/* End functions for struct config_item_type tb_dev_pr_cit */
1793 1691
1794/* Start functions for struct config_item_type tb_dev_cit */ 1692/* Start functions for struct config_item_type tb_dev_cit */
1795 1693
1796static ssize_t target_core_show_dev_info(void *p, char *page) 1694static inline struct se_device *to_device(struct config_item *item)
1695{
1696 return container_of(to_config_group(item), struct se_device, dev_group);
1697}
1698
1699static ssize_t target_dev_info_show(struct config_item *item, char *page)
1797{ 1700{
1798 struct se_device *dev = p; 1701 struct se_device *dev = to_device(item);
1799 int bl = 0; 1702 int bl = 0;
1800 ssize_t read_bytes = 0; 1703 ssize_t read_bytes = 0;
1801 1704
@@ -1806,35 +1709,17 @@ static ssize_t target_core_show_dev_info(void *p, char *page)
1806 return read_bytes; 1709 return read_bytes;
1807} 1710}
1808 1711
1809static struct target_core_configfs_attribute target_core_attr_dev_info = { 1712static ssize_t target_dev_control_store(struct config_item *item,
1810 .attr = { .ca_owner = THIS_MODULE, 1713 const char *page, size_t count)
1811 .ca_name = "info",
1812 .ca_mode = S_IRUGO },
1813 .show = target_core_show_dev_info,
1814 .store = NULL,
1815};
1816
1817static ssize_t target_core_store_dev_control(
1818 void *p,
1819 const char *page,
1820 size_t count)
1821{ 1714{
1822 struct se_device *dev = p; 1715 struct se_device *dev = to_device(item);
1823 1716
1824 return dev->transport->set_configfs_dev_params(dev, page, count); 1717 return dev->transport->set_configfs_dev_params(dev, page, count);
1825} 1718}
1826 1719
1827static struct target_core_configfs_attribute target_core_attr_dev_control = { 1720static ssize_t target_dev_alias_show(struct config_item *item, char *page)
1828 .attr = { .ca_owner = THIS_MODULE,
1829 .ca_name = "control",
1830 .ca_mode = S_IWUSR },
1831 .show = NULL,
1832 .store = target_core_store_dev_control,
1833};
1834
1835static ssize_t target_core_show_dev_alias(void *p, char *page)
1836{ 1721{
1837 struct se_device *dev = p; 1722 struct se_device *dev = to_device(item);
1838 1723
1839 if (!(dev->dev_flags & DF_USING_ALIAS)) 1724 if (!(dev->dev_flags & DF_USING_ALIAS))
1840 return 0; 1725 return 0;
@@ -1842,12 +1727,10 @@ static ssize_t target_core_show_dev_alias(void *p, char *page)
1842 return snprintf(page, PAGE_SIZE, "%s\n", dev->dev_alias); 1727 return snprintf(page, PAGE_SIZE, "%s\n", dev->dev_alias);
1843} 1728}
1844 1729
1845static ssize_t target_core_store_dev_alias( 1730static ssize_t target_dev_alias_store(struct config_item *item,
1846 void *p, 1731 const char *page, size_t count)
1847 const char *page,
1848 size_t count)
1849{ 1732{
1850 struct se_device *dev = p; 1733 struct se_device *dev = to_device(item);
1851 struct se_hba *hba = dev->se_hba; 1734 struct se_hba *hba = dev->se_hba;
1852 ssize_t read_bytes; 1735 ssize_t read_bytes;
1853 1736
@@ -1874,17 +1757,9 @@ static ssize_t target_core_store_dev_alias(
1874 return read_bytes; 1757 return read_bytes;
1875} 1758}
1876 1759
1877static struct target_core_configfs_attribute target_core_attr_dev_alias = { 1760static ssize_t target_dev_udev_path_show(struct config_item *item, char *page)
1878 .attr = { .ca_owner = THIS_MODULE,
1879 .ca_name = "alias",
1880 .ca_mode = S_IRUGO | S_IWUSR },
1881 .show = target_core_show_dev_alias,
1882 .store = target_core_store_dev_alias,
1883};
1884
1885static ssize_t target_core_show_dev_udev_path(void *p, char *page)
1886{ 1761{
1887 struct se_device *dev = p; 1762 struct se_device *dev = to_device(item);
1888 1763
1889 if (!(dev->dev_flags & DF_USING_UDEV_PATH)) 1764 if (!(dev->dev_flags & DF_USING_UDEV_PATH))
1890 return 0; 1765 return 0;
@@ -1892,12 +1767,10 @@ static ssize_t target_core_show_dev_udev_path(void *p, char *page)
1892 return snprintf(page, PAGE_SIZE, "%s\n", dev->udev_path); 1767 return snprintf(page, PAGE_SIZE, "%s\n", dev->udev_path);
1893} 1768}
1894 1769
1895static ssize_t target_core_store_dev_udev_path( 1770static ssize_t target_dev_udev_path_store(struct config_item *item,
1896 void *p, 1771 const char *page, size_t count)
1897 const char *page,
1898 size_t count)
1899{ 1772{
1900 struct se_device *dev = p; 1773 struct se_device *dev = to_device(item);
1901 struct se_hba *hba = dev->se_hba; 1774 struct se_hba *hba = dev->se_hba;
1902 ssize_t read_bytes; 1775 ssize_t read_bytes;
1903 1776
@@ -1925,27 +1798,17 @@ static ssize_t target_core_store_dev_udev_path(
1925 return read_bytes; 1798 return read_bytes;
1926} 1799}
1927 1800
1928static struct target_core_configfs_attribute target_core_attr_dev_udev_path = { 1801static ssize_t target_dev_enable_show(struct config_item *item, char *page)
1929 .attr = { .ca_owner = THIS_MODULE,
1930 .ca_name = "udev_path",
1931 .ca_mode = S_IRUGO | S_IWUSR },
1932 .show = target_core_show_dev_udev_path,
1933 .store = target_core_store_dev_udev_path,
1934};
1935
1936static ssize_t target_core_show_dev_enable(void *p, char *page)
1937{ 1802{
1938 struct se_device *dev = p; 1803 struct se_device *dev = to_device(item);
1939 1804
1940 return snprintf(page, PAGE_SIZE, "%d\n", !!(dev->dev_flags & DF_CONFIGURED)); 1805 return snprintf(page, PAGE_SIZE, "%d\n", !!(dev->dev_flags & DF_CONFIGURED));
1941} 1806}
1942 1807
1943static ssize_t target_core_store_dev_enable( 1808static ssize_t target_dev_enable_store(struct config_item *item,
1944 void *p, 1809 const char *page, size_t count)
1945 const char *page,
1946 size_t count)
1947{ 1810{
1948 struct se_device *dev = p; 1811 struct se_device *dev = to_device(item);
1949 char *ptr; 1812 char *ptr;
1950 int ret; 1813 int ret;
1951 1814
@@ -1962,17 +1825,9 @@ static ssize_t target_core_store_dev_enable(
1962 return count; 1825 return count;
1963} 1826}
1964 1827
1965static struct target_core_configfs_attribute target_core_attr_dev_enable = { 1828static ssize_t target_dev_alua_lu_gp_show(struct config_item *item, char *page)
1966 .attr = { .ca_owner = THIS_MODULE,
1967 .ca_name = "enable",
1968 .ca_mode = S_IRUGO | S_IWUSR },
1969 .show = target_core_show_dev_enable,
1970 .store = target_core_store_dev_enable,
1971};
1972
1973static ssize_t target_core_show_alua_lu_gp(void *p, char *page)
1974{ 1829{
1975 struct se_device *dev = p; 1830 struct se_device *dev = to_device(item);
1976 struct config_item *lu_ci; 1831 struct config_item *lu_ci;
1977 struct t10_alua_lu_gp *lu_gp; 1832 struct t10_alua_lu_gp *lu_gp;
1978 struct t10_alua_lu_gp_member *lu_gp_mem; 1833 struct t10_alua_lu_gp_member *lu_gp_mem;
@@ -1994,12 +1849,10 @@ static ssize_t target_core_show_alua_lu_gp(void *p, char *page)
1994 return len; 1849 return len;
1995} 1850}
1996 1851
1997static ssize_t target_core_store_alua_lu_gp( 1852static ssize_t target_dev_alua_lu_gp_store(struct config_item *item,
1998 void *p, 1853 const char *page, size_t count)
1999 const char *page,
2000 size_t count)
2001{ 1854{
2002 struct se_device *dev = p; 1855 struct se_device *dev = to_device(item);
2003 struct se_hba *hba = dev->se_hba; 1856 struct se_hba *hba = dev->se_hba;
2004 struct t10_alua_lu_gp *lu_gp = NULL, *lu_gp_new = NULL; 1857 struct t10_alua_lu_gp *lu_gp = NULL, *lu_gp_new = NULL;
2005 struct t10_alua_lu_gp_member *lu_gp_mem; 1858 struct t10_alua_lu_gp_member *lu_gp_mem;
@@ -2076,17 +1929,9 @@ static ssize_t target_core_store_alua_lu_gp(
2076 return count; 1929 return count;
2077} 1930}
2078 1931
2079static struct target_core_configfs_attribute target_core_attr_dev_alua_lu_gp = { 1932static ssize_t target_dev_lba_map_show(struct config_item *item, char *page)
2080 .attr = { .ca_owner = THIS_MODULE,
2081 .ca_name = "alua_lu_gp",
2082 .ca_mode = S_IRUGO | S_IWUSR },
2083 .show = target_core_show_alua_lu_gp,
2084 .store = target_core_store_alua_lu_gp,
2085};
2086
2087static ssize_t target_core_show_dev_lba_map(void *p, char *page)
2088{ 1933{
2089 struct se_device *dev = p; 1934 struct se_device *dev = to_device(item);
2090 struct t10_alua_lba_map *map; 1935 struct t10_alua_lba_map *map;
2091 struct t10_alua_lba_map_member *mem; 1936 struct t10_alua_lba_map_member *mem;
2092 char *b = page; 1937 char *b = page;
@@ -2129,12 +1974,10 @@ static ssize_t target_core_show_dev_lba_map(void *p, char *page)
2129 return bl; 1974 return bl;
2130} 1975}
2131 1976
2132static ssize_t target_core_store_dev_lba_map( 1977static ssize_t target_dev_lba_map_store(struct config_item *item,
2133 void *p, 1978 const char *page, size_t count)
2134 const char *page,
2135 size_t count)
2136{ 1979{
2137 struct se_device *dev = p; 1980 struct se_device *dev = to_device(item);
2138 struct t10_alua_lba_map *lba_map = NULL; 1981 struct t10_alua_lba_map *lba_map = NULL;
2139 struct list_head lba_list; 1982 struct list_head lba_list;
2140 char *map_entries, *ptr; 1983 char *map_entries, *ptr;
@@ -2246,22 +2089,22 @@ out:
2246 return count; 2089 return count;
2247} 2090}
2248 2091
2249static struct target_core_configfs_attribute target_core_attr_dev_lba_map = { 2092CONFIGFS_ATTR_RO(target_dev_, info);
2250 .attr = { .ca_owner = THIS_MODULE, 2093CONFIGFS_ATTR_WO(target_dev_, control);
2251 .ca_name = "lba_map", 2094CONFIGFS_ATTR(target_dev_, alias);
2252 .ca_mode = S_IRUGO | S_IWUSR }, 2095CONFIGFS_ATTR(target_dev_, udev_path);
2253 .show = target_core_show_dev_lba_map, 2096CONFIGFS_ATTR(target_dev_, enable);
2254 .store = target_core_store_dev_lba_map, 2097CONFIGFS_ATTR(target_dev_, alua_lu_gp);
2255}; 2098CONFIGFS_ATTR(target_dev_, lba_map);
2256 2099
2257static struct configfs_attribute *target_core_dev_attrs[] = { 2100static struct configfs_attribute *target_core_dev_attrs[] = {
2258 &target_core_attr_dev_info.attr, 2101 &target_dev_attr_info,
2259 &target_core_attr_dev_control.attr, 2102 &target_dev_attr_control,
2260 &target_core_attr_dev_alias.attr, 2103 &target_dev_attr_alias,
2261 &target_core_attr_dev_udev_path.attr, 2104 &target_dev_attr_udev_path,
2262 &target_core_attr_dev_enable.attr, 2105 &target_dev_attr_enable,
2263 &target_core_attr_dev_alua_lu_gp.attr, 2106 &target_dev_attr_alua_lu_gp,
2264 &target_core_attr_dev_lba_map.attr, 2107 &target_dev_attr_lba_map,
2265 NULL, 2108 NULL,
2266}; 2109};
2267 2110
@@ -2275,42 +2118,8 @@ static void target_core_dev_release(struct config_item *item)
2275 target_free_device(dev); 2118 target_free_device(dev);
2276} 2119}
2277 2120
2278static ssize_t target_core_dev_show(struct config_item *item,
2279 struct configfs_attribute *attr,
2280 char *page)
2281{
2282 struct config_group *dev_cg = to_config_group(item);
2283 struct se_device *dev =
2284 container_of(dev_cg, struct se_device, dev_group);
2285 struct target_core_configfs_attribute *tc_attr = container_of(
2286 attr, struct target_core_configfs_attribute, attr);
2287
2288 if (!tc_attr->show)
2289 return -EINVAL;
2290
2291 return tc_attr->show(dev, page);
2292}
2293
2294static ssize_t target_core_dev_store(struct config_item *item,
2295 struct configfs_attribute *attr,
2296 const char *page, size_t count)
2297{
2298 struct config_group *dev_cg = to_config_group(item);
2299 struct se_device *dev =
2300 container_of(dev_cg, struct se_device, dev_group);
2301 struct target_core_configfs_attribute *tc_attr = container_of(
2302 attr, struct target_core_configfs_attribute, attr);
2303
2304 if (!tc_attr->store)
2305 return -EINVAL;
2306
2307 return tc_attr->store(dev, page, count);
2308}
2309
2310static struct configfs_item_operations target_core_dev_item_ops = { 2121static struct configfs_item_operations target_core_dev_item_ops = {
2311 .release = target_core_dev_release, 2122 .release = target_core_dev_release,
2312 .show_attribute = target_core_dev_show,
2313 .store_attribute = target_core_dev_store,
2314}; 2123};
2315 2124
2316TB_CIT_SETUP(dev, &target_core_dev_item_ops, NULL, target_core_dev_attrs); 2125TB_CIT_SETUP(dev, &target_core_dev_item_ops, NULL, target_core_dev_attrs);
@@ -2319,38 +2128,25 @@ TB_CIT_SETUP(dev, &target_core_dev_item_ops, NULL, target_core_dev_attrs);
2319 2128
2320/* Start functions for struct config_item_type target_core_alua_lu_gp_cit */ 2129/* Start functions for struct config_item_type target_core_alua_lu_gp_cit */
2321 2130
2322CONFIGFS_EATTR_STRUCT(target_core_alua_lu_gp, t10_alua_lu_gp); 2131static inline struct t10_alua_lu_gp *to_lu_gp(struct config_item *item)
2323#define SE_DEV_ALUA_LU_ATTR(_name, _mode) \ 2132{
2324static struct target_core_alua_lu_gp_attribute \ 2133 return container_of(to_config_group(item), struct t10_alua_lu_gp,
2325 target_core_alua_lu_gp_##_name = \ 2134 lu_gp_group);
2326 __CONFIGFS_EATTR(_name, _mode, \ 2135}
2327 target_core_alua_lu_gp_show_attr_##_name, \
2328 target_core_alua_lu_gp_store_attr_##_name);
2329
2330#define SE_DEV_ALUA_LU_ATTR_RO(_name) \
2331static struct target_core_alua_lu_gp_attribute \
2332 target_core_alua_lu_gp_##_name = \
2333 __CONFIGFS_EATTR_RO(_name, \
2334 target_core_alua_lu_gp_show_attr_##_name);
2335 2136
2336/* 2137static ssize_t target_lu_gp_lu_gp_id_show(struct config_item *item, char *page)
2337 * lu_gp_id
2338 */
2339static ssize_t target_core_alua_lu_gp_show_attr_lu_gp_id(
2340 struct t10_alua_lu_gp *lu_gp,
2341 char *page)
2342{ 2138{
2139 struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
2140
2343 if (!lu_gp->lu_gp_valid_id) 2141 if (!lu_gp->lu_gp_valid_id)
2344 return 0; 2142 return 0;
2345
2346 return sprintf(page, "%hu\n", lu_gp->lu_gp_id); 2143 return sprintf(page, "%hu\n", lu_gp->lu_gp_id);
2347} 2144}
2348 2145
2349static ssize_t target_core_alua_lu_gp_store_attr_lu_gp_id( 2146static ssize_t target_lu_gp_lu_gp_id_store(struct config_item *item,
2350 struct t10_alua_lu_gp *lu_gp, 2147 const char *page, size_t count)
2351 const char *page,
2352 size_t count)
2353{ 2148{
2149 struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
2354 struct config_group *alua_lu_gp_cg = &lu_gp->lu_gp_group; 2150 struct config_group *alua_lu_gp_cg = &lu_gp->lu_gp_group;
2355 unsigned long lu_gp_id; 2151 unsigned long lu_gp_id;
2356 int ret; 2152 int ret;
@@ -2379,15 +2175,9 @@ static ssize_t target_core_alua_lu_gp_store_attr_lu_gp_id(
2379 return count; 2175 return count;
2380} 2176}
2381 2177
2382SE_DEV_ALUA_LU_ATTR(lu_gp_id, S_IRUGO | S_IWUSR); 2178static ssize_t target_lu_gp_members_show(struct config_item *item, char *page)
2383
2384/*
2385 * members
2386 */
2387static ssize_t target_core_alua_lu_gp_show_attr_members(
2388 struct t10_alua_lu_gp *lu_gp,
2389 char *page)
2390{ 2179{
2180 struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
2391 struct se_device *dev; 2181 struct se_device *dev;
2392 struct se_hba *hba; 2182 struct se_hba *hba;
2393 struct t10_alua_lu_gp_member *lu_gp_mem; 2183 struct t10_alua_lu_gp_member *lu_gp_mem;
@@ -2419,13 +2209,12 @@ static ssize_t target_core_alua_lu_gp_show_attr_members(
2419 return len; 2209 return len;
2420} 2210}
2421 2211
2422SE_DEV_ALUA_LU_ATTR_RO(members); 2212CONFIGFS_ATTR(target_lu_gp_, lu_gp_id);
2423 2213CONFIGFS_ATTR_RO(target_lu_gp_, members);
2424CONFIGFS_EATTR_OPS(target_core_alua_lu_gp, t10_alua_lu_gp, lu_gp_group);
2425 2214
2426static struct configfs_attribute *target_core_alua_lu_gp_attrs[] = { 2215static struct configfs_attribute *target_core_alua_lu_gp_attrs[] = {
2427 &target_core_alua_lu_gp_lu_gp_id.attr, 2216 &target_lu_gp_attr_lu_gp_id,
2428 &target_core_alua_lu_gp_members.attr, 2217 &target_lu_gp_attr_members,
2429 NULL, 2218 NULL,
2430}; 2219};
2431 2220
@@ -2439,8 +2228,6 @@ static void target_core_alua_lu_gp_release(struct config_item *item)
2439 2228
2440static struct configfs_item_operations target_core_alua_lu_gp_ops = { 2229static struct configfs_item_operations target_core_alua_lu_gp_ops = {
2441 .release = target_core_alua_lu_gp_release, 2230 .release = target_core_alua_lu_gp_release,
2442 .show_attribute = target_core_alua_lu_gp_attr_show,
2443 .store_attribute = target_core_alua_lu_gp_attr_store,
2444}; 2231};
2445 2232
2446static struct config_item_type target_core_alua_lu_gp_cit = { 2233static struct config_item_type target_core_alua_lu_gp_cit = {
@@ -2511,36 +2298,23 @@ static struct config_item_type target_core_alua_lu_gps_cit = {
2511 2298
2512/* Start functions for struct config_item_type target_core_alua_tg_pt_gp_cit */ 2299/* Start functions for struct config_item_type target_core_alua_tg_pt_gp_cit */
2513 2300
2514CONFIGFS_EATTR_STRUCT(target_core_alua_tg_pt_gp, t10_alua_tg_pt_gp); 2301static inline struct t10_alua_tg_pt_gp *to_tg_pt_gp(struct config_item *item)
2515#define SE_DEV_ALUA_TG_PT_ATTR(_name, _mode) \ 2302{
2516static struct target_core_alua_tg_pt_gp_attribute \ 2303 return container_of(to_config_group(item), struct t10_alua_tg_pt_gp,
2517 target_core_alua_tg_pt_gp_##_name = \ 2304 tg_pt_gp_group);
2518 __CONFIGFS_EATTR(_name, _mode, \ 2305}
2519 target_core_alua_tg_pt_gp_show_attr_##_name, \
2520 target_core_alua_tg_pt_gp_store_attr_##_name);
2521
2522#define SE_DEV_ALUA_TG_PT_ATTR_RO(_name) \
2523static struct target_core_alua_tg_pt_gp_attribute \
2524 target_core_alua_tg_pt_gp_##_name = \
2525 __CONFIGFS_EATTR_RO(_name, \
2526 target_core_alua_tg_pt_gp_show_attr_##_name);
2527 2306
2528/* 2307static ssize_t target_tg_pt_gp_alua_access_state_show(struct config_item *item,
2529 * alua_access_state 2308 char *page)
2530 */
2531static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_access_state(
2532 struct t10_alua_tg_pt_gp *tg_pt_gp,
2533 char *page)
2534{ 2309{
2535 return sprintf(page, "%d\n", 2310 return sprintf(page, "%d\n",
2536 atomic_read(&tg_pt_gp->tg_pt_gp_alua_access_state)); 2311 atomic_read(&to_tg_pt_gp(item)->tg_pt_gp_alua_access_state));
2537} 2312}
2538 2313
2539static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_state( 2314static ssize_t target_tg_pt_gp_alua_access_state_store(struct config_item *item,
2540 struct t10_alua_tg_pt_gp *tg_pt_gp, 2315 const char *page, size_t count)
2541 const char *page,
2542 size_t count)
2543{ 2316{
2317 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2544 struct se_device *dev = tg_pt_gp->tg_pt_gp_dev; 2318 struct se_device *dev = tg_pt_gp->tg_pt_gp_dev;
2545 unsigned long tmp; 2319 unsigned long tmp;
2546 int new_state, ret; 2320 int new_state, ret;
@@ -2582,24 +2356,18 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_state(
2582 return (!ret) ? count : -EINVAL; 2356 return (!ret) ? count : -EINVAL;
2583} 2357}
2584 2358
2585SE_DEV_ALUA_TG_PT_ATTR(alua_access_state, S_IRUGO | S_IWUSR); 2359static ssize_t target_tg_pt_gp_alua_access_status_show(struct config_item *item,
2586 2360 char *page)
2587/*
2588 * alua_access_status
2589 */
2590static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_access_status(
2591 struct t10_alua_tg_pt_gp *tg_pt_gp,
2592 char *page)
2593{ 2361{
2362 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2594 return sprintf(page, "%s\n", 2363 return sprintf(page, "%s\n",
2595 core_alua_dump_status(tg_pt_gp->tg_pt_gp_alua_access_status)); 2364 core_alua_dump_status(tg_pt_gp->tg_pt_gp_alua_access_status));
2596} 2365}
2597 2366
2598static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_status( 2367static ssize_t target_tg_pt_gp_alua_access_status_store(
2599 struct t10_alua_tg_pt_gp *tg_pt_gp, 2368 struct config_item *item, const char *page, size_t count)
2600 const char *page,
2601 size_t count)
2602{ 2369{
2370 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2603 unsigned long tmp; 2371 unsigned long tmp;
2604 int new_status, ret; 2372 int new_status, ret;
2605 2373
@@ -2630,43 +2398,31 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_status(
2630 return count; 2398 return count;
2631} 2399}
2632 2400
2633SE_DEV_ALUA_TG_PT_ATTR(alua_access_status, S_IRUGO | S_IWUSR); 2401static ssize_t target_tg_pt_gp_alua_access_type_show(struct config_item *item,
2634 2402 char *page)
2635/*
2636 * alua_access_type
2637 */
2638static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_access_type(
2639 struct t10_alua_tg_pt_gp *tg_pt_gp,
2640 char *page)
2641{ 2403{
2642 return core_alua_show_access_type(tg_pt_gp, page); 2404 return core_alua_show_access_type(to_tg_pt_gp(item), page);
2643} 2405}
2644 2406
2645static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_type( 2407static ssize_t target_tg_pt_gp_alua_access_type_store(struct config_item *item,
2646 struct t10_alua_tg_pt_gp *tg_pt_gp, 2408 const char *page, size_t count)
2647 const char *page,
2648 size_t count)
2649{ 2409{
2650 return core_alua_store_access_type(tg_pt_gp, page, count); 2410 return core_alua_store_access_type(to_tg_pt_gp(item), page, count);
2651} 2411}
2652 2412
2653SE_DEV_ALUA_TG_PT_ATTR(alua_access_type, S_IRUGO | S_IWUSR); 2413#define ALUA_SUPPORTED_STATE_ATTR(_name, _bit) \
2654 2414static ssize_t target_tg_pt_gp_alua_support_##_name##_show( \
2655/* 2415 struct config_item *item, char *p) \
2656 * alua_supported_states
2657 */
2658
2659#define SE_DEV_ALUA_SUPPORT_STATE_SHOW(_name, _var, _bit) \
2660static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_support_##_name( \
2661 struct t10_alua_tg_pt_gp *t, char *p) \
2662{ \ 2416{ \
2663 return sprintf(p, "%d\n", !!(t->_var & _bit)); \ 2417 struct t10_alua_tg_pt_gp *t = to_tg_pt_gp(item); \
2664} 2418 return sprintf(p, "%d\n", \
2665 2419 !!(t->tg_pt_gp_alua_supported_states & _bit)); \
2666#define SE_DEV_ALUA_SUPPORT_STATE_STORE(_name, _var, _bit) \ 2420} \
2667static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_support_##_name(\ 2421 \
2668 struct t10_alua_tg_pt_gp *t, const char *p, size_t c) \ 2422static ssize_t target_tg_pt_gp_alua_support_##_name##_store( \
2423 struct config_item *item, const char *p, size_t c) \
2669{ \ 2424{ \
2425 struct t10_alua_tg_pt_gp *t = to_tg_pt_gp(item); \
2670 unsigned long tmp; \ 2426 unsigned long tmp; \
2671 int ret; \ 2427 int ret; \
2672 \ 2428 \
@@ -2687,70 +2443,32 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_support_##_name(\
2687 return -EINVAL; \ 2443 return -EINVAL; \
2688 } \ 2444 } \
2689 if (tmp) \ 2445 if (tmp) \
2690 t->_var |= _bit; \ 2446 t->tg_pt_gp_alua_supported_states |= _bit; \
2691 else \ 2447 else \
2692 t->_var &= ~_bit; \ 2448 t->tg_pt_gp_alua_supported_states &= ~_bit; \
2693 \ 2449 \
2694 return c; \ 2450 return c; \
2695} 2451}
2696 2452
2697SE_DEV_ALUA_SUPPORT_STATE_SHOW(transitioning, 2453ALUA_SUPPORTED_STATE_ATTR(transitioning, ALUA_T_SUP);
2698 tg_pt_gp_alua_supported_states, ALUA_T_SUP); 2454ALUA_SUPPORTED_STATE_ATTR(offline, ALUA_O_SUP);
2699SE_DEV_ALUA_SUPPORT_STATE_STORE(transitioning, 2455ALUA_SUPPORTED_STATE_ATTR(lba_dependent, ALUA_LBD_SUP);
2700 tg_pt_gp_alua_supported_states, ALUA_T_SUP); 2456ALUA_SUPPORTED_STATE_ATTR(unavailable, ALUA_U_SUP);
2701SE_DEV_ALUA_TG_PT_ATTR(alua_support_transitioning, S_IRUGO | S_IWUSR); 2457ALUA_SUPPORTED_STATE_ATTR(standby, ALUA_S_SUP);
2702 2458ALUA_SUPPORTED_STATE_ATTR(active_optimized, ALUA_AO_SUP);
2703SE_DEV_ALUA_SUPPORT_STATE_SHOW(offline, 2459ALUA_SUPPORTED_STATE_ATTR(active_nonoptimized, ALUA_AN_SUP);
2704 tg_pt_gp_alua_supported_states, ALUA_O_SUP);
2705SE_DEV_ALUA_SUPPORT_STATE_STORE(offline,
2706 tg_pt_gp_alua_supported_states, ALUA_O_SUP);
2707SE_DEV_ALUA_TG_PT_ATTR(alua_support_offline, S_IRUGO | S_IWUSR);
2708
2709SE_DEV_ALUA_SUPPORT_STATE_SHOW(lba_dependent,
2710 tg_pt_gp_alua_supported_states, ALUA_LBD_SUP);
2711SE_DEV_ALUA_SUPPORT_STATE_STORE(lba_dependent,
2712 tg_pt_gp_alua_supported_states, ALUA_LBD_SUP);
2713SE_DEV_ALUA_TG_PT_ATTR(alua_support_lba_dependent, S_IRUGO);
2714
2715SE_DEV_ALUA_SUPPORT_STATE_SHOW(unavailable,
2716 tg_pt_gp_alua_supported_states, ALUA_U_SUP);
2717SE_DEV_ALUA_SUPPORT_STATE_STORE(unavailable,
2718 tg_pt_gp_alua_supported_states, ALUA_U_SUP);
2719SE_DEV_ALUA_TG_PT_ATTR(alua_support_unavailable, S_IRUGO | S_IWUSR);
2720
2721SE_DEV_ALUA_SUPPORT_STATE_SHOW(standby,
2722 tg_pt_gp_alua_supported_states, ALUA_S_SUP);
2723SE_DEV_ALUA_SUPPORT_STATE_STORE(standby,
2724 tg_pt_gp_alua_supported_states, ALUA_S_SUP);
2725SE_DEV_ALUA_TG_PT_ATTR(alua_support_standby, S_IRUGO | S_IWUSR);
2726
2727SE_DEV_ALUA_SUPPORT_STATE_SHOW(active_optimized,
2728 tg_pt_gp_alua_supported_states, ALUA_AO_SUP);
2729SE_DEV_ALUA_SUPPORT_STATE_STORE(active_optimized,
2730 tg_pt_gp_alua_supported_states, ALUA_AO_SUP);
2731SE_DEV_ALUA_TG_PT_ATTR(alua_support_active_optimized, S_IRUGO | S_IWUSR);
2732
2733SE_DEV_ALUA_SUPPORT_STATE_SHOW(active_nonoptimized,
2734 tg_pt_gp_alua_supported_states, ALUA_AN_SUP);
2735SE_DEV_ALUA_SUPPORT_STATE_STORE(active_nonoptimized,
2736 tg_pt_gp_alua_supported_states, ALUA_AN_SUP);
2737SE_DEV_ALUA_TG_PT_ATTR(alua_support_active_nonoptimized, S_IRUGO | S_IWUSR);
2738 2460
2739/* 2461static ssize_t target_tg_pt_gp_alua_write_metadata_show(
2740 * alua_write_metadata 2462 struct config_item *item, char *page)
2741 */
2742static ssize_t target_core_alua_tg_pt_gp_show_attr_alua_write_metadata(
2743 struct t10_alua_tg_pt_gp *tg_pt_gp,
2744 char *page)
2745{ 2463{
2746 return sprintf(page, "%d\n", tg_pt_gp->tg_pt_gp_write_metadata); 2464 return sprintf(page, "%d\n",
2465 to_tg_pt_gp(item)->tg_pt_gp_write_metadata);
2747} 2466}
2748 2467
2749static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_write_metadata( 2468static ssize_t target_tg_pt_gp_alua_write_metadata_store(
2750 struct t10_alua_tg_pt_gp *tg_pt_gp, 2469 struct config_item *item, const char *page, size_t count)
2751 const char *page,
2752 size_t count)
2753{ 2470{
2471 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2754 unsigned long tmp; 2472 unsigned long tmp;
2755 int ret; 2473 int ret;
2756 2474
@@ -2770,110 +2488,71 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_write_metadata(
2770 return count; 2488 return count;
2771} 2489}
2772 2490
2773SE_DEV_ALUA_TG_PT_ATTR(alua_write_metadata, S_IRUGO | S_IWUSR); 2491static ssize_t target_tg_pt_gp_nonop_delay_msecs_show(struct config_item *item,
2774 2492 char *page)
2775
2776
2777/*
2778 * nonop_delay_msecs
2779 */
2780static ssize_t target_core_alua_tg_pt_gp_show_attr_nonop_delay_msecs(
2781 struct t10_alua_tg_pt_gp *tg_pt_gp,
2782 char *page)
2783{ 2493{
2784 return core_alua_show_nonop_delay_msecs(tg_pt_gp, page); 2494 return core_alua_show_nonop_delay_msecs(to_tg_pt_gp(item), page);
2785
2786} 2495}
2787 2496
2788static ssize_t target_core_alua_tg_pt_gp_store_attr_nonop_delay_msecs( 2497static ssize_t target_tg_pt_gp_nonop_delay_msecs_store(struct config_item *item,
2789 struct t10_alua_tg_pt_gp *tg_pt_gp, 2498 const char *page, size_t count)
2790 const char *page,
2791 size_t count)
2792{ 2499{
2793 return core_alua_store_nonop_delay_msecs(tg_pt_gp, page, count); 2500 return core_alua_store_nonop_delay_msecs(to_tg_pt_gp(item), page,
2501 count);
2794} 2502}
2795 2503
2796SE_DEV_ALUA_TG_PT_ATTR(nonop_delay_msecs, S_IRUGO | S_IWUSR); 2504static ssize_t target_tg_pt_gp_trans_delay_msecs_show(struct config_item *item,
2797 2505 char *page)
2798/*
2799 * trans_delay_msecs
2800 */
2801static ssize_t target_core_alua_tg_pt_gp_show_attr_trans_delay_msecs(
2802 struct t10_alua_tg_pt_gp *tg_pt_gp,
2803 char *page)
2804{ 2506{
2805 return core_alua_show_trans_delay_msecs(tg_pt_gp, page); 2507 return core_alua_show_trans_delay_msecs(to_tg_pt_gp(item), page);
2806} 2508}
2807 2509
2808static ssize_t target_core_alua_tg_pt_gp_store_attr_trans_delay_msecs( 2510static ssize_t target_tg_pt_gp_trans_delay_msecs_store(struct config_item *item,
2809 struct t10_alua_tg_pt_gp *tg_pt_gp, 2511 const char *page, size_t count)
2810 const char *page,
2811 size_t count)
2812{ 2512{
2813 return core_alua_store_trans_delay_msecs(tg_pt_gp, page, count); 2513 return core_alua_store_trans_delay_msecs(to_tg_pt_gp(item), page,
2514 count);
2814} 2515}
2815 2516
2816SE_DEV_ALUA_TG_PT_ATTR(trans_delay_msecs, S_IRUGO | S_IWUSR); 2517static ssize_t target_tg_pt_gp_implicit_trans_secs_show(
2817 2518 struct config_item *item, char *page)
2818/*
2819 * implicit_trans_secs
2820 */
2821static ssize_t target_core_alua_tg_pt_gp_show_attr_implicit_trans_secs(
2822 struct t10_alua_tg_pt_gp *tg_pt_gp,
2823 char *page)
2824{ 2519{
2825 return core_alua_show_implicit_trans_secs(tg_pt_gp, page); 2520 return core_alua_show_implicit_trans_secs(to_tg_pt_gp(item), page);
2826} 2521}
2827 2522
2828static ssize_t target_core_alua_tg_pt_gp_store_attr_implicit_trans_secs( 2523static ssize_t target_tg_pt_gp_implicit_trans_secs_store(
2829 struct t10_alua_tg_pt_gp *tg_pt_gp, 2524 struct config_item *item, const char *page, size_t count)
2830 const char *page,
2831 size_t count)
2832{ 2525{
2833 return core_alua_store_implicit_trans_secs(tg_pt_gp, page, count); 2526 return core_alua_store_implicit_trans_secs(to_tg_pt_gp(item), page,
2527 count);
2834} 2528}
2835 2529
2836SE_DEV_ALUA_TG_PT_ATTR(implicit_trans_secs, S_IRUGO | S_IWUSR); 2530static ssize_t target_tg_pt_gp_preferred_show(struct config_item *item,
2837 2531 char *page)
2838/*
2839 * preferred
2840 */
2841
2842static ssize_t target_core_alua_tg_pt_gp_show_attr_preferred(
2843 struct t10_alua_tg_pt_gp *tg_pt_gp,
2844 char *page)
2845{ 2532{
2846 return core_alua_show_preferred_bit(tg_pt_gp, page); 2533 return core_alua_show_preferred_bit(to_tg_pt_gp(item), page);
2847} 2534}
2848 2535
2849static ssize_t target_core_alua_tg_pt_gp_store_attr_preferred( 2536static ssize_t target_tg_pt_gp_preferred_store(struct config_item *item,
2850 struct t10_alua_tg_pt_gp *tg_pt_gp, 2537 const char *page, size_t count)
2851 const char *page,
2852 size_t count)
2853{ 2538{
2854 return core_alua_store_preferred_bit(tg_pt_gp, page, count); 2539 return core_alua_store_preferred_bit(to_tg_pt_gp(item), page, count);
2855} 2540}
2856 2541
2857SE_DEV_ALUA_TG_PT_ATTR(preferred, S_IRUGO | S_IWUSR); 2542static ssize_t target_tg_pt_gp_tg_pt_gp_id_show(struct config_item *item,
2858 2543 char *page)
2859/*
2860 * tg_pt_gp_id
2861 */
2862static ssize_t target_core_alua_tg_pt_gp_show_attr_tg_pt_gp_id(
2863 struct t10_alua_tg_pt_gp *tg_pt_gp,
2864 char *page)
2865{ 2544{
2545 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2546
2866 if (!tg_pt_gp->tg_pt_gp_valid_id) 2547 if (!tg_pt_gp->tg_pt_gp_valid_id)
2867 return 0; 2548 return 0;
2868
2869 return sprintf(page, "%hu\n", tg_pt_gp->tg_pt_gp_id); 2549 return sprintf(page, "%hu\n", tg_pt_gp->tg_pt_gp_id);
2870} 2550}
2871 2551
2872static ssize_t target_core_alua_tg_pt_gp_store_attr_tg_pt_gp_id( 2552static ssize_t target_tg_pt_gp_tg_pt_gp_id_store(struct config_item *item,
2873 struct t10_alua_tg_pt_gp *tg_pt_gp, 2553 const char *page, size_t count)
2874 const char *page,
2875 size_t count)
2876{ 2554{
2555 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2877 struct config_group *alua_tg_pt_gp_cg = &tg_pt_gp->tg_pt_gp_group; 2556 struct config_group *alua_tg_pt_gp_cg = &tg_pt_gp->tg_pt_gp_group;
2878 unsigned long tg_pt_gp_id; 2557 unsigned long tg_pt_gp_id;
2879 int ret; 2558 int ret;
@@ -2902,15 +2581,10 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_tg_pt_gp_id(
2902 return count; 2581 return count;
2903} 2582}
2904 2583
2905SE_DEV_ALUA_TG_PT_ATTR(tg_pt_gp_id, S_IRUGO | S_IWUSR); 2584static ssize_t target_tg_pt_gp_members_show(struct config_item *item,
2906 2585 char *page)
2907/*
2908 * members
2909 */
2910static ssize_t target_core_alua_tg_pt_gp_show_attr_members(
2911 struct t10_alua_tg_pt_gp *tg_pt_gp,
2912 char *page)
2913{ 2586{
2587 struct t10_alua_tg_pt_gp *tg_pt_gp = to_tg_pt_gp(item);
2914 struct se_lun *lun; 2588 struct se_lun *lun;
2915 ssize_t len = 0, cur_len; 2589 ssize_t len = 0, cur_len;
2916 unsigned char buf[TG_PT_GROUP_NAME_BUF]; 2590 unsigned char buf[TG_PT_GROUP_NAME_BUF];
@@ -2942,29 +2616,42 @@ static ssize_t target_core_alua_tg_pt_gp_show_attr_members(
2942 return len; 2616 return len;
2943} 2617}
2944 2618
2945SE_DEV_ALUA_TG_PT_ATTR_RO(members); 2619CONFIGFS_ATTR(target_tg_pt_gp_, alua_access_state);
2946 2620CONFIGFS_ATTR(target_tg_pt_gp_, alua_access_status);
2947CONFIGFS_EATTR_OPS(target_core_alua_tg_pt_gp, t10_alua_tg_pt_gp, 2621CONFIGFS_ATTR(target_tg_pt_gp_, alua_access_type);
2948 tg_pt_gp_group); 2622CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_transitioning);
2623CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_offline);
2624CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_lba_dependent);
2625CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_unavailable);
2626CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_standby);
2627CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_active_optimized);
2628CONFIGFS_ATTR(target_tg_pt_gp_, alua_support_active_nonoptimized);
2629CONFIGFS_ATTR(target_tg_pt_gp_, alua_write_metadata);
2630CONFIGFS_ATTR(target_tg_pt_gp_, nonop_delay_msecs);
2631CONFIGFS_ATTR(target_tg_pt_gp_, trans_delay_msecs);
2632CONFIGFS_ATTR(target_tg_pt_gp_, implicit_trans_secs);
2633CONFIGFS_ATTR(target_tg_pt_gp_, preferred);
2634CONFIGFS_ATTR(target_tg_pt_gp_, tg_pt_gp_id);
2635CONFIGFS_ATTR_RO(target_tg_pt_gp_, members);
2949 2636
2950static struct configfs_attribute *target_core_alua_tg_pt_gp_attrs[] = { 2637static struct configfs_attribute *target_core_alua_tg_pt_gp_attrs[] = {
2951 &target_core_alua_tg_pt_gp_alua_access_state.attr, 2638 &target_tg_pt_gp_attr_alua_access_state,
2952 &target_core_alua_tg_pt_gp_alua_access_status.attr, 2639 &target_tg_pt_gp_attr_alua_access_status,
2953 &target_core_alua_tg_pt_gp_alua_access_type.attr, 2640 &target_tg_pt_gp_attr_alua_access_type,
2954 &target_core_alua_tg_pt_gp_alua_support_transitioning.attr, 2641 &target_tg_pt_gp_attr_alua_support_transitioning,
2955 &target_core_alua_tg_pt_gp_alua_support_offline.attr, 2642 &target_tg_pt_gp_attr_alua_support_offline,
2956 &target_core_alua_tg_pt_gp_alua_support_lba_dependent.attr, 2643 &target_tg_pt_gp_attr_alua_support_lba_dependent,
2957 &target_core_alua_tg_pt_gp_alua_support_unavailable.attr, 2644 &target_tg_pt_gp_attr_alua_support_unavailable,
2958 &target_core_alua_tg_pt_gp_alua_support_standby.attr, 2645 &target_tg_pt_gp_attr_alua_support_standby,
2959 &target_core_alua_tg_pt_gp_alua_support_active_nonoptimized.attr, 2646 &target_tg_pt_gp_attr_alua_support_active_nonoptimized,
2960 &target_core_alua_tg_pt_gp_alua_support_active_optimized.attr, 2647 &target_tg_pt_gp_attr_alua_support_active_optimized,
2961 &target_core_alua_tg_pt_gp_alua_write_metadata.attr, 2648 &target_tg_pt_gp_attr_alua_write_metadata,
2962 &target_core_alua_tg_pt_gp_nonop_delay_msecs.attr, 2649 &target_tg_pt_gp_attr_nonop_delay_msecs,
2963 &target_core_alua_tg_pt_gp_trans_delay_msecs.attr, 2650 &target_tg_pt_gp_attr_trans_delay_msecs,
2964 &target_core_alua_tg_pt_gp_implicit_trans_secs.attr, 2651 &target_tg_pt_gp_attr_implicit_trans_secs,
2965 &target_core_alua_tg_pt_gp_preferred.attr, 2652 &target_tg_pt_gp_attr_preferred,
2966 &target_core_alua_tg_pt_gp_tg_pt_gp_id.attr, 2653 &target_tg_pt_gp_attr_tg_pt_gp_id,
2967 &target_core_alua_tg_pt_gp_members.attr, 2654 &target_tg_pt_gp_attr_members,
2968 NULL, 2655 NULL,
2969}; 2656};
2970 2657
@@ -2978,8 +2665,6 @@ static void target_core_alua_tg_pt_gp_release(struct config_item *item)
2978 2665
2979static struct configfs_item_operations target_core_alua_tg_pt_gp_ops = { 2666static struct configfs_item_operations target_core_alua_tg_pt_gp_ops = {
2980 .release = target_core_alua_tg_pt_gp_release, 2667 .release = target_core_alua_tg_pt_gp_release,
2981 .show_attribute = target_core_alua_tg_pt_gp_attr_show,
2982 .store_attribute = target_core_alua_tg_pt_gp_attr_store,
2983}; 2668};
2984 2669
2985static struct config_item_type target_core_alua_tg_pt_gp_cit = { 2670static struct config_item_type target_core_alua_tg_pt_gp_cit = {
@@ -3237,34 +2922,24 @@ static struct configfs_group_operations target_core_hba_group_ops = {
3237 .drop_item = target_core_drop_subdev, 2922 .drop_item = target_core_drop_subdev,
3238}; 2923};
3239 2924
3240CONFIGFS_EATTR_STRUCT(target_core_hba, se_hba);
3241#define SE_HBA_ATTR(_name, _mode) \
3242static struct target_core_hba_attribute \
3243 target_core_hba_##_name = \
3244 __CONFIGFS_EATTR(_name, _mode, \
3245 target_core_hba_show_attr_##_name, \
3246 target_core_hba_store_attr_##_name);
3247 2925
3248#define SE_HBA_ATTR_RO(_name) \ 2926static inline struct se_hba *to_hba(struct config_item *item)
3249static struct target_core_hba_attribute \ 2927{
3250 target_core_hba_##_name = \ 2928 return container_of(to_config_group(item), struct se_hba, hba_group);
3251 __CONFIGFS_EATTR_RO(_name, \ 2929}
3252 target_core_hba_show_attr_##_name);
3253 2930
3254static ssize_t target_core_hba_show_attr_hba_info( 2931static ssize_t target_hba_info_show(struct config_item *item, char *page)
3255 struct se_hba *hba,
3256 char *page)
3257{ 2932{
2933 struct se_hba *hba = to_hba(item);
2934
3258 return sprintf(page, "HBA Index: %d plugin: %s version: %s\n", 2935 return sprintf(page, "HBA Index: %d plugin: %s version: %s\n",
3259 hba->hba_id, hba->backend->ops->name, 2936 hba->hba_id, hba->backend->ops->name,
3260 TARGET_CORE_VERSION); 2937 TARGET_CORE_VERSION);
3261} 2938}
3262 2939
3263SE_HBA_ATTR_RO(hba_info); 2940static ssize_t target_hba_mode_show(struct config_item *item, char *page)
3264
3265static ssize_t target_core_hba_show_attr_hba_mode(struct se_hba *hba,
3266 char *page)
3267{ 2941{
2942 struct se_hba *hba = to_hba(item);
3268 int hba_mode = 0; 2943 int hba_mode = 0;
3269 2944
3270 if (hba->hba_flags & HBA_FLAGS_PSCSI_MODE) 2945 if (hba->hba_flags & HBA_FLAGS_PSCSI_MODE)
@@ -3273,9 +2948,10 @@ static ssize_t target_core_hba_show_attr_hba_mode(struct se_hba *hba,
3273 return sprintf(page, "%d\n", hba_mode); 2948 return sprintf(page, "%d\n", hba_mode);
3274} 2949}
3275 2950
3276static ssize_t target_core_hba_store_attr_hba_mode(struct se_hba *hba, 2951static ssize_t target_hba_mode_store(struct config_item *item,
3277 const char *page, size_t count) 2952 const char *page, size_t count)
3278{ 2953{
2954 struct se_hba *hba = to_hba(item);
3279 unsigned long mode_flag; 2955 unsigned long mode_flag;
3280 int ret; 2956 int ret;
3281 2957
@@ -3304,9 +2980,8 @@ static ssize_t target_core_hba_store_attr_hba_mode(struct se_hba *hba,
3304 return count; 2980 return count;
3305} 2981}
3306 2982
3307SE_HBA_ATTR(hba_mode, S_IRUGO | S_IWUSR); 2983CONFIGFS_ATTR_RO(target_, hba_info);
3308 2984CONFIGFS_ATTR(target_, hba_mode);
3309CONFIGFS_EATTR_OPS(target_core_hba, se_hba, hba_group);
3310 2985
3311static void target_core_hba_release(struct config_item *item) 2986static void target_core_hba_release(struct config_item *item)
3312{ 2987{
@@ -3316,15 +2991,13 @@ static void target_core_hba_release(struct config_item *item)
3316} 2991}
3317 2992
3318static struct configfs_attribute *target_core_hba_attrs[] = { 2993static struct configfs_attribute *target_core_hba_attrs[] = {
3319 &target_core_hba_hba_info.attr, 2994 &target_attr_hba_info,
3320 &target_core_hba_hba_mode.attr, 2995 &target_attr_hba_mode,
3321 NULL, 2996 NULL,
3322}; 2997};
3323 2998
3324static struct configfs_item_operations target_core_hba_item_ops = { 2999static struct configfs_item_operations target_core_hba_item_ops = {
3325 .release = target_core_hba_release, 3000 .release = target_core_hba_release,
3326 .show_attribute = target_core_hba_attr_show,
3327 .store_attribute = target_core_hba_attr_store,
3328}; 3001};
3329 3002
3330static struct config_item_type target_core_hba_cit = { 3003static struct config_item_type target_core_hba_cit = {
diff --git a/drivers/target/target_core_fabric_configfs.c b/drivers/target/target_core_fabric_configfs.c
index be42429468e2..f916d18ccb48 100644
--- a/drivers/target/target_core_fabric_configfs.c
+++ b/drivers/target/target_core_fabric_configfs.c
@@ -35,8 +35,6 @@
35 35
36#include <target/target_core_base.h> 36#include <target/target_core_base.h>
37#include <target/target_core_fabric.h> 37#include <target/target_core_fabric.h>
38#include <target/target_core_fabric_configfs.h>
39#include <target/configfs_macros.h>
40 38
41#include "target_core_internal.h" 39#include "target_core_internal.h"
42#include "target_core_alua.h" 40#include "target_core_alua.h"
@@ -152,17 +150,16 @@ static int target_fabric_mappedlun_unlink(
152 return core_dev_del_initiator_node_lun_acl(lun, lacl); 150 return core_dev_del_initiator_node_lun_acl(lun, lacl);
153} 151}
154 152
155CONFIGFS_EATTR_STRUCT(target_fabric_mappedlun, se_lun_acl); 153static struct se_lun_acl *item_to_lun_acl(struct config_item *item)
156#define TCM_MAPPEDLUN_ATTR(_name, _mode) \ 154{
157static struct target_fabric_mappedlun_attribute target_fabric_mappedlun_##_name = \ 155 return container_of(to_config_group(item), struct se_lun_acl,
158 __CONFIGFS_EATTR(_name, _mode, \ 156 se_lun_group);
159 target_fabric_mappedlun_show_##_name, \ 157}
160 target_fabric_mappedlun_store_##_name);
161 158
162static ssize_t target_fabric_mappedlun_show_write_protect( 159static ssize_t target_fabric_mappedlun_write_protect_show(
163 struct se_lun_acl *lacl, 160 struct config_item *item, char *page)
164 char *page)
165{ 161{
162 struct se_lun_acl *lacl = item_to_lun_acl(item);
166 struct se_node_acl *se_nacl = lacl->se_lun_nacl; 163 struct se_node_acl *se_nacl = lacl->se_lun_nacl;
167 struct se_dev_entry *deve; 164 struct se_dev_entry *deve;
168 ssize_t len = 0; 165 ssize_t len = 0;
@@ -178,11 +175,10 @@ static ssize_t target_fabric_mappedlun_show_write_protect(
178 return len; 175 return len;
179} 176}
180 177
181static ssize_t target_fabric_mappedlun_store_write_protect( 178static ssize_t target_fabric_mappedlun_write_protect_store(
182 struct se_lun_acl *lacl, 179 struct config_item *item, const char *page, size_t count)
183 const char *page,
184 size_t count)
185{ 180{
181 struct se_lun_acl *lacl = item_to_lun_acl(item);
186 struct se_node_acl *se_nacl = lacl->se_lun_nacl; 182 struct se_node_acl *se_nacl = lacl->se_lun_nacl;
187 struct se_portal_group *se_tpg = se_nacl->se_tpg; 183 struct se_portal_group *se_tpg = se_nacl->se_tpg;
188 unsigned long op; 184 unsigned long op;
@@ -209,9 +205,12 @@ static ssize_t target_fabric_mappedlun_store_write_protect(
209 205
210} 206}
211 207
212TCM_MAPPEDLUN_ATTR(write_protect, S_IRUGO | S_IWUSR); 208CONFIGFS_ATTR(target_fabric_mappedlun_, write_protect);
213 209
214CONFIGFS_EATTR_OPS(target_fabric_mappedlun, se_lun_acl, se_lun_group); 210static struct configfs_attribute *target_fabric_mappedlun_attrs[] = {
211 &target_fabric_mappedlun_attr_write_protect,
212 NULL,
213};
215 214
216static void target_fabric_mappedlun_release(struct config_item *item) 215static void target_fabric_mappedlun_release(struct config_item *item)
217{ 216{
@@ -222,15 +221,8 @@ static void target_fabric_mappedlun_release(struct config_item *item)
222 core_dev_free_initiator_node_lun_acl(se_tpg, lacl); 221 core_dev_free_initiator_node_lun_acl(se_tpg, lacl);
223} 222}
224 223
225static struct configfs_attribute *target_fabric_mappedlun_attrs[] = {
226 &target_fabric_mappedlun_write_protect.attr,
227 NULL,
228};
229
230static struct configfs_item_operations target_fabric_mappedlun_item_ops = { 224static struct configfs_item_operations target_fabric_mappedlun_item_ops = {
231 .release = target_fabric_mappedlun_release, 225 .release = target_fabric_mappedlun_release,
232 .show_attribute = target_fabric_mappedlun_attr_show,
233 .store_attribute = target_fabric_mappedlun_attr_store,
234 .allow_link = target_fabric_mappedlun_link, 226 .allow_link = target_fabric_mappedlun_link,
235 .drop_link = target_fabric_mappedlun_unlink, 227 .drop_link = target_fabric_mappedlun_unlink,
236}; 228};
@@ -266,49 +258,12 @@ TF_CIT_SETUP(tpg_mappedlun_stat, NULL, &target_fabric_mappedlun_stat_group_ops,
266 258
267/* End of tfc_tpg_mappedlun_port_cit */ 259/* End of tfc_tpg_mappedlun_port_cit */
268 260
269/* Start of tfc_tpg_nacl_attrib_cit */ 261TF_CIT_SETUP_DRV(tpg_nacl_attrib, NULL, NULL);
270 262TF_CIT_SETUP_DRV(tpg_nacl_auth, NULL, NULL);
271CONFIGFS_EATTR_OPS(target_fabric_nacl_attrib, se_node_acl, acl_attrib_group); 263TF_CIT_SETUP_DRV(tpg_nacl_param, NULL, NULL);
272
273static struct configfs_item_operations target_fabric_nacl_attrib_item_ops = {
274 .show_attribute = target_fabric_nacl_attrib_attr_show,
275 .store_attribute = target_fabric_nacl_attrib_attr_store,
276};
277
278TF_CIT_SETUP_DRV(tpg_nacl_attrib, &target_fabric_nacl_attrib_item_ops, NULL);
279
280/* End of tfc_tpg_nacl_attrib_cit */
281
282/* Start of tfc_tpg_nacl_auth_cit */
283
284CONFIGFS_EATTR_OPS(target_fabric_nacl_auth, se_node_acl, acl_auth_group);
285
286static struct configfs_item_operations target_fabric_nacl_auth_item_ops = {
287 .show_attribute = target_fabric_nacl_auth_attr_show,
288 .store_attribute = target_fabric_nacl_auth_attr_store,
289};
290
291TF_CIT_SETUP_DRV(tpg_nacl_auth, &target_fabric_nacl_auth_item_ops, NULL);
292
293/* End of tfc_tpg_nacl_auth_cit */
294
295/* Start of tfc_tpg_nacl_param_cit */
296
297CONFIGFS_EATTR_OPS(target_fabric_nacl_param, se_node_acl, acl_param_group);
298
299static struct configfs_item_operations target_fabric_nacl_param_item_ops = {
300 .show_attribute = target_fabric_nacl_param_attr_show,
301 .store_attribute = target_fabric_nacl_param_attr_store,
302};
303
304TF_CIT_SETUP_DRV(tpg_nacl_param, &target_fabric_nacl_param_item_ops, NULL);
305
306/* End of tfc_tpg_nacl_param_cit */
307 264
308/* Start of tfc_tpg_nacl_base_cit */ 265/* Start of tfc_tpg_nacl_base_cit */
309 266
310CONFIGFS_EATTR_OPS(target_fabric_nacl_base, se_node_acl, acl_group);
311
312static struct config_group *target_fabric_make_mappedlun( 267static struct config_group *target_fabric_make_mappedlun(
313 struct config_group *group, 268 struct config_group *group,
314 const char *name) 269 const char *name)
@@ -438,8 +393,6 @@ static void target_fabric_nacl_base_release(struct config_item *item)
438 393
439static struct configfs_item_operations target_fabric_nacl_base_item_ops = { 394static struct configfs_item_operations target_fabric_nacl_base_item_ops = {
440 .release = target_fabric_nacl_base_release, 395 .release = target_fabric_nacl_base_release,
441 .show_attribute = target_fabric_nacl_base_attr_show,
442 .store_attribute = target_fabric_nacl_base_attr_store,
443}; 396};
444 397
445static struct configfs_group_operations target_fabric_nacl_base_group_ops = { 398static struct configfs_group_operations target_fabric_nacl_base_group_ops = {
@@ -540,8 +493,6 @@ TF_CIT_SETUP(tpg_nacl, NULL, &target_fabric_nacl_group_ops, NULL);
540 493
541/* Start of tfc_tpg_np_base_cit */ 494/* Start of tfc_tpg_np_base_cit */
542 495
543CONFIGFS_EATTR_OPS(target_fabric_np_base, se_tpg_np, tpg_np_group);
544
545static void target_fabric_np_base_release(struct config_item *item) 496static void target_fabric_np_base_release(struct config_item *item)
546{ 497{
547 struct se_tpg_np *se_tpg_np = container_of(to_config_group(item), 498 struct se_tpg_np *se_tpg_np = container_of(to_config_group(item),
@@ -554,8 +505,6 @@ static void target_fabric_np_base_release(struct config_item *item)
554 505
555static struct configfs_item_operations target_fabric_np_base_item_ops = { 506static struct configfs_item_operations target_fabric_np_base_item_ops = {
556 .release = target_fabric_np_base_release, 507 .release = target_fabric_np_base_release,
557 .show_attribute = target_fabric_np_base_attr_show,
558 .store_attribute = target_fabric_np_base_attr_store,
559}; 508};
560 509
561TF_CIT_SETUP_DRV(tpg_np_base, &target_fabric_np_base_item_ops, NULL); 510TF_CIT_SETUP_DRV(tpg_np_base, &target_fabric_np_base_item_ops, NULL);
@@ -610,132 +559,113 @@ TF_CIT_SETUP(tpg_np, NULL, &target_fabric_np_group_ops, NULL);
610 559
611/* Start of tfc_tpg_port_cit */ 560/* Start of tfc_tpg_port_cit */
612 561
613CONFIGFS_EATTR_STRUCT(target_fabric_port, se_lun); 562static struct se_lun *item_to_lun(struct config_item *item)
614#define TCM_PORT_ATTR(_name, _mode) \ 563{
615static struct target_fabric_port_attribute target_fabric_port_##_name = \ 564 return container_of(to_config_group(item), struct se_lun,
616 __CONFIGFS_EATTR(_name, _mode, \ 565 lun_group);
617 target_fabric_port_show_attr_##_name, \ 566}
618 target_fabric_port_store_attr_##_name);
619
620#define TCM_PORT_ATTOR_RO(_name) \
621 __CONFIGFS_EATTR_RO(_name, \
622 target_fabric_port_show_attr_##_name);
623 567
624/* 568static ssize_t target_fabric_port_alua_tg_pt_gp_show(struct config_item *item,
625 * alua_tg_pt_gp 569 char *page)
626 */
627static ssize_t target_fabric_port_show_attr_alua_tg_pt_gp(
628 struct se_lun *lun,
629 char *page)
630{ 570{
571 struct se_lun *lun = item_to_lun(item);
572
631 if (!lun || !lun->lun_se_dev) 573 if (!lun || !lun->lun_se_dev)
632 return -ENODEV; 574 return -ENODEV;
633 575
634 return core_alua_show_tg_pt_gp_info(lun, page); 576 return core_alua_show_tg_pt_gp_info(lun, page);
635} 577}
636 578
637static ssize_t target_fabric_port_store_attr_alua_tg_pt_gp( 579static ssize_t target_fabric_port_alua_tg_pt_gp_store(struct config_item *item,
638 struct se_lun *lun, 580 const char *page, size_t count)
639 const char *page,
640 size_t count)
641{ 581{
582 struct se_lun *lun = item_to_lun(item);
583
642 if (!lun || !lun->lun_se_dev) 584 if (!lun || !lun->lun_se_dev)
643 return -ENODEV; 585 return -ENODEV;
644 586
645 return core_alua_store_tg_pt_gp_info(lun, page, count); 587 return core_alua_store_tg_pt_gp_info(lun, page, count);
646} 588}
647 589
648TCM_PORT_ATTR(alua_tg_pt_gp, S_IRUGO | S_IWUSR); 590static ssize_t target_fabric_port_alua_tg_pt_offline_show(
649 591 struct config_item *item, char *page)
650/*
651 * alua_tg_pt_offline
652 */
653static ssize_t target_fabric_port_show_attr_alua_tg_pt_offline(
654 struct se_lun *lun,
655 char *page)
656{ 592{
593 struct se_lun *lun = item_to_lun(item);
594
657 if (!lun || !lun->lun_se_dev) 595 if (!lun || !lun->lun_se_dev)
658 return -ENODEV; 596 return -ENODEV;
659 597
660 return core_alua_show_offline_bit(lun, page); 598 return core_alua_show_offline_bit(lun, page);
661} 599}
662 600
663static ssize_t target_fabric_port_store_attr_alua_tg_pt_offline( 601static ssize_t target_fabric_port_alua_tg_pt_offline_store(
664 struct se_lun *lun, 602 struct config_item *item, const char *page, size_t count)
665 const char *page,
666 size_t count)
667{ 603{
604 struct se_lun *lun = item_to_lun(item);
605
668 if (!lun || !lun->lun_se_dev) 606 if (!lun || !lun->lun_se_dev)
669 return -ENODEV; 607 return -ENODEV;
670 608
671 return core_alua_store_offline_bit(lun, page, count); 609 return core_alua_store_offline_bit(lun, page, count);
672} 610}
673 611
674TCM_PORT_ATTR(alua_tg_pt_offline, S_IRUGO | S_IWUSR); 612static ssize_t target_fabric_port_alua_tg_pt_status_show(
675 613 struct config_item *item, char *page)
676/*
677 * alua_tg_pt_status
678 */
679static ssize_t target_fabric_port_show_attr_alua_tg_pt_status(
680 struct se_lun *lun,
681 char *page)
682{ 614{
615 struct se_lun *lun = item_to_lun(item);
616
683 if (!lun || !lun->lun_se_dev) 617 if (!lun || !lun->lun_se_dev)
684 return -ENODEV; 618 return -ENODEV;
685 619
686 return core_alua_show_secondary_status(lun, page); 620 return core_alua_show_secondary_status(lun, page);
687} 621}
688 622
689static ssize_t target_fabric_port_store_attr_alua_tg_pt_status( 623static ssize_t target_fabric_port_alua_tg_pt_status_store(
690 struct se_lun *lun, 624 struct config_item *item, const char *page, size_t count)
691 const char *page,
692 size_t count)
693{ 625{
626 struct se_lun *lun = item_to_lun(item);
627
694 if (!lun || !lun->lun_se_dev) 628 if (!lun || !lun->lun_se_dev)
695 return -ENODEV; 629 return -ENODEV;
696 630
697 return core_alua_store_secondary_status(lun, page, count); 631 return core_alua_store_secondary_status(lun, page, count);
698} 632}
699 633
700TCM_PORT_ATTR(alua_tg_pt_status, S_IRUGO | S_IWUSR); 634static ssize_t target_fabric_port_alua_tg_pt_write_md_show(
701 635 struct config_item *item, char *page)
702/*
703 * alua_tg_pt_write_md
704 */
705static ssize_t target_fabric_port_show_attr_alua_tg_pt_write_md(
706 struct se_lun *lun,
707 char *page)
708{ 636{
637 struct se_lun *lun = item_to_lun(item);
638
709 if (!lun || !lun->lun_se_dev) 639 if (!lun || !lun->lun_se_dev)
710 return -ENODEV; 640 return -ENODEV;
711 641
712 return core_alua_show_secondary_write_metadata(lun, page); 642 return core_alua_show_secondary_write_metadata(lun, page);
713} 643}
714 644
715static ssize_t target_fabric_port_store_attr_alua_tg_pt_write_md( 645static ssize_t target_fabric_port_alua_tg_pt_write_md_store(
716 struct se_lun *lun, 646 struct config_item *item, const char *page, size_t count)
717 const char *page,
718 size_t count)
719{ 647{
648 struct se_lun *lun = item_to_lun(item);
649
720 if (!lun || !lun->lun_se_dev) 650 if (!lun || !lun->lun_se_dev)
721 return -ENODEV; 651 return -ENODEV;
722 652
723 return core_alua_store_secondary_write_metadata(lun, page, count); 653 return core_alua_store_secondary_write_metadata(lun, page, count);
724} 654}
725 655
726TCM_PORT_ATTR(alua_tg_pt_write_md, S_IRUGO | S_IWUSR); 656CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_gp);
727 657CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_offline);
658CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_status);
659CONFIGFS_ATTR(target_fabric_port_, alua_tg_pt_write_md);
728 660
729static struct configfs_attribute *target_fabric_port_attrs[] = { 661static struct configfs_attribute *target_fabric_port_attrs[] = {
730 &target_fabric_port_alua_tg_pt_gp.attr, 662 &target_fabric_port_attr_alua_tg_pt_gp,
731 &target_fabric_port_alua_tg_pt_offline.attr, 663 &target_fabric_port_attr_alua_tg_pt_offline,
732 &target_fabric_port_alua_tg_pt_status.attr, 664 &target_fabric_port_attr_alua_tg_pt_status,
733 &target_fabric_port_alua_tg_pt_write_md.attr, 665 &target_fabric_port_attr_alua_tg_pt_write_md,
734 NULL, 666 NULL,
735}; 667};
736 668
737CONFIGFS_EATTR_OPS(target_fabric_port, se_lun, lun_group);
738
739static int target_fabric_port_link( 669static int target_fabric_port_link(
740 struct config_item *lun_ci, 670 struct config_item *lun_ci,
741 struct config_item *se_dev_ci) 671 struct config_item *se_dev_ci)
@@ -821,8 +751,6 @@ static void target_fabric_port_release(struct config_item *item)
821} 751}
822 752
823static struct configfs_item_operations target_fabric_port_item_ops = { 753static struct configfs_item_operations target_fabric_port_item_ops = {
824 .show_attribute = target_fabric_port_attr_show,
825 .store_attribute = target_fabric_port_attr_store,
826 .release = target_fabric_port_release, 754 .release = target_fabric_port_release,
827 .allow_link = target_fabric_port_link, 755 .allow_link = target_fabric_port_link,
828 .drop_link = target_fabric_port_unlink, 756 .drop_link = target_fabric_port_unlink,
@@ -952,50 +880,11 @@ TF_CIT_SETUP(tpg_lun, NULL, &target_fabric_lun_group_ops, NULL);
952 880
953/* End of tfc_tpg_lun_cit */ 881/* End of tfc_tpg_lun_cit */
954 882
955/* Start of tfc_tpg_attrib_cit */ 883TF_CIT_SETUP_DRV(tpg_attrib, NULL, NULL);
956 884TF_CIT_SETUP_DRV(tpg_auth, NULL, NULL);
957CONFIGFS_EATTR_OPS(target_fabric_tpg_attrib, se_portal_group, tpg_attrib_group); 885TF_CIT_SETUP_DRV(tpg_param, NULL, NULL);
958
959static struct configfs_item_operations target_fabric_tpg_attrib_item_ops = {
960 .show_attribute = target_fabric_tpg_attrib_attr_show,
961 .store_attribute = target_fabric_tpg_attrib_attr_store,
962};
963
964TF_CIT_SETUP_DRV(tpg_attrib, &target_fabric_tpg_attrib_item_ops, NULL);
965
966/* End of tfc_tpg_attrib_cit */
967
968/* Start of tfc_tpg_auth_cit */
969
970CONFIGFS_EATTR_OPS(target_fabric_tpg_auth, se_portal_group, tpg_auth_group);
971
972static struct configfs_item_operations target_fabric_tpg_auth_item_ops = {
973 .show_attribute = target_fabric_tpg_auth_attr_show,
974 .store_attribute = target_fabric_tpg_auth_attr_store,
975};
976
977TF_CIT_SETUP_DRV(tpg_auth, &target_fabric_tpg_auth_item_ops, NULL);
978
979/* End of tfc_tpg_attrib_cit */
980
981/* Start of tfc_tpg_param_cit */
982
983CONFIGFS_EATTR_OPS(target_fabric_tpg_param, se_portal_group, tpg_param_group);
984
985static struct configfs_item_operations target_fabric_tpg_param_item_ops = {
986 .show_attribute = target_fabric_tpg_param_attr_show,
987 .store_attribute = target_fabric_tpg_param_attr_store,
988};
989
990TF_CIT_SETUP_DRV(tpg_param, &target_fabric_tpg_param_item_ops, NULL);
991
992/* End of tfc_tpg_param_cit */
993 886
994/* Start of tfc_tpg_base_cit */ 887/* Start of tfc_tpg_base_cit */
995/*
996 * For use with TF_TPG_ATTR() and TF_TPG_ATTR_RO()
997 */
998CONFIGFS_EATTR_OPS(target_fabric_tpg, se_portal_group, tpg_group);
999 888
1000static void target_fabric_tpg_release(struct config_item *item) 889static void target_fabric_tpg_release(struct config_item *item)
1001{ 890{
@@ -1009,8 +898,6 @@ static void target_fabric_tpg_release(struct config_item *item)
1009 898
1010static struct configfs_item_operations target_fabric_tpg_base_item_ops = { 899static struct configfs_item_operations target_fabric_tpg_base_item_ops = {
1011 .release = target_fabric_tpg_release, 900 .release = target_fabric_tpg_release,
1012 .show_attribute = target_fabric_tpg_attr_show,
1013 .store_attribute = target_fabric_tpg_attr_store,
1014}; 901};
1015 902
1016TF_CIT_SETUP_DRV(tpg_base, &target_fabric_tpg_base_item_ops, NULL); 903TF_CIT_SETUP_DRV(tpg_base, &target_fabric_tpg_base_item_ops, NULL);
@@ -1176,33 +1063,9 @@ static struct configfs_group_operations target_fabric_wwn_group_ops = {
1176 .make_group = target_fabric_make_wwn, 1063 .make_group = target_fabric_make_wwn,
1177 .drop_item = target_fabric_drop_wwn, 1064 .drop_item = target_fabric_drop_wwn,
1178}; 1065};
1179/*
1180 * For use with TF_WWN_ATTR() and TF_WWN_ATTR_RO()
1181 */
1182CONFIGFS_EATTR_OPS(target_fabric_wwn, target_fabric_configfs, tf_group);
1183
1184static struct configfs_item_operations target_fabric_wwn_item_ops = {
1185 .show_attribute = target_fabric_wwn_attr_show,
1186 .store_attribute = target_fabric_wwn_attr_store,
1187};
1188
1189TF_CIT_SETUP_DRV(wwn, &target_fabric_wwn_item_ops, &target_fabric_wwn_group_ops);
1190
1191/* End of tfc_wwn_cit */
1192
1193/* Start of tfc_discovery_cit */
1194
1195CONFIGFS_EATTR_OPS(target_fabric_discovery, target_fabric_configfs,
1196 tf_disc_group);
1197
1198static struct configfs_item_operations target_fabric_discovery_item_ops = {
1199 .show_attribute = target_fabric_discovery_attr_show,
1200 .store_attribute = target_fabric_discovery_attr_store,
1201};
1202
1203TF_CIT_SETUP_DRV(discovery, &target_fabric_discovery_item_ops, NULL);
1204 1066
1205/* End of tfc_discovery_cit */ 1067TF_CIT_SETUP_DRV(wwn, NULL, &target_fabric_wwn_group_ops);
1068TF_CIT_SETUP_DRV(discovery, NULL, NULL);
1206 1069
1207int target_fabric_setup_cits(struct target_fabric_configfs *tf) 1070int target_fabric_setup_cits(struct target_fabric_configfs *tf)
1208{ 1071{
diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h
index 99c24acfe676..dae0750c2032 100644
--- a/drivers/target/target_core_internal.h
+++ b/drivers/target/target_core_internal.h
@@ -87,6 +87,9 @@ void target_free_device(struct se_device *);
87/* target_core_configfs.c */ 87/* target_core_configfs.c */
88void target_setup_backend_cits(struct target_backend *); 88void target_setup_backend_cits(struct target_backend *);
89 89
90/* target_core_fabric_configfs.c */
91int target_fabric_setup_cits(struct target_fabric_configfs *);
92
90/* target_core_fabric_lib.c */ 93/* target_core_fabric_lib.c */
91int target_get_pr_transport_id_len(struct se_node_acl *nacl, 94int target_get_pr_transport_id_len(struct se_node_acl *nacl,
92 struct t10_pr_registration *pr_reg, int *format_code); 95 struct t10_pr_registration *pr_reg, int *format_code);
diff --git a/drivers/target/target_core_stat.c b/drivers/target/target_core_stat.c
index 20ed5d2e151a..273c72b2b83d 100644
--- a/drivers/target/target_core_stat.c
+++ b/drivers/target/target_core_stat.c
@@ -37,7 +37,6 @@
37#include <target/target_core_base.h> 37#include <target/target_core_base.h>
38#include <target/target_core_backend.h> 38#include <target/target_core_backend.h>
39#include <target/target_core_fabric.h> 39#include <target/target_core_fabric.h>
40#include <target/configfs_macros.h>
41 40
42#include "target_core_internal.h" 41#include "target_core_internal.h"
43 42
@@ -55,75 +54,49 @@
55 * SCSI Device Table 54 * SCSI Device Table
56 */ 55 */
57 56
58CONFIGFS_EATTR_STRUCT(target_stat_scsi_dev, se_dev_stat_grps); 57static struct se_device *to_stat_dev(struct config_item *item)
59#define DEV_STAT_SCSI_DEV_ATTR(_name, _mode) \ 58{
60static struct target_stat_scsi_dev_attribute \ 59 struct se_dev_stat_grps *sgrps = container_of(to_config_group(item),
61 target_stat_scsi_dev_##_name = \ 60 struct se_dev_stat_grps, scsi_dev_group);
62 __CONFIGFS_EATTR(_name, _mode, \ 61 return container_of(sgrps, struct se_device, dev_stat_grps);
63 target_stat_scsi_dev_show_attr_##_name, \ 62}
64 target_stat_scsi_dev_store_attr_##_name);
65
66#define DEV_STAT_SCSI_DEV_ATTR_RO(_name) \
67static struct target_stat_scsi_dev_attribute \
68 target_stat_scsi_dev_##_name = \
69 __CONFIGFS_EATTR_RO(_name, \
70 target_stat_scsi_dev_show_attr_##_name);
71 63
72static ssize_t target_stat_scsi_dev_show_attr_inst( 64static ssize_t target_stat_inst_show(struct config_item *item, char *page)
73 struct se_dev_stat_grps *sgrps, char *page)
74{ 65{
75 struct se_device *dev = 66 struct se_hba *hba = to_stat_dev(item)->se_hba;
76 container_of(sgrps, struct se_device, dev_stat_grps);
77 struct se_hba *hba = dev->se_hba;
78 67
79 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index); 68 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index);
80} 69}
81DEV_STAT_SCSI_DEV_ATTR_RO(inst);
82 70
83static ssize_t target_stat_scsi_dev_show_attr_indx( 71static ssize_t target_stat_indx_show(struct config_item *item, char *page)
84 struct se_dev_stat_grps *sgrps, char *page)
85{ 72{
86 struct se_device *dev = 73 return snprintf(page, PAGE_SIZE, "%u\n", to_stat_dev(item)->dev_index);
87 container_of(sgrps, struct se_device, dev_stat_grps);
88
89 return snprintf(page, PAGE_SIZE, "%u\n", dev->dev_index);
90} 74}
91DEV_STAT_SCSI_DEV_ATTR_RO(indx);
92 75
93static ssize_t target_stat_scsi_dev_show_attr_role( 76static ssize_t target_stat_role_show(struct config_item *item, char *page)
94 struct se_dev_stat_grps *sgrps, char *page)
95{ 77{
96 return snprintf(page, PAGE_SIZE, "Target\n"); 78 return snprintf(page, PAGE_SIZE, "Target\n");
97} 79}
98DEV_STAT_SCSI_DEV_ATTR_RO(role);
99 80
100static ssize_t target_stat_scsi_dev_show_attr_ports( 81static ssize_t target_stat_ports_show(struct config_item *item, char *page)
101 struct se_dev_stat_grps *sgrps, char *page)
102{ 82{
103 struct se_device *dev = 83 return snprintf(page, PAGE_SIZE, "%u\n", to_stat_dev(item)->export_count);
104 container_of(sgrps, struct se_device, dev_stat_grps);
105
106 return snprintf(page, PAGE_SIZE, "%u\n", dev->export_count);
107} 84}
108DEV_STAT_SCSI_DEV_ATTR_RO(ports);
109 85
110CONFIGFS_EATTR_OPS(target_stat_scsi_dev, se_dev_stat_grps, scsi_dev_group); 86CONFIGFS_ATTR_RO(target_stat_, inst);
87CONFIGFS_ATTR_RO(target_stat_, indx);
88CONFIGFS_ATTR_RO(target_stat_, role);
89CONFIGFS_ATTR_RO(target_stat_, ports);
111 90
112static struct configfs_attribute *target_stat_scsi_dev_attrs[] = { 91static struct configfs_attribute *target_stat_scsi_dev_attrs[] = {
113 &target_stat_scsi_dev_inst.attr, 92 &target_stat_attr_inst,
114 &target_stat_scsi_dev_indx.attr, 93 &target_stat_attr_indx,
115 &target_stat_scsi_dev_role.attr, 94 &target_stat_attr_role,
116 &target_stat_scsi_dev_ports.attr, 95 &target_stat_attr_ports,
117 NULL, 96 NULL,
118}; 97};
119 98
120static struct configfs_item_operations target_stat_scsi_dev_attrib_ops = {
121 .show_attribute = target_stat_scsi_dev_attr_show,
122 .store_attribute = target_stat_scsi_dev_attr_store,
123};
124
125static struct config_item_type target_stat_scsi_dev_cit = { 99static struct config_item_type target_stat_scsi_dev_cit = {
126 .ct_item_ops = &target_stat_scsi_dev_attrib_ops,
127 .ct_attrs = target_stat_scsi_dev_attrs, 100 .ct_attrs = target_stat_scsi_dev_attrs,
128 .ct_owner = THIS_MODULE, 101 .ct_owner = THIS_MODULE,
129}; 102};
@@ -131,109 +104,78 @@ static struct config_item_type target_stat_scsi_dev_cit = {
131/* 104/*
132 * SCSI Target Device Table 105 * SCSI Target Device Table
133 */ 106 */
107static struct se_device *to_stat_tgt_dev(struct config_item *item)
108{
109 struct se_dev_stat_grps *sgrps = container_of(to_config_group(item),
110 struct se_dev_stat_grps, scsi_tgt_dev_group);
111 return container_of(sgrps, struct se_device, dev_stat_grps);
112}
134 113
135CONFIGFS_EATTR_STRUCT(target_stat_scsi_tgt_dev, se_dev_stat_grps); 114static ssize_t target_stat_tgt_inst_show(struct config_item *item, char *page)
136#define DEV_STAT_SCSI_TGT_DEV_ATTR(_name, _mode) \
137static struct target_stat_scsi_tgt_dev_attribute \
138 target_stat_scsi_tgt_dev_##_name = \
139 __CONFIGFS_EATTR(_name, _mode, \
140 target_stat_scsi_tgt_dev_show_attr_##_name, \
141 target_stat_scsi_tgt_dev_store_attr_##_name);
142
143#define DEV_STAT_SCSI_TGT_DEV_ATTR_RO(_name) \
144static struct target_stat_scsi_tgt_dev_attribute \
145 target_stat_scsi_tgt_dev_##_name = \
146 __CONFIGFS_EATTR_RO(_name, \
147 target_stat_scsi_tgt_dev_show_attr_##_name);
148
149static ssize_t target_stat_scsi_tgt_dev_show_attr_inst(
150 struct se_dev_stat_grps *sgrps, char *page)
151{ 115{
152 struct se_device *dev = 116 struct se_hba *hba = to_stat_tgt_dev(item)->se_hba;
153 container_of(sgrps, struct se_device, dev_stat_grps);
154 struct se_hba *hba = dev->se_hba;
155 117
156 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index); 118 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index);
157} 119}
158DEV_STAT_SCSI_TGT_DEV_ATTR_RO(inst);
159 120
160static ssize_t target_stat_scsi_tgt_dev_show_attr_indx( 121static ssize_t target_stat_tgt_indx_show(struct config_item *item, char *page)
161 struct se_dev_stat_grps *sgrps, char *page)
162{ 122{
163 struct se_device *dev = 123 return snprintf(page, PAGE_SIZE, "%u\n", to_stat_tgt_dev(item)->dev_index);
164 container_of(sgrps, struct se_device, dev_stat_grps);
165
166 return snprintf(page, PAGE_SIZE, "%u\n", dev->dev_index);
167} 124}
168DEV_STAT_SCSI_TGT_DEV_ATTR_RO(indx);
169 125
170static ssize_t target_stat_scsi_tgt_dev_show_attr_num_lus( 126static ssize_t target_stat_tgt_num_lus_show(struct config_item *item,
171 struct se_dev_stat_grps *sgrps, char *page) 127 char *page)
172{ 128{
173 return snprintf(page, PAGE_SIZE, "%u\n", LU_COUNT); 129 return snprintf(page, PAGE_SIZE, "%u\n", LU_COUNT);
174} 130}
175DEV_STAT_SCSI_TGT_DEV_ATTR_RO(num_lus);
176 131
177static ssize_t target_stat_scsi_tgt_dev_show_attr_status( 132static ssize_t target_stat_tgt_status_show(struct config_item *item,
178 struct se_dev_stat_grps *sgrps, char *page) 133 char *page)
179{ 134{
180 struct se_device *dev = 135 if (to_stat_tgt_dev(item)->export_count)
181 container_of(sgrps, struct se_device, dev_stat_grps);
182
183 if (dev->export_count)
184 return snprintf(page, PAGE_SIZE, "activated"); 136 return snprintf(page, PAGE_SIZE, "activated");
185 else 137 else
186 return snprintf(page, PAGE_SIZE, "deactivated"); 138 return snprintf(page, PAGE_SIZE, "deactivated");
187} 139}
188DEV_STAT_SCSI_TGT_DEV_ATTR_RO(status);
189 140
190static ssize_t target_stat_scsi_tgt_dev_show_attr_non_access_lus( 141static ssize_t target_stat_tgt_non_access_lus_show(struct config_item *item,
191 struct se_dev_stat_grps *sgrps, char *page) 142 char *page)
192{ 143{
193 struct se_device *dev =
194 container_of(sgrps, struct se_device, dev_stat_grps);
195 int non_accessible_lus; 144 int non_accessible_lus;
196 145
197 if (dev->export_count) 146 if (to_stat_tgt_dev(item)->export_count)
198 non_accessible_lus = 0; 147 non_accessible_lus = 0;
199 else 148 else
200 non_accessible_lus = 1; 149 non_accessible_lus = 1;
201 150
202 return snprintf(page, PAGE_SIZE, "%u\n", non_accessible_lus); 151 return snprintf(page, PAGE_SIZE, "%u\n", non_accessible_lus);
203} 152}
204DEV_STAT_SCSI_TGT_DEV_ATTR_RO(non_access_lus);
205 153
206static ssize_t target_stat_scsi_tgt_dev_show_attr_resets( 154static ssize_t target_stat_tgt_resets_show(struct config_item *item,
207 struct se_dev_stat_grps *sgrps, char *page) 155 char *page)
208{ 156{
209 struct se_device *dev =
210 container_of(sgrps, struct se_device, dev_stat_grps);
211
212 return snprintf(page, PAGE_SIZE, "%lu\n", 157 return snprintf(page, PAGE_SIZE, "%lu\n",
213 atomic_long_read(&dev->num_resets)); 158 atomic_long_read(&to_stat_tgt_dev(item)->num_resets));
214} 159}
215DEV_STAT_SCSI_TGT_DEV_ATTR_RO(resets);
216 160
217 161CONFIGFS_ATTR_RO(target_stat_tgt_, inst);
218CONFIGFS_EATTR_OPS(target_stat_scsi_tgt_dev, se_dev_stat_grps, scsi_tgt_dev_group); 162CONFIGFS_ATTR_RO(target_stat_tgt_, indx);
163CONFIGFS_ATTR_RO(target_stat_tgt_, num_lus);
164CONFIGFS_ATTR_RO(target_stat_tgt_, status);
165CONFIGFS_ATTR_RO(target_stat_tgt_, non_access_lus);
166CONFIGFS_ATTR_RO(target_stat_tgt_, resets);
219 167
220static struct configfs_attribute *target_stat_scsi_tgt_dev_attrs[] = { 168static struct configfs_attribute *target_stat_scsi_tgt_dev_attrs[] = {
221 &target_stat_scsi_tgt_dev_inst.attr, 169 &target_stat_tgt_attr_inst,
222 &target_stat_scsi_tgt_dev_indx.attr, 170 &target_stat_tgt_attr_indx,
223 &target_stat_scsi_tgt_dev_num_lus.attr, 171 &target_stat_tgt_attr_num_lus,
224 &target_stat_scsi_tgt_dev_status.attr, 172 &target_stat_tgt_attr_status,
225 &target_stat_scsi_tgt_dev_non_access_lus.attr, 173 &target_stat_tgt_attr_non_access_lus,
226 &target_stat_scsi_tgt_dev_resets.attr, 174 &target_stat_tgt_attr_resets,
227 NULL, 175 NULL,
228}; 176};
229 177
230static struct configfs_item_operations target_stat_scsi_tgt_dev_attrib_ops = {
231 .show_attribute = target_stat_scsi_tgt_dev_attr_show,
232 .store_attribute = target_stat_scsi_tgt_dev_attr_store,
233};
234
235static struct config_item_type target_stat_scsi_tgt_dev_cit = { 178static struct config_item_type target_stat_scsi_tgt_dev_cit = {
236 .ct_item_ops = &target_stat_scsi_tgt_dev_attrib_ops,
237 .ct_attrs = target_stat_scsi_tgt_dev_attrs, 179 .ct_attrs = target_stat_scsi_tgt_dev_attrs,
238 .ct_owner = THIS_MODULE, 180 .ct_owner = THIS_MODULE,
239}; 181};
@@ -242,72 +184,50 @@ static struct config_item_type target_stat_scsi_tgt_dev_cit = {
242 * SCSI Logical Unit Table 184 * SCSI Logical Unit Table
243 */ 185 */
244 186
245CONFIGFS_EATTR_STRUCT(target_stat_scsi_lu, se_dev_stat_grps); 187static struct se_device *to_stat_lu_dev(struct config_item *item)
246#define DEV_STAT_SCSI_LU_ATTR(_name, _mode) \ 188{
247static struct target_stat_scsi_lu_attribute target_stat_scsi_lu_##_name = \ 189 struct se_dev_stat_grps *sgrps = container_of(to_config_group(item),
248 __CONFIGFS_EATTR(_name, _mode, \ 190 struct se_dev_stat_grps, scsi_lu_group);
249 target_stat_scsi_lu_show_attr_##_name, \ 191 return container_of(sgrps, struct se_device, dev_stat_grps);
250 target_stat_scsi_lu_store_attr_##_name); 192}
251
252#define DEV_STAT_SCSI_LU_ATTR_RO(_name) \
253static struct target_stat_scsi_lu_attribute target_stat_scsi_lu_##_name = \
254 __CONFIGFS_EATTR_RO(_name, \
255 target_stat_scsi_lu_show_attr_##_name);
256 193
257static ssize_t target_stat_scsi_lu_show_attr_inst( 194static ssize_t target_stat_lu_inst_show(struct config_item *item, char *page)
258 struct se_dev_stat_grps *sgrps, char *page)
259{ 195{
260 struct se_device *dev = 196 struct se_hba *hba = to_stat_lu_dev(item)->se_hba;
261 container_of(sgrps, struct se_device, dev_stat_grps);
262 struct se_hba *hba = dev->se_hba;
263 197
264 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index); 198 return snprintf(page, PAGE_SIZE, "%u\n", hba->hba_index);
265} 199}
266DEV_STAT_SCSI_LU_ATTR_RO(inst);
267 200
268static ssize_t target_stat_scsi_lu_show_attr_dev( 201static ssize_t target_stat_lu_dev_show(struct config_item *item, char *page)
269 struct se_dev_stat_grps *sgrps, char *page)
270{ 202{
271 struct se_device *dev = 203 return snprintf(page, PAGE_SIZE, "%u\n",
272 container_of(sgrps, struct se_device, dev_stat_grps); 204 to_stat_lu_dev(item)->dev_index);
273
274 return snprintf(page, PAGE_SIZE, "%u\n", dev->dev_index);
275} 205}
276DEV_STAT_SCSI_LU_ATTR_RO(dev);
277 206
278static ssize_t target_stat_scsi_lu_show_attr_indx( 207static ssize_t target_stat_lu_indx_show(struct config_item *item, char *page)
279 struct se_dev_stat_grps *sgrps, char *page)
280{ 208{
281 return snprintf(page, PAGE_SIZE, "%u\n", SCSI_LU_INDEX); 209 return snprintf(page, PAGE_SIZE, "%u\n", SCSI_LU_INDEX);
282} 210}
283DEV_STAT_SCSI_LU_ATTR_RO(indx);
284 211
285static ssize_t target_stat_scsi_lu_show_attr_lun( 212static ssize_t target_stat_lu_lun_show(struct config_item *item, char *page)
286 struct se_dev_stat_grps *sgrps, char *page)
287{ 213{
288 /* FIXME: scsiLuDefaultLun */ 214 /* FIXME: scsiLuDefaultLun */
289 return snprintf(page, PAGE_SIZE, "%llu\n", (unsigned long long)0); 215 return snprintf(page, PAGE_SIZE, "%llu\n", (unsigned long long)0);
290} 216}
291DEV_STAT_SCSI_LU_ATTR_RO(lun);
292 217
293static ssize_t target_stat_scsi_lu_show_attr_lu_name( 218static ssize_t target_stat_lu_lu_name_show(struct config_item *item, char *page)
294 struct se_dev_stat_grps *sgrps, char *page)
295{ 219{
296 struct se_device *dev = 220 struct se_device *dev = to_stat_lu_dev(item);
297 container_of(sgrps, struct se_device, dev_stat_grps);
298 221
299 /* scsiLuWwnName */ 222 /* scsiLuWwnName */
300 return snprintf(page, PAGE_SIZE, "%s\n", 223 return snprintf(page, PAGE_SIZE, "%s\n",
301 (strlen(dev->t10_wwn.unit_serial)) ? 224 (strlen(dev->t10_wwn.unit_serial)) ?
302 dev->t10_wwn.unit_serial : "None"); 225 dev->t10_wwn.unit_serial : "None");
303} 226}
304DEV_STAT_SCSI_LU_ATTR_RO(lu_name);
305 227
306static ssize_t target_stat_scsi_lu_show_attr_vend( 228static ssize_t target_stat_lu_vend_show(struct config_item *item, char *page)
307 struct se_dev_stat_grps *sgrps, char *page)
308{ 229{
309 struct se_device *dev = 230 struct se_device *dev = to_stat_lu_dev(item);
310 container_of(sgrps, struct se_device, dev_stat_grps);
311 int i; 231 int i;
312 char str[sizeof(dev->t10_wwn.vendor)+1]; 232 char str[sizeof(dev->t10_wwn.vendor)+1];
313 233
@@ -318,13 +238,10 @@ static ssize_t target_stat_scsi_lu_show_attr_vend(
318 str[i] = '\0'; 238 str[i] = '\0';
319 return snprintf(page, PAGE_SIZE, "%s\n", str); 239 return snprintf(page, PAGE_SIZE, "%s\n", str);
320} 240}
321DEV_STAT_SCSI_LU_ATTR_RO(vend);
322 241
323static ssize_t target_stat_scsi_lu_show_attr_prod( 242static ssize_t target_stat_lu_prod_show(struct config_item *item, char *page)
324 struct se_dev_stat_grps *sgrps, char *page)
325{ 243{
326 struct se_device *dev = 244 struct se_device *dev = to_stat_lu_dev(item);
327 container_of(sgrps, struct se_device, dev_stat_grps);
328 int i; 245 int i;
329 char str[sizeof(dev->t10_wwn.model)+1]; 246 char str[sizeof(dev->t10_wwn.model)+1];
330 247
@@ -335,13 +252,10 @@ static ssize_t target_stat_scsi_lu_show_attr_prod(
335 str[i] = '\0'; 252 str[i] = '\0';
336 return snprintf(page, PAGE_SIZE, "%s\n", str); 253 return snprintf(page, PAGE_SIZE, "%s\n", str);
337} 254}
338DEV_STAT_SCSI_LU_ATTR_RO(prod);
339 255
340static ssize_t target_stat_scsi_lu_show_attr_rev( 256static ssize_t target_stat_lu_rev_show(struct config_item *item, char *page)
341 struct se_dev_stat_grps *sgrps, char *page)
342{ 257{
343 struct se_device *dev = 258 struct se_device *dev = to_stat_lu_dev(item);
344 container_of(sgrps, struct se_device, dev_stat_grps);
345 int i; 259 int i;
346 char str[sizeof(dev->t10_wwn.revision)+1]; 260 char str[sizeof(dev->t10_wwn.revision)+1];
347 261
@@ -352,146 +266,137 @@ static ssize_t target_stat_scsi_lu_show_attr_rev(
352 str[i] = '\0'; 266 str[i] = '\0';
353 return snprintf(page, PAGE_SIZE, "%s\n", str); 267 return snprintf(page, PAGE_SIZE, "%s\n", str);
354} 268}
355DEV_STAT_SCSI_LU_ATTR_RO(rev);
356 269
357static ssize_t target_stat_scsi_lu_show_attr_dev_type( 270static ssize_t target_stat_lu_dev_type_show(struct config_item *item, char *page)
358 struct se_dev_stat_grps *sgrps, char *page)
359{ 271{
360 struct se_device *dev = 272 struct se_device *dev = to_stat_lu_dev(item);
361 container_of(sgrps, struct se_device, dev_stat_grps);
362 273
363 /* scsiLuPeripheralType */ 274 /* scsiLuPeripheralType */
364 return snprintf(page, PAGE_SIZE, "%u\n", 275 return snprintf(page, PAGE_SIZE, "%u\n",
365 dev->transport->get_device_type(dev)); 276 dev->transport->get_device_type(dev));
366} 277}
367DEV_STAT_SCSI_LU_ATTR_RO(dev_type);
368 278
369static ssize_t target_stat_scsi_lu_show_attr_status( 279static ssize_t target_stat_lu_status_show(struct config_item *item, char *page)
370 struct se_dev_stat_grps *sgrps, char *page)
371{ 280{
372 struct se_device *dev = 281 struct se_device *dev = to_stat_lu_dev(item);
373 container_of(sgrps, struct se_device, dev_stat_grps);
374 282
375 /* scsiLuStatus */ 283 /* scsiLuStatus */
376 return snprintf(page, PAGE_SIZE, "%s\n", 284 return snprintf(page, PAGE_SIZE, "%s\n",
377 (dev->export_count) ? "available" : "notavailable"); 285 (dev->export_count) ? "available" : "notavailable");
378} 286}
379DEV_STAT_SCSI_LU_ATTR_RO(status);
380 287
381static ssize_t target_stat_scsi_lu_show_attr_state_bit( 288static ssize_t target_stat_lu_state_bit_show(struct config_item *item,
382 struct se_dev_stat_grps *sgrps, char *page) 289 char *page)
383{ 290{
384 /* scsiLuState */ 291 /* scsiLuState */
385 return snprintf(page, PAGE_SIZE, "exposed\n"); 292 return snprintf(page, PAGE_SIZE, "exposed\n");
386} 293}
387DEV_STAT_SCSI_LU_ATTR_RO(state_bit);
388 294
389static ssize_t target_stat_scsi_lu_show_attr_num_cmds( 295static ssize_t target_stat_lu_num_cmds_show(struct config_item *item,
390 struct se_dev_stat_grps *sgrps, char *page) 296 char *page)
391{ 297{
392 struct se_device *dev = 298 struct se_device *dev = to_stat_lu_dev(item);
393 container_of(sgrps, struct se_device, dev_stat_grps);
394 299
395 /* scsiLuNumCommands */ 300 /* scsiLuNumCommands */
396 return snprintf(page, PAGE_SIZE, "%lu\n", 301 return snprintf(page, PAGE_SIZE, "%lu\n",
397 atomic_long_read(&dev->num_cmds)); 302 atomic_long_read(&dev->num_cmds));
398} 303}
399DEV_STAT_SCSI_LU_ATTR_RO(num_cmds);
400 304
401static ssize_t target_stat_scsi_lu_show_attr_read_mbytes( 305static ssize_t target_stat_lu_read_mbytes_show(struct config_item *item,
402 struct se_dev_stat_grps *sgrps, char *page) 306 char *page)
403{ 307{
404 struct se_device *dev = 308 struct se_device *dev = to_stat_lu_dev(item);
405 container_of(sgrps, struct se_device, dev_stat_grps);
406 309
407 /* scsiLuReadMegaBytes */ 310 /* scsiLuReadMegaBytes */
408 return snprintf(page, PAGE_SIZE, "%lu\n", 311 return snprintf(page, PAGE_SIZE, "%lu\n",
409 atomic_long_read(&dev->read_bytes) >> 20); 312 atomic_long_read(&dev->read_bytes) >> 20);
410} 313}
411DEV_STAT_SCSI_LU_ATTR_RO(read_mbytes);
412 314
413static ssize_t target_stat_scsi_lu_show_attr_write_mbytes( 315static ssize_t target_stat_lu_write_mbytes_show(struct config_item *item,
414 struct se_dev_stat_grps *sgrps, char *page) 316 char *page)
415{ 317{
416 struct se_device *dev = 318 struct se_device *dev = to_stat_lu_dev(item);
417 container_of(sgrps, struct se_device, dev_stat_grps);
418 319
419 /* scsiLuWrittenMegaBytes */ 320 /* scsiLuWrittenMegaBytes */
420 return snprintf(page, PAGE_SIZE, "%lu\n", 321 return snprintf(page, PAGE_SIZE, "%lu\n",
421 atomic_long_read(&dev->write_bytes) >> 20); 322 atomic_long_read(&dev->write_bytes) >> 20);
422} 323}
423DEV_STAT_SCSI_LU_ATTR_RO(write_mbytes);
424 324
425static ssize_t target_stat_scsi_lu_show_attr_resets( 325static ssize_t target_stat_lu_resets_show(struct config_item *item, char *page)
426 struct se_dev_stat_grps *sgrps, char *page)
427{ 326{
428 struct se_device *dev = 327 struct se_device *dev = to_stat_lu_dev(item);
429 container_of(sgrps, struct se_device, dev_stat_grps);
430 328
431 /* scsiLuInResets */ 329 /* scsiLuInResets */
432 return snprintf(page, PAGE_SIZE, "%lu\n", atomic_long_read(&dev->num_resets)); 330 return snprintf(page, PAGE_SIZE, "%lu\n",
331 atomic_long_read(&dev->num_resets));
433} 332}
434DEV_STAT_SCSI_LU_ATTR_RO(resets);
435 333
436static ssize_t target_stat_scsi_lu_show_attr_full_stat( 334static ssize_t target_stat_lu_full_stat_show(struct config_item *item,
437 struct se_dev_stat_grps *sgrps, char *page) 335 char *page)
438{ 336{
439 /* FIXME: scsiLuOutTaskSetFullStatus */ 337 /* FIXME: scsiLuOutTaskSetFullStatus */
440 return snprintf(page, PAGE_SIZE, "%u\n", 0); 338 return snprintf(page, PAGE_SIZE, "%u\n", 0);
441} 339}
442DEV_STAT_SCSI_LU_ATTR_RO(full_stat);
443 340
444static ssize_t target_stat_scsi_lu_show_attr_hs_num_cmds( 341static ssize_t target_stat_lu_hs_num_cmds_show(struct config_item *item,
445 struct se_dev_stat_grps *sgrps, char *page) 342 char *page)
446{ 343{
447 /* FIXME: scsiLuHSInCommands */ 344 /* FIXME: scsiLuHSInCommands */
448 return snprintf(page, PAGE_SIZE, "%u\n", 0); 345 return snprintf(page, PAGE_SIZE, "%u\n", 0);
449} 346}
450DEV_STAT_SCSI_LU_ATTR_RO(hs_num_cmds);
451 347
452static ssize_t target_stat_scsi_lu_show_attr_creation_time( 348static ssize_t target_stat_lu_creation_time_show(struct config_item *item,
453 struct se_dev_stat_grps *sgrps, char *page) 349 char *page)
454{ 350{
455 struct se_device *dev = 351 struct se_device *dev = to_stat_lu_dev(item);
456 container_of(sgrps, struct se_device, dev_stat_grps);
457 352
458 /* scsiLuCreationTime */ 353 /* scsiLuCreationTime */
459 return snprintf(page, PAGE_SIZE, "%u\n", (u32)(((u32)dev->creation_time - 354 return snprintf(page, PAGE_SIZE, "%u\n", (u32)(((u32)dev->creation_time -
460 INITIAL_JIFFIES) * 100 / HZ)); 355 INITIAL_JIFFIES) * 100 / HZ));
461} 356}
462DEV_STAT_SCSI_LU_ATTR_RO(creation_time);
463 357
464CONFIGFS_EATTR_OPS(target_stat_scsi_lu, se_dev_stat_grps, scsi_lu_group); 358CONFIGFS_ATTR_RO(target_stat_lu_, inst);
359CONFIGFS_ATTR_RO(target_stat_lu_, dev);
360CONFIGFS_ATTR_RO(target_stat_lu_, indx);
361CONFIGFS_ATTR_RO(target_stat_lu_, lun);
362CONFIGFS_ATTR_RO(target_stat_lu_, lu_name);
363CONFIGFS_ATTR_RO(target_stat_lu_, vend);
364CONFIGFS_ATTR_RO(target_stat_lu_, prod);
365CONFIGFS_ATTR_RO(target_stat_lu_, rev);
366CONFIGFS_ATTR_RO(target_stat_lu_, dev_type);
367CONFIGFS_ATTR_RO(target_stat_lu_, status);
368CONFIGFS_ATTR_RO(target_stat_lu_, state_bit);
369CONFIGFS_ATTR_RO(target_stat_lu_, num_cmds);
370CONFIGFS_ATTR_RO(target_stat_lu_, read_mbytes);
371CONFIGFS_ATTR_RO(target_stat_lu_, write_mbytes);
372CONFIGFS_ATTR_RO(target_stat_lu_, resets);
373CONFIGFS_ATTR_RO(target_stat_lu_, full_stat);
374CONFIGFS_ATTR_RO(target_stat_lu_, hs_num_cmds);
375CONFIGFS_ATTR_RO(target_stat_lu_, creation_time);
465 376
466static struct configfs_attribute *target_stat_scsi_lu_attrs[] = { 377static struct configfs_attribute *target_stat_scsi_lu_attrs[] = {
467 &target_stat_scsi_lu_inst.attr, 378 &target_stat_lu_attr_inst,
468 &target_stat_scsi_lu_dev.attr, 379 &target_stat_lu_attr_dev,
469 &target_stat_scsi_lu_indx.attr, 380 &target_stat_lu_attr_indx,
470 &target_stat_scsi_lu_lun.attr, 381 &target_stat_lu_attr_lun,
471 &target_stat_scsi_lu_lu_name.attr, 382 &target_stat_lu_attr_lu_name,
472 &target_stat_scsi_lu_vend.attr, 383 &target_stat_lu_attr_vend,
473 &target_stat_scsi_lu_prod.attr, 384 &target_stat_lu_attr_prod,
474 &target_stat_scsi_lu_rev.attr, 385 &target_stat_lu_attr_rev,
475 &target_stat_scsi_lu_dev_type.attr, 386 &target_stat_lu_attr_dev_type,
476 &target_stat_scsi_lu_status.attr, 387 &target_stat_lu_attr_status,
477 &target_stat_scsi_lu_state_bit.attr, 388 &target_stat_lu_attr_state_bit,
478 &target_stat_scsi_lu_num_cmds.attr, 389 &target_stat_lu_attr_num_cmds,
479 &target_stat_scsi_lu_read_mbytes.attr, 390 &target_stat_lu_attr_read_mbytes,
480 &target_stat_scsi_lu_write_mbytes.attr, 391 &target_stat_lu_attr_write_mbytes,
481 &target_stat_scsi_lu_resets.attr, 392 &target_stat_lu_attr_resets,
482 &target_stat_scsi_lu_full_stat.attr, 393 &target_stat_lu_attr_full_stat,
483 &target_stat_scsi_lu_hs_num_cmds.attr, 394 &target_stat_lu_attr_hs_num_cmds,
484 &target_stat_scsi_lu_creation_time.attr, 395 &target_stat_lu_attr_creation_time,
485 NULL, 396 NULL,
486}; 397};
487 398
488static struct configfs_item_operations target_stat_scsi_lu_attrib_ops = {
489 .show_attribute = target_stat_scsi_lu_attr_show,
490 .store_attribute = target_stat_scsi_lu_attr_store,
491};
492
493static struct config_item_type target_stat_scsi_lu_cit = { 399static struct config_item_type target_stat_scsi_lu_cit = {
494 .ct_item_ops = &target_stat_scsi_lu_attrib_ops,
495 .ct_attrs = target_stat_scsi_lu_attrs, 400 .ct_attrs = target_stat_scsi_lu_attrs,
496 .ct_owner = THIS_MODULE, 401 .ct_owner = THIS_MODULE,
497}; 402};
@@ -521,24 +426,16 @@ void target_stat_setup_dev_default_groups(struct se_device *dev)
521 * SCSI Port Table 426 * SCSI Port Table
522 */ 427 */
523 428
524CONFIGFS_EATTR_STRUCT(target_stat_scsi_port, se_port_stat_grps); 429static struct se_lun *to_stat_port(struct config_item *item)
525#define DEV_STAT_SCSI_PORT_ATTR(_name, _mode) \ 430{
526static struct target_stat_scsi_port_attribute \ 431 struct se_port_stat_grps *pgrps = container_of(to_config_group(item),
527 target_stat_scsi_port_##_name = \ 432 struct se_port_stat_grps, scsi_port_group);
528 __CONFIGFS_EATTR(_name, _mode, \ 433 return container_of(pgrps, struct se_lun, port_stat_grps);
529 target_stat_scsi_port_show_attr_##_name, \ 434}
530 target_stat_scsi_port_store_attr_##_name);
531
532#define DEV_STAT_SCSI_PORT_ATTR_RO(_name) \
533static struct target_stat_scsi_port_attribute \
534 target_stat_scsi_port_##_name = \
535 __CONFIGFS_EATTR_RO(_name, \
536 target_stat_scsi_port_show_attr_##_name);
537 435
538static ssize_t target_stat_scsi_port_show_attr_inst( 436static ssize_t target_stat_port_inst_show(struct config_item *item, char *page)
539 struct se_port_stat_grps *pgrps, char *page)
540{ 437{
541 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 438 struct se_lun *lun = to_stat_port(item);
542 struct se_device *dev; 439 struct se_device *dev;
543 ssize_t ret = -ENODEV; 440 ssize_t ret = -ENODEV;
544 441
@@ -549,12 +446,10 @@ static ssize_t target_stat_scsi_port_show_attr_inst(
549 rcu_read_unlock(); 446 rcu_read_unlock();
550 return ret; 447 return ret;
551} 448}
552DEV_STAT_SCSI_PORT_ATTR_RO(inst);
553 449
554static ssize_t target_stat_scsi_port_show_attr_dev( 450static ssize_t target_stat_port_dev_show(struct config_item *item, char *page)
555 struct se_port_stat_grps *pgrps, char *page)
556{ 451{
557 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 452 struct se_lun *lun = to_stat_port(item);
558 struct se_device *dev; 453 struct se_device *dev;
559 ssize_t ret = -ENODEV; 454 ssize_t ret = -ENODEV;
560 455
@@ -565,12 +460,10 @@ static ssize_t target_stat_scsi_port_show_attr_dev(
565 rcu_read_unlock(); 460 rcu_read_unlock();
566 return ret; 461 return ret;
567} 462}
568DEV_STAT_SCSI_PORT_ATTR_RO(dev);
569 463
570static ssize_t target_stat_scsi_port_show_attr_indx( 464static ssize_t target_stat_port_indx_show(struct config_item *item, char *page)
571 struct se_port_stat_grps *pgrps, char *page)
572{ 465{
573 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 466 struct se_lun *lun = to_stat_port(item);
574 struct se_device *dev; 467 struct se_device *dev;
575 ssize_t ret = -ENODEV; 468 ssize_t ret = -ENODEV;
576 469
@@ -581,12 +474,10 @@ static ssize_t target_stat_scsi_port_show_attr_indx(
581 rcu_read_unlock(); 474 rcu_read_unlock();
582 return ret; 475 return ret;
583} 476}
584DEV_STAT_SCSI_PORT_ATTR_RO(indx);
585 477
586static ssize_t target_stat_scsi_port_show_attr_role( 478static ssize_t target_stat_port_role_show(struct config_item *item, char *page)
587 struct se_port_stat_grps *pgrps, char *page)
588{ 479{
589 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 480 struct se_lun *lun = to_stat_port(item);
590 struct se_device *dev; 481 struct se_device *dev;
591 ssize_t ret = -ENODEV; 482 ssize_t ret = -ENODEV;
592 483
@@ -597,12 +488,11 @@ static ssize_t target_stat_scsi_port_show_attr_role(
597 rcu_read_unlock(); 488 rcu_read_unlock();
598 return ret; 489 return ret;
599} 490}
600DEV_STAT_SCSI_PORT_ATTR_RO(role);
601 491
602static ssize_t target_stat_scsi_port_show_attr_busy_count( 492static ssize_t target_stat_port_busy_count_show(struct config_item *item,
603 struct se_port_stat_grps *pgrps, char *page) 493 char *page)
604{ 494{
605 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 495 struct se_lun *lun = to_stat_port(item);
606 struct se_device *dev; 496 struct se_device *dev;
607 ssize_t ret = -ENODEV; 497 ssize_t ret = -ENODEV;
608 498
@@ -615,26 +505,23 @@ static ssize_t target_stat_scsi_port_show_attr_busy_count(
615 rcu_read_unlock(); 505 rcu_read_unlock();
616 return ret; 506 return ret;
617} 507}
618DEV_STAT_SCSI_PORT_ATTR_RO(busy_count);
619 508
620CONFIGFS_EATTR_OPS(target_stat_scsi_port, se_port_stat_grps, scsi_port_group); 509CONFIGFS_ATTR_RO(target_stat_port_, inst);
510CONFIGFS_ATTR_RO(target_stat_port_, dev);
511CONFIGFS_ATTR_RO(target_stat_port_, indx);
512CONFIGFS_ATTR_RO(target_stat_port_, role);
513CONFIGFS_ATTR_RO(target_stat_port_, busy_count);
621 514
622static struct configfs_attribute *target_stat_scsi_port_attrs[] = { 515static struct configfs_attribute *target_stat_scsi_port_attrs[] = {
623 &target_stat_scsi_port_inst.attr, 516 &target_stat_port_attr_inst,
624 &target_stat_scsi_port_dev.attr, 517 &target_stat_port_attr_dev,
625 &target_stat_scsi_port_indx.attr, 518 &target_stat_port_attr_indx,
626 &target_stat_scsi_port_role.attr, 519 &target_stat_port_attr_role,
627 &target_stat_scsi_port_busy_count.attr, 520 &target_stat_port_attr_busy_count,
628 NULL, 521 NULL,
629}; 522};
630 523
631static struct configfs_item_operations target_stat_scsi_port_attrib_ops = {
632 .show_attribute = target_stat_scsi_port_attr_show,
633 .store_attribute = target_stat_scsi_port_attr_store,
634};
635
636static struct config_item_type target_stat_scsi_port_cit = { 524static struct config_item_type target_stat_scsi_port_cit = {
637 .ct_item_ops = &target_stat_scsi_port_attrib_ops,
638 .ct_attrs = target_stat_scsi_port_attrs, 525 .ct_attrs = target_stat_scsi_port_attrs,
639 .ct_owner = THIS_MODULE, 526 .ct_owner = THIS_MODULE,
640}; 527};
@@ -642,24 +529,17 @@ static struct config_item_type target_stat_scsi_port_cit = {
642/* 529/*
643 * SCSI Target Port Table 530 * SCSI Target Port Table
644 */ 531 */
645CONFIGFS_EATTR_STRUCT(target_stat_scsi_tgt_port, se_port_stat_grps); 532static struct se_lun *to_stat_tgt_port(struct config_item *item)
646#define DEV_STAT_SCSI_TGT_PORT_ATTR(_name, _mode) \ 533{
647static struct target_stat_scsi_tgt_port_attribute \ 534 struct se_port_stat_grps *pgrps = container_of(to_config_group(item),
648 target_stat_scsi_tgt_port_##_name = \ 535 struct se_port_stat_grps, scsi_tgt_port_group);
649 __CONFIGFS_EATTR(_name, _mode, \ 536 return container_of(pgrps, struct se_lun, port_stat_grps);
650 target_stat_scsi_tgt_port_show_attr_##_name, \ 537}
651 target_stat_scsi_tgt_port_store_attr_##_name); 538
652 539static ssize_t target_stat_tgt_port_inst_show(struct config_item *item,
653#define DEV_STAT_SCSI_TGT_PORT_ATTR_RO(_name) \ 540 char *page)
654static struct target_stat_scsi_tgt_port_attribute \ 541{
655 target_stat_scsi_tgt_port_##_name = \ 542 struct se_lun *lun = to_stat_tgt_port(item);
656 __CONFIGFS_EATTR_RO(_name, \
657 target_stat_scsi_tgt_port_show_attr_##_name);
658
659static ssize_t target_stat_scsi_tgt_port_show_attr_inst(
660 struct se_port_stat_grps *pgrps, char *page)
661{
662 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps);
663 struct se_device *dev; 543 struct se_device *dev;
664 ssize_t ret = -ENODEV; 544 ssize_t ret = -ENODEV;
665 545
@@ -670,12 +550,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_inst(
670 rcu_read_unlock(); 550 rcu_read_unlock();
671 return ret; 551 return ret;
672} 552}
673DEV_STAT_SCSI_TGT_PORT_ATTR_RO(inst);
674 553
675static ssize_t target_stat_scsi_tgt_port_show_attr_dev( 554static ssize_t target_stat_tgt_port_dev_show(struct config_item *item,
676 struct se_port_stat_grps *pgrps, char *page) 555 char *page)
677{ 556{
678 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 557 struct se_lun *lun = to_stat_tgt_port(item);
679 struct se_device *dev; 558 struct se_device *dev;
680 ssize_t ret = -ENODEV; 559 ssize_t ret = -ENODEV;
681 560
@@ -686,12 +565,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_dev(
686 rcu_read_unlock(); 565 rcu_read_unlock();
687 return ret; 566 return ret;
688} 567}
689DEV_STAT_SCSI_TGT_PORT_ATTR_RO(dev);
690 568
691static ssize_t target_stat_scsi_tgt_port_show_attr_indx( 569static ssize_t target_stat_tgt_port_indx_show(struct config_item *item,
692 struct se_port_stat_grps *pgrps, char *page) 570 char *page)
693{ 571{
694 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 572 struct se_lun *lun = to_stat_tgt_port(item);
695 struct se_device *dev; 573 struct se_device *dev;
696 ssize_t ret = -ENODEV; 574 ssize_t ret = -ENODEV;
697 575
@@ -702,12 +580,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_indx(
702 rcu_read_unlock(); 580 rcu_read_unlock();
703 return ret; 581 return ret;
704} 582}
705DEV_STAT_SCSI_TGT_PORT_ATTR_RO(indx);
706 583
707static ssize_t target_stat_scsi_tgt_port_show_attr_name( 584static ssize_t target_stat_tgt_port_name_show(struct config_item *item,
708 struct se_port_stat_grps *pgrps, char *page) 585 char *page)
709{ 586{
710 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 587 struct se_lun *lun = to_stat_tgt_port(item);
711 struct se_portal_group *tpg = lun->lun_tpg; 588 struct se_portal_group *tpg = lun->lun_tpg;
712 struct se_device *dev; 589 struct se_device *dev;
713 ssize_t ret = -ENODEV; 590 ssize_t ret = -ENODEV;
@@ -721,12 +598,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_name(
721 rcu_read_unlock(); 598 rcu_read_unlock();
722 return ret; 599 return ret;
723} 600}
724DEV_STAT_SCSI_TGT_PORT_ATTR_RO(name);
725 601
726static ssize_t target_stat_scsi_tgt_port_show_attr_port_index( 602static ssize_t target_stat_tgt_port_port_index_show(struct config_item *item,
727 struct se_port_stat_grps *pgrps, char *page) 603 char *page)
728{ 604{
729 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 605 struct se_lun *lun = to_stat_tgt_port(item);
730 struct se_portal_group *tpg = lun->lun_tpg; 606 struct se_portal_group *tpg = lun->lun_tpg;
731 struct se_device *dev; 607 struct se_device *dev;
732 ssize_t ret = -ENODEV; 608 ssize_t ret = -ENODEV;
@@ -740,12 +616,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_port_index(
740 rcu_read_unlock(); 616 rcu_read_unlock();
741 return ret; 617 return ret;
742} 618}
743DEV_STAT_SCSI_TGT_PORT_ATTR_RO(port_index);
744 619
745static ssize_t target_stat_scsi_tgt_port_show_attr_in_cmds( 620static ssize_t target_stat_tgt_port_in_cmds_show(struct config_item *item,
746 struct se_port_stat_grps *pgrps, char *page) 621 char *page)
747{ 622{
748 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 623 struct se_lun *lun = to_stat_tgt_port(item);
749 struct se_device *dev; 624 struct se_device *dev;
750 ssize_t ret = -ENODEV; 625 ssize_t ret = -ENODEV;
751 626
@@ -757,12 +632,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_in_cmds(
757 rcu_read_unlock(); 632 rcu_read_unlock();
758 return ret; 633 return ret;
759} 634}
760DEV_STAT_SCSI_TGT_PORT_ATTR_RO(in_cmds);
761 635
762static ssize_t target_stat_scsi_tgt_port_show_attr_write_mbytes( 636static ssize_t target_stat_tgt_port_write_mbytes_show(struct config_item *item,
763 struct se_port_stat_grps *pgrps, char *page) 637 char *page)
764{ 638{
765 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 639 struct se_lun *lun = to_stat_tgt_port(item);
766 struct se_device *dev; 640 struct se_device *dev;
767 ssize_t ret = -ENODEV; 641 ssize_t ret = -ENODEV;
768 642
@@ -774,12 +648,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_write_mbytes(
774 rcu_read_unlock(); 648 rcu_read_unlock();
775 return ret; 649 return ret;
776} 650}
777DEV_STAT_SCSI_TGT_PORT_ATTR_RO(write_mbytes);
778 651
779static ssize_t target_stat_scsi_tgt_port_show_attr_read_mbytes( 652static ssize_t target_stat_tgt_port_read_mbytes_show(struct config_item *item,
780 struct se_port_stat_grps *pgrps, char *page) 653 char *page)
781{ 654{
782 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 655 struct se_lun *lun = to_stat_tgt_port(item);
783 struct se_device *dev; 656 struct se_device *dev;
784 ssize_t ret = -ENODEV; 657 ssize_t ret = -ENODEV;
785 658
@@ -791,12 +664,11 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_read_mbytes(
791 rcu_read_unlock(); 664 rcu_read_unlock();
792 return ret; 665 return ret;
793} 666}
794DEV_STAT_SCSI_TGT_PORT_ATTR_RO(read_mbytes);
795 667
796static ssize_t target_stat_scsi_tgt_port_show_attr_hs_in_cmds( 668static ssize_t target_stat_tgt_port_hs_in_cmds_show(struct config_item *item,
797 struct se_port_stat_grps *pgrps, char *page) 669 char *page)
798{ 670{
799 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 671 struct se_lun *lun = to_stat_tgt_port(item);
800 struct se_device *dev; 672 struct se_device *dev;
801 ssize_t ret = -ENODEV; 673 ssize_t ret = -ENODEV;
802 674
@@ -809,57 +681,49 @@ static ssize_t target_stat_scsi_tgt_port_show_attr_hs_in_cmds(
809 rcu_read_unlock(); 681 rcu_read_unlock();
810 return ret; 682 return ret;
811} 683}
812DEV_STAT_SCSI_TGT_PORT_ATTR_RO(hs_in_cmds);
813 684
814CONFIGFS_EATTR_OPS(target_stat_scsi_tgt_port, se_port_stat_grps, 685CONFIGFS_ATTR_RO(target_stat_tgt_port_, inst);
815 scsi_tgt_port_group); 686CONFIGFS_ATTR_RO(target_stat_tgt_port_, dev);
687CONFIGFS_ATTR_RO(target_stat_tgt_port_, indx);
688CONFIGFS_ATTR_RO(target_stat_tgt_port_, name);
689CONFIGFS_ATTR_RO(target_stat_tgt_port_, port_index);
690CONFIGFS_ATTR_RO(target_stat_tgt_port_, in_cmds);
691CONFIGFS_ATTR_RO(target_stat_tgt_port_, write_mbytes);
692CONFIGFS_ATTR_RO(target_stat_tgt_port_, read_mbytes);
693CONFIGFS_ATTR_RO(target_stat_tgt_port_, hs_in_cmds);
816 694
817static struct configfs_attribute *target_stat_scsi_tgt_port_attrs[] = { 695static struct configfs_attribute *target_stat_scsi_tgt_port_attrs[] = {
818 &target_stat_scsi_tgt_port_inst.attr, 696 &target_stat_tgt_port_attr_inst,
819 &target_stat_scsi_tgt_port_dev.attr, 697 &target_stat_tgt_port_attr_dev,
820 &target_stat_scsi_tgt_port_indx.attr, 698 &target_stat_tgt_port_attr_indx,
821 &target_stat_scsi_tgt_port_name.attr, 699 &target_stat_tgt_port_attr_name,
822 &target_stat_scsi_tgt_port_port_index.attr, 700 &target_stat_tgt_port_attr_port_index,
823 &target_stat_scsi_tgt_port_in_cmds.attr, 701 &target_stat_tgt_port_attr_in_cmds,
824 &target_stat_scsi_tgt_port_write_mbytes.attr, 702 &target_stat_tgt_port_attr_write_mbytes,
825 &target_stat_scsi_tgt_port_read_mbytes.attr, 703 &target_stat_tgt_port_attr_read_mbytes,
826 &target_stat_scsi_tgt_port_hs_in_cmds.attr, 704 &target_stat_tgt_port_attr_hs_in_cmds,
827 NULL, 705 NULL,
828}; 706};
829 707
830static struct configfs_item_operations target_stat_scsi_tgt_port_attrib_ops = {
831 .show_attribute = target_stat_scsi_tgt_port_attr_show,
832 .store_attribute = target_stat_scsi_tgt_port_attr_store,
833};
834
835static struct config_item_type target_stat_scsi_tgt_port_cit = { 708static struct config_item_type target_stat_scsi_tgt_port_cit = {
836 .ct_item_ops = &target_stat_scsi_tgt_port_attrib_ops,
837 .ct_attrs = target_stat_scsi_tgt_port_attrs, 709 .ct_attrs = target_stat_scsi_tgt_port_attrs,
838 .ct_owner = THIS_MODULE, 710 .ct_owner = THIS_MODULE,
839}; 711};
840 712
841/* 713/*
842 * SCSI Transport Table 714 * SCSI Transport Table
843o */ 715 */
844 716static struct se_lun *to_transport_stat(struct config_item *item)
845CONFIGFS_EATTR_STRUCT(target_stat_scsi_transport, se_port_stat_grps); 717{
846#define DEV_STAT_SCSI_TRANSPORT_ATTR(_name, _mode) \ 718 struct se_port_stat_grps *pgrps = container_of(to_config_group(item),
847static struct target_stat_scsi_transport_attribute \ 719 struct se_port_stat_grps, scsi_transport_group);
848 target_stat_scsi_transport_##_name = \ 720 return container_of(pgrps, struct se_lun, port_stat_grps);
849 __CONFIGFS_EATTR(_name, _mode, \ 721}
850 target_stat_scsi_transport_show_attr_##_name, \ 722
851 target_stat_scsi_transport_store_attr_##_name); 723static ssize_t target_stat_transport_inst_show(struct config_item *item,
852 724 char *page)
853#define DEV_STAT_SCSI_TRANSPORT_ATTR_RO(_name) \ 725{
854static struct target_stat_scsi_transport_attribute \ 726 struct se_lun *lun = to_transport_stat(item);
855 target_stat_scsi_transport_##_name = \
856 __CONFIGFS_EATTR_RO(_name, \
857 target_stat_scsi_transport_show_attr_##_name);
858
859static ssize_t target_stat_scsi_transport_show_attr_inst(
860 struct se_port_stat_grps *pgrps, char *page)
861{
862 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps);
863 struct se_device *dev; 727 struct se_device *dev;
864 ssize_t ret = -ENODEV; 728 ssize_t ret = -ENODEV;
865 729
@@ -870,12 +734,11 @@ static ssize_t target_stat_scsi_transport_show_attr_inst(
870 rcu_read_unlock(); 734 rcu_read_unlock();
871 return ret; 735 return ret;
872} 736}
873DEV_STAT_SCSI_TRANSPORT_ATTR_RO(inst);
874 737
875static ssize_t target_stat_scsi_transport_show_attr_device( 738static ssize_t target_stat_transport_device_show(struct config_item *item,
876 struct se_port_stat_grps *pgrps, char *page) 739 char *page)
877{ 740{
878 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 741 struct se_lun *lun = to_transport_stat(item);
879 struct se_device *dev; 742 struct se_device *dev;
880 struct se_portal_group *tpg = lun->lun_tpg; 743 struct se_portal_group *tpg = lun->lun_tpg;
881 ssize_t ret = -ENODEV; 744 ssize_t ret = -ENODEV;
@@ -890,12 +753,11 @@ static ssize_t target_stat_scsi_transport_show_attr_device(
890 rcu_read_unlock(); 753 rcu_read_unlock();
891 return ret; 754 return ret;
892} 755}
893DEV_STAT_SCSI_TRANSPORT_ATTR_RO(device);
894 756
895static ssize_t target_stat_scsi_transport_show_attr_indx( 757static ssize_t target_stat_transport_indx_show(struct config_item *item,
896 struct se_port_stat_grps *pgrps, char *page) 758 char *page)
897{ 759{
898 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 760 struct se_lun *lun = to_transport_stat(item);
899 struct se_device *dev; 761 struct se_device *dev;
900 struct se_portal_group *tpg = lun->lun_tpg; 762 struct se_portal_group *tpg = lun->lun_tpg;
901 ssize_t ret = -ENODEV; 763 ssize_t ret = -ENODEV;
@@ -908,12 +770,11 @@ static ssize_t target_stat_scsi_transport_show_attr_indx(
908 rcu_read_unlock(); 770 rcu_read_unlock();
909 return ret; 771 return ret;
910} 772}
911DEV_STAT_SCSI_TRANSPORT_ATTR_RO(indx);
912 773
913static ssize_t target_stat_scsi_transport_show_attr_dev_name( 774static ssize_t target_stat_transport_dev_name_show(struct config_item *item,
914 struct se_port_stat_grps *pgrps, char *page) 775 char *page)
915{ 776{
916 struct se_lun *lun = container_of(pgrps, struct se_lun, port_stat_grps); 777 struct se_lun *lun = to_transport_stat(item);
917 struct se_device *dev; 778 struct se_device *dev;
918 struct se_portal_group *tpg = lun->lun_tpg; 779 struct se_portal_group *tpg = lun->lun_tpg;
919 struct t10_wwn *wwn; 780 struct t10_wwn *wwn;
@@ -932,26 +793,21 @@ static ssize_t target_stat_scsi_transport_show_attr_dev_name(
932 rcu_read_unlock(); 793 rcu_read_unlock();
933 return ret; 794 return ret;
934} 795}
935DEV_STAT_SCSI_TRANSPORT_ATTR_RO(dev_name);
936 796
937CONFIGFS_EATTR_OPS(target_stat_scsi_transport, se_port_stat_grps, 797CONFIGFS_ATTR_RO(target_stat_transport_, inst);
938 scsi_transport_group); 798CONFIGFS_ATTR_RO(target_stat_transport_, device);
799CONFIGFS_ATTR_RO(target_stat_transport_, indx);
800CONFIGFS_ATTR_RO(target_stat_transport_, dev_name);
939 801
940static struct configfs_attribute *target_stat_scsi_transport_attrs[] = { 802static struct configfs_attribute *target_stat_scsi_transport_attrs[] = {
941 &target_stat_scsi_transport_inst.attr, 803 &target_stat_transport_attr_inst,
942 &target_stat_scsi_transport_device.attr, 804 &target_stat_transport_attr_device,
943 &target_stat_scsi_transport_indx.attr, 805 &target_stat_transport_attr_indx,
944 &target_stat_scsi_transport_dev_name.attr, 806 &target_stat_transport_attr_dev_name,
945 NULL, 807 NULL,
946}; 808};
947 809
948static struct configfs_item_operations target_stat_scsi_transport_attrib_ops = {
949 .show_attribute = target_stat_scsi_transport_attr_show,
950 .store_attribute = target_stat_scsi_transport_attr_store,
951};
952
953static struct config_item_type target_stat_scsi_transport_cit = { 810static struct config_item_type target_stat_scsi_transport_cit = {
954 .ct_item_ops = &target_stat_scsi_transport_attrib_ops,
955 .ct_attrs = target_stat_scsi_transport_attrs, 811 .ct_attrs = target_stat_scsi_transport_attrs,
956 .ct_owner = THIS_MODULE, 812 .ct_owner = THIS_MODULE,
957}; 813};
@@ -981,25 +837,17 @@ void target_stat_setup_port_default_groups(struct se_lun *lun)
981 * SCSI Authorized Initiator Table 837 * SCSI Authorized Initiator Table
982 */ 838 */
983 839
984CONFIGFS_EATTR_STRUCT(target_stat_scsi_auth_intr, se_ml_stat_grps); 840static struct se_lun_acl *auth_to_lacl(struct config_item *item)
985#define DEV_STAT_SCSI_AUTH_INTR_ATTR(_name, _mode) \ 841{
986static struct target_stat_scsi_auth_intr_attribute \ 842 struct se_ml_stat_grps *lgrps = container_of(to_config_group(item),
987 target_stat_scsi_auth_intr_##_name = \ 843 struct se_ml_stat_grps, scsi_auth_intr_group);
988 __CONFIGFS_EATTR(_name, _mode, \ 844 return container_of(lgrps, struct se_lun_acl, ml_stat_grps);
989 target_stat_scsi_auth_intr_show_attr_##_name, \ 845}
990 target_stat_scsi_auth_intr_store_attr_##_name); 846
991 847static ssize_t target_stat_auth_inst_show(struct config_item *item,
992#define DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(_name) \ 848 char *page)
993static struct target_stat_scsi_auth_intr_attribute \ 849{
994 target_stat_scsi_auth_intr_##_name = \ 850 struct se_lun_acl *lacl = auth_to_lacl(item);
995 __CONFIGFS_EATTR_RO(_name, \
996 target_stat_scsi_auth_intr_show_attr_##_name);
997
998static ssize_t target_stat_scsi_auth_intr_show_attr_inst(
999 struct se_ml_stat_grps *lgrps, char *page)
1000{
1001 struct se_lun_acl *lacl = container_of(lgrps,
1002 struct se_lun_acl, ml_stat_grps);
1003 struct se_node_acl *nacl = lacl->se_lun_nacl; 851 struct se_node_acl *nacl = lacl->se_lun_nacl;
1004 struct se_dev_entry *deve; 852 struct se_dev_entry *deve;
1005 struct se_portal_group *tpg; 853 struct se_portal_group *tpg;
@@ -1018,13 +866,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_inst(
1018 rcu_read_unlock(); 866 rcu_read_unlock();
1019 return ret; 867 return ret;
1020} 868}
1021DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(inst);
1022 869
1023static ssize_t target_stat_scsi_auth_intr_show_attr_dev( 870static ssize_t target_stat_auth_dev_show(struct config_item *item,
1024 struct se_ml_stat_grps *lgrps, char *page) 871 char *page)
1025{ 872{
1026 struct se_lun_acl *lacl = container_of(lgrps, 873 struct se_lun_acl *lacl = auth_to_lacl(item);
1027 struct se_lun_acl, ml_stat_grps);
1028 struct se_node_acl *nacl = lacl->se_lun_nacl; 874 struct se_node_acl *nacl = lacl->se_lun_nacl;
1029 struct se_dev_entry *deve; 875 struct se_dev_entry *deve;
1030 struct se_lun *lun; 876 struct se_lun *lun;
@@ -1042,13 +888,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_dev(
1042 rcu_read_unlock(); 888 rcu_read_unlock();
1043 return ret; 889 return ret;
1044} 890}
1045DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(dev);
1046 891
1047static ssize_t target_stat_scsi_auth_intr_show_attr_port( 892static ssize_t target_stat_auth_port_show(struct config_item *item,
1048 struct se_ml_stat_grps *lgrps, char *page) 893 char *page)
1049{ 894{
1050 struct se_lun_acl *lacl = container_of(lgrps, 895 struct se_lun_acl *lacl = auth_to_lacl(item);
1051 struct se_lun_acl, ml_stat_grps);
1052 struct se_node_acl *nacl = lacl->se_lun_nacl; 896 struct se_node_acl *nacl = lacl->se_lun_nacl;
1053 struct se_dev_entry *deve; 897 struct se_dev_entry *deve;
1054 struct se_portal_group *tpg; 898 struct se_portal_group *tpg;
@@ -1066,13 +910,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_port(
1066 rcu_read_unlock(); 910 rcu_read_unlock();
1067 return ret; 911 return ret;
1068} 912}
1069DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(port);
1070 913
1071static ssize_t target_stat_scsi_auth_intr_show_attr_indx( 914static ssize_t target_stat_auth_indx_show(struct config_item *item,
1072 struct se_ml_stat_grps *lgrps, char *page) 915 char *page)
1073{ 916{
1074 struct se_lun_acl *lacl = container_of(lgrps, 917 struct se_lun_acl *lacl = auth_to_lacl(item);
1075 struct se_lun_acl, ml_stat_grps);
1076 struct se_node_acl *nacl = lacl->se_lun_nacl; 918 struct se_node_acl *nacl = lacl->se_lun_nacl;
1077 struct se_dev_entry *deve; 919 struct se_dev_entry *deve;
1078 ssize_t ret; 920 ssize_t ret;
@@ -1088,13 +930,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_indx(
1088 rcu_read_unlock(); 930 rcu_read_unlock();
1089 return ret; 931 return ret;
1090} 932}
1091DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(indx);
1092 933
1093static ssize_t target_stat_scsi_auth_intr_show_attr_dev_or_port( 934static ssize_t target_stat_auth_dev_or_port_show(struct config_item *item,
1094 struct se_ml_stat_grps *lgrps, char *page) 935 char *page)
1095{ 936{
1096 struct se_lun_acl *lacl = container_of(lgrps, 937 struct se_lun_acl *lacl = auth_to_lacl(item);
1097 struct se_lun_acl, ml_stat_grps);
1098 struct se_node_acl *nacl = lacl->se_lun_nacl; 938 struct se_node_acl *nacl = lacl->se_lun_nacl;
1099 struct se_dev_entry *deve; 939 struct se_dev_entry *deve;
1100 ssize_t ret; 940 ssize_t ret;
@@ -1110,13 +950,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_dev_or_port(
1110 rcu_read_unlock(); 950 rcu_read_unlock();
1111 return ret; 951 return ret;
1112} 952}
1113DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(dev_or_port);
1114 953
1115static ssize_t target_stat_scsi_auth_intr_show_attr_intr_name( 954static ssize_t target_stat_auth_intr_name_show(struct config_item *item,
1116 struct se_ml_stat_grps *lgrps, char *page) 955 char *page)
1117{ 956{
1118 struct se_lun_acl *lacl = container_of(lgrps, 957 struct se_lun_acl *lacl = auth_to_lacl(item);
1119 struct se_lun_acl, ml_stat_grps);
1120 struct se_node_acl *nacl = lacl->se_lun_nacl; 958 struct se_node_acl *nacl = lacl->se_lun_nacl;
1121 struct se_dev_entry *deve; 959 struct se_dev_entry *deve;
1122 ssize_t ret; 960 ssize_t ret;
@@ -1132,13 +970,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_intr_name(
1132 rcu_read_unlock(); 970 rcu_read_unlock();
1133 return ret; 971 return ret;
1134} 972}
1135DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(intr_name);
1136 973
1137static ssize_t target_stat_scsi_auth_intr_show_attr_map_indx( 974static ssize_t target_stat_auth_map_indx_show(struct config_item *item,
1138 struct se_ml_stat_grps *lgrps, char *page) 975 char *page)
1139{ 976{
1140 struct se_lun_acl *lacl = container_of(lgrps, 977 struct se_lun_acl *lacl = auth_to_lacl(item);
1141 struct se_lun_acl, ml_stat_grps);
1142 struct se_node_acl *nacl = lacl->se_lun_nacl; 978 struct se_node_acl *nacl = lacl->se_lun_nacl;
1143 struct se_dev_entry *deve; 979 struct se_dev_entry *deve;
1144 ssize_t ret; 980 ssize_t ret;
@@ -1154,13 +990,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_map_indx(
1154 rcu_read_unlock(); 990 rcu_read_unlock();
1155 return ret; 991 return ret;
1156} 992}
1157DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(map_indx);
1158 993
1159static ssize_t target_stat_scsi_auth_intr_show_attr_att_count( 994static ssize_t target_stat_auth_att_count_show(struct config_item *item,
1160 struct se_ml_stat_grps *lgrps, char *page) 995 char *page)
1161{ 996{
1162 struct se_lun_acl *lacl = container_of(lgrps, 997 struct se_lun_acl *lacl = auth_to_lacl(item);
1163 struct se_lun_acl, ml_stat_grps);
1164 struct se_node_acl *nacl = lacl->se_lun_nacl; 998 struct se_node_acl *nacl = lacl->se_lun_nacl;
1165 struct se_dev_entry *deve; 999 struct se_dev_entry *deve;
1166 ssize_t ret; 1000 ssize_t ret;
@@ -1176,13 +1010,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_att_count(
1176 rcu_read_unlock(); 1010 rcu_read_unlock();
1177 return ret; 1011 return ret;
1178} 1012}
1179DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(att_count);
1180 1013
1181static ssize_t target_stat_scsi_auth_intr_show_attr_num_cmds( 1014static ssize_t target_stat_auth_num_cmds_show(struct config_item *item,
1182 struct se_ml_stat_grps *lgrps, char *page) 1015 char *page)
1183{ 1016{
1184 struct se_lun_acl *lacl = container_of(lgrps, 1017 struct se_lun_acl *lacl = auth_to_lacl(item);
1185 struct se_lun_acl, ml_stat_grps);
1186 struct se_node_acl *nacl = lacl->se_lun_nacl; 1018 struct se_node_acl *nacl = lacl->se_lun_nacl;
1187 struct se_dev_entry *deve; 1019 struct se_dev_entry *deve;
1188 ssize_t ret; 1020 ssize_t ret;
@@ -1199,13 +1031,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_num_cmds(
1199 rcu_read_unlock(); 1031 rcu_read_unlock();
1200 return ret; 1032 return ret;
1201} 1033}
1202DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(num_cmds);
1203 1034
1204static ssize_t target_stat_scsi_auth_intr_show_attr_read_mbytes( 1035static ssize_t target_stat_auth_read_mbytes_show(struct config_item *item,
1205 struct se_ml_stat_grps *lgrps, char *page) 1036 char *page)
1206{ 1037{
1207 struct se_lun_acl *lacl = container_of(lgrps, 1038 struct se_lun_acl *lacl = auth_to_lacl(item);
1208 struct se_lun_acl, ml_stat_grps);
1209 struct se_node_acl *nacl = lacl->se_lun_nacl; 1039 struct se_node_acl *nacl = lacl->se_lun_nacl;
1210 struct se_dev_entry *deve; 1040 struct se_dev_entry *deve;
1211 ssize_t ret; 1041 ssize_t ret;
@@ -1222,13 +1052,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_read_mbytes(
1222 rcu_read_unlock(); 1052 rcu_read_unlock();
1223 return ret; 1053 return ret;
1224} 1054}
1225DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(read_mbytes);
1226 1055
1227static ssize_t target_stat_scsi_auth_intr_show_attr_write_mbytes( 1056static ssize_t target_stat_auth_write_mbytes_show(struct config_item *item,
1228 struct se_ml_stat_grps *lgrps, char *page) 1057 char *page)
1229{ 1058{
1230 struct se_lun_acl *lacl = container_of(lgrps, 1059 struct se_lun_acl *lacl = auth_to_lacl(item);
1231 struct se_lun_acl, ml_stat_grps);
1232 struct se_node_acl *nacl = lacl->se_lun_nacl; 1060 struct se_node_acl *nacl = lacl->se_lun_nacl;
1233 struct se_dev_entry *deve; 1061 struct se_dev_entry *deve;
1234 ssize_t ret; 1062 ssize_t ret;
@@ -1245,13 +1073,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_write_mbytes(
1245 rcu_read_unlock(); 1073 rcu_read_unlock();
1246 return ret; 1074 return ret;
1247} 1075}
1248DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(write_mbytes);
1249 1076
1250static ssize_t target_stat_scsi_auth_intr_show_attr_hs_num_cmds( 1077static ssize_t target_stat_auth_hs_num_cmds_show(struct config_item *item,
1251 struct se_ml_stat_grps *lgrps, char *page) 1078 char *page)
1252{ 1079{
1253 struct se_lun_acl *lacl = container_of(lgrps, 1080 struct se_lun_acl *lacl = auth_to_lacl(item);
1254 struct se_lun_acl, ml_stat_grps);
1255 struct se_node_acl *nacl = lacl->se_lun_nacl; 1081 struct se_node_acl *nacl = lacl->se_lun_nacl;
1256 struct se_dev_entry *deve; 1082 struct se_dev_entry *deve;
1257 ssize_t ret; 1083 ssize_t ret;
@@ -1267,13 +1093,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_hs_num_cmds(
1267 rcu_read_unlock(); 1093 rcu_read_unlock();
1268 return ret; 1094 return ret;
1269} 1095}
1270DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(hs_num_cmds);
1271 1096
1272static ssize_t target_stat_scsi_auth_intr_show_attr_creation_time( 1097static ssize_t target_stat_auth_creation_time_show(struct config_item *item,
1273 struct se_ml_stat_grps *lgrps, char *page) 1098 char *page)
1274{ 1099{
1275 struct se_lun_acl *lacl = container_of(lgrps, 1100 struct se_lun_acl *lacl = auth_to_lacl(item);
1276 struct se_lun_acl, ml_stat_grps);
1277 struct se_node_acl *nacl = lacl->se_lun_nacl; 1101 struct se_node_acl *nacl = lacl->se_lun_nacl;
1278 struct se_dev_entry *deve; 1102 struct se_dev_entry *deve;
1279 ssize_t ret; 1103 ssize_t ret;
@@ -1290,13 +1114,11 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_creation_time(
1290 rcu_read_unlock(); 1114 rcu_read_unlock();
1291 return ret; 1115 return ret;
1292} 1116}
1293DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(creation_time);
1294 1117
1295static ssize_t target_stat_scsi_auth_intr_show_attr_row_status( 1118static ssize_t target_stat_auth_row_status_show(struct config_item *item,
1296 struct se_ml_stat_grps *lgrps, char *page) 1119 char *page)
1297{ 1120{
1298 struct se_lun_acl *lacl = container_of(lgrps, 1121 struct se_lun_acl *lacl = auth_to_lacl(item);
1299 struct se_lun_acl, ml_stat_grps);
1300 struct se_node_acl *nacl = lacl->se_lun_nacl; 1122 struct se_node_acl *nacl = lacl->se_lun_nacl;
1301 struct se_dev_entry *deve; 1123 struct se_dev_entry *deve;
1302 ssize_t ret; 1124 ssize_t ret;
@@ -1312,36 +1134,41 @@ static ssize_t target_stat_scsi_auth_intr_show_attr_row_status(
1312 rcu_read_unlock(); 1134 rcu_read_unlock();
1313 return ret; 1135 return ret;
1314} 1136}
1315DEV_STAT_SCSI_AUTH_INTR_ATTR_RO(row_status);
1316 1137
1317CONFIGFS_EATTR_OPS(target_stat_scsi_auth_intr, se_ml_stat_grps, 1138CONFIGFS_ATTR_RO(target_stat_auth_, inst);
1318 scsi_auth_intr_group); 1139CONFIGFS_ATTR_RO(target_stat_auth_, dev);
1140CONFIGFS_ATTR_RO(target_stat_auth_, port);
1141CONFIGFS_ATTR_RO(target_stat_auth_, indx);
1142CONFIGFS_ATTR_RO(target_stat_auth_, dev_or_port);
1143CONFIGFS_ATTR_RO(target_stat_auth_, intr_name);
1144CONFIGFS_ATTR_RO(target_stat_auth_, map_indx);
1145CONFIGFS_ATTR_RO(target_stat_auth_, att_count);
1146CONFIGFS_ATTR_RO(target_stat_auth_, num_cmds);
1147CONFIGFS_ATTR_RO(target_stat_auth_, read_mbytes);
1148CONFIGFS_ATTR_RO(target_stat_auth_, write_mbytes);
1149CONFIGFS_ATTR_RO(target_stat_auth_, hs_num_cmds);
1150CONFIGFS_ATTR_RO(target_stat_auth_, creation_time);
1151CONFIGFS_ATTR_RO(target_stat_auth_, row_status);
1319 1152
1320static struct configfs_attribute *target_stat_scsi_auth_intr_attrs[] = { 1153static struct configfs_attribute *target_stat_scsi_auth_intr_attrs[] = {
1321 &target_stat_scsi_auth_intr_inst.attr, 1154 &target_stat_auth_attr_inst,
1322 &target_stat_scsi_auth_intr_dev.attr, 1155 &target_stat_auth_attr_dev,
1323 &target_stat_scsi_auth_intr_port.attr, 1156 &target_stat_auth_attr_port,
1324 &target_stat_scsi_auth_intr_indx.attr, 1157 &target_stat_auth_attr_indx,
1325 &target_stat_scsi_auth_intr_dev_or_port.attr, 1158 &target_stat_auth_attr_dev_or_port,
1326 &target_stat_scsi_auth_intr_intr_name.attr, 1159 &target_stat_auth_attr_intr_name,
1327 &target_stat_scsi_auth_intr_map_indx.attr, 1160 &target_stat_auth_attr_map_indx,
1328 &target_stat_scsi_auth_intr_att_count.attr, 1161 &target_stat_auth_attr_att_count,
1329 &target_stat_scsi_auth_intr_num_cmds.attr, 1162 &target_stat_auth_attr_num_cmds,
1330 &target_stat_scsi_auth_intr_read_mbytes.attr, 1163 &target_stat_auth_attr_read_mbytes,
1331 &target_stat_scsi_auth_intr_write_mbytes.attr, 1164 &target_stat_auth_attr_write_mbytes,
1332 &target_stat_scsi_auth_intr_hs_num_cmds.attr, 1165 &target_stat_auth_attr_hs_num_cmds,
1333 &target_stat_scsi_auth_intr_creation_time.attr, 1166 &target_stat_auth_attr_creation_time,
1334 &target_stat_scsi_auth_intr_row_status.attr, 1167 &target_stat_auth_attr_row_status,
1335 NULL, 1168 NULL,
1336}; 1169};
1337 1170
1338static struct configfs_item_operations target_stat_scsi_auth_intr_attrib_ops = {
1339 .show_attribute = target_stat_scsi_auth_intr_attr_show,
1340 .store_attribute = target_stat_scsi_auth_intr_attr_store,
1341};
1342
1343static struct config_item_type target_stat_scsi_auth_intr_cit = { 1171static struct config_item_type target_stat_scsi_auth_intr_cit = {
1344 .ct_item_ops = &target_stat_scsi_auth_intr_attrib_ops,
1345 .ct_attrs = target_stat_scsi_auth_intr_attrs, 1172 .ct_attrs = target_stat_scsi_auth_intr_attrs,
1346 .ct_owner = THIS_MODULE, 1173 .ct_owner = THIS_MODULE,
1347}; 1174};
@@ -1350,25 +1177,17 @@ static struct config_item_type target_stat_scsi_auth_intr_cit = {
1350 * SCSI Attached Initiator Port Table 1177 * SCSI Attached Initiator Port Table
1351 */ 1178 */
1352 1179
1353CONFIGFS_EATTR_STRUCT(target_stat_scsi_att_intr_port, se_ml_stat_grps); 1180static struct se_lun_acl *iport_to_lacl(struct config_item *item)
1354#define DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR(_name, _mode) \ 1181{
1355static struct target_stat_scsi_att_intr_port_attribute \ 1182 struct se_ml_stat_grps *lgrps = container_of(to_config_group(item),
1356 target_stat_scsi_att_intr_port_##_name = \ 1183 struct se_ml_stat_grps, scsi_att_intr_port_group);
1357 __CONFIGFS_EATTR(_name, _mode, \ 1184 return container_of(lgrps, struct se_lun_acl, ml_stat_grps);
1358 target_stat_scsi_att_intr_port_show_attr_##_name, \ 1185}
1359 target_stat_scsi_att_intr_port_store_attr_##_name); 1186
1360 1187static ssize_t target_stat_iport_inst_show(struct config_item *item,
1361#define DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(_name) \ 1188 char *page)
1362static struct target_stat_scsi_att_intr_port_attribute \ 1189{
1363 target_stat_scsi_att_intr_port_##_name = \ 1190 struct se_lun_acl *lacl = iport_to_lacl(item);
1364 __CONFIGFS_EATTR_RO(_name, \
1365 target_stat_scsi_att_intr_port_show_attr_##_name);
1366
1367static ssize_t target_stat_scsi_att_intr_port_show_attr_inst(
1368 struct se_ml_stat_grps *lgrps, char *page)
1369{
1370 struct se_lun_acl *lacl = container_of(lgrps,
1371 struct se_lun_acl, ml_stat_grps);
1372 struct se_node_acl *nacl = lacl->se_lun_nacl; 1191 struct se_node_acl *nacl = lacl->se_lun_nacl;
1373 struct se_dev_entry *deve; 1192 struct se_dev_entry *deve;
1374 struct se_portal_group *tpg; 1193 struct se_portal_group *tpg;
@@ -1387,13 +1206,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_inst(
1387 rcu_read_unlock(); 1206 rcu_read_unlock();
1388 return ret; 1207 return ret;
1389} 1208}
1390DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(inst);
1391 1209
1392static ssize_t target_stat_scsi_att_intr_port_show_attr_dev( 1210static ssize_t target_stat_iport_dev_show(struct config_item *item,
1393 struct se_ml_stat_grps *lgrps, char *page) 1211 char *page)
1394{ 1212{
1395 struct se_lun_acl *lacl = container_of(lgrps, 1213 struct se_lun_acl *lacl = iport_to_lacl(item);
1396 struct se_lun_acl, ml_stat_grps);
1397 struct se_node_acl *nacl = lacl->se_lun_nacl; 1214 struct se_node_acl *nacl = lacl->se_lun_nacl;
1398 struct se_dev_entry *deve; 1215 struct se_dev_entry *deve;
1399 struct se_lun *lun; 1216 struct se_lun *lun;
@@ -1411,13 +1228,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_dev(
1411 rcu_read_unlock(); 1228 rcu_read_unlock();
1412 return ret; 1229 return ret;
1413} 1230}
1414DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(dev);
1415 1231
1416static ssize_t target_stat_scsi_att_intr_port_show_attr_port( 1232static ssize_t target_stat_iport_port_show(struct config_item *item,
1417 struct se_ml_stat_grps *lgrps, char *page) 1233 char *page)
1418{ 1234{
1419 struct se_lun_acl *lacl = container_of(lgrps, 1235 struct se_lun_acl *lacl = iport_to_lacl(item);
1420 struct se_lun_acl, ml_stat_grps);
1421 struct se_node_acl *nacl = lacl->se_lun_nacl; 1236 struct se_node_acl *nacl = lacl->se_lun_nacl;
1422 struct se_dev_entry *deve; 1237 struct se_dev_entry *deve;
1423 struct se_portal_group *tpg; 1238 struct se_portal_group *tpg;
@@ -1435,13 +1250,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port(
1435 rcu_read_unlock(); 1250 rcu_read_unlock();
1436 return ret; 1251 return ret;
1437} 1252}
1438DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(port);
1439 1253
1440static ssize_t target_stat_scsi_att_intr_port_show_attr_indx( 1254static ssize_t target_stat_iport_indx_show(struct config_item *item,
1441 struct se_ml_stat_grps *lgrps, char *page) 1255 char *page)
1442{ 1256{
1443 struct se_lun_acl *lacl = container_of(lgrps, 1257 struct se_lun_acl *lacl = iport_to_lacl(item);
1444 struct se_lun_acl, ml_stat_grps);
1445 struct se_node_acl *nacl = lacl->se_lun_nacl; 1258 struct se_node_acl *nacl = lacl->se_lun_nacl;
1446 struct se_session *se_sess; 1259 struct se_session *se_sess;
1447 struct se_portal_group *tpg; 1260 struct se_portal_group *tpg;
@@ -1461,13 +1274,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_indx(
1461 spin_unlock_irq(&nacl->nacl_sess_lock); 1274 spin_unlock_irq(&nacl->nacl_sess_lock);
1462 return ret; 1275 return ret;
1463} 1276}
1464DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(indx);
1465 1277
1466static ssize_t target_stat_scsi_att_intr_port_show_attr_port_auth_indx( 1278static ssize_t target_stat_iport_port_auth_indx_show(struct config_item *item,
1467 struct se_ml_stat_grps *lgrps, char *page) 1279 char *page)
1468{ 1280{
1469 struct se_lun_acl *lacl = container_of(lgrps, 1281 struct se_lun_acl *lacl = iport_to_lacl(item);
1470 struct se_lun_acl, ml_stat_grps);
1471 struct se_node_acl *nacl = lacl->se_lun_nacl; 1282 struct se_node_acl *nacl = lacl->se_lun_nacl;
1472 struct se_dev_entry *deve; 1283 struct se_dev_entry *deve;
1473 ssize_t ret; 1284 ssize_t ret;
@@ -1483,13 +1294,11 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port_auth_indx(
1483 rcu_read_unlock(); 1294 rcu_read_unlock();
1484 return ret; 1295 return ret;
1485} 1296}
1486DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(port_auth_indx);
1487 1297
1488static ssize_t target_stat_scsi_att_intr_port_show_attr_port_ident( 1298static ssize_t target_stat_iport_port_ident_show(struct config_item *item,
1489 struct se_ml_stat_grps *lgrps, char *page) 1299 char *page)
1490{ 1300{
1491 struct se_lun_acl *lacl = container_of(lgrps, 1301 struct se_lun_acl *lacl = iport_to_lacl(item);
1492 struct se_lun_acl, ml_stat_grps);
1493 struct se_node_acl *nacl = lacl->se_lun_nacl; 1302 struct se_node_acl *nacl = lacl->se_lun_nacl;
1494 struct se_session *se_sess; 1303 struct se_session *se_sess;
1495 struct se_portal_group *tpg; 1304 struct se_portal_group *tpg;
@@ -1513,28 +1322,25 @@ static ssize_t target_stat_scsi_att_intr_port_show_attr_port_ident(
1513 spin_unlock_irq(&nacl->nacl_sess_lock); 1322 spin_unlock_irq(&nacl->nacl_sess_lock);
1514 return ret; 1323 return ret;
1515} 1324}
1516DEV_STAT_SCSI_ATTR_INTR_PORT_ATTR_RO(port_ident);
1517 1325
1518CONFIGFS_EATTR_OPS(target_stat_scsi_att_intr_port, se_ml_stat_grps, 1326CONFIGFS_ATTR_RO(target_stat_iport_, inst);
1519 scsi_att_intr_port_group); 1327CONFIGFS_ATTR_RO(target_stat_iport_, dev);
1328CONFIGFS_ATTR_RO(target_stat_iport_, port);
1329CONFIGFS_ATTR_RO(target_stat_iport_, indx);
1330CONFIGFS_ATTR_RO(target_stat_iport_, port_auth_indx);
1331CONFIGFS_ATTR_RO(target_stat_iport_, port_ident);
1520 1332
1521static struct configfs_attribute *target_stat_scsi_ath_intr_port_attrs[] = { 1333static struct configfs_attribute *target_stat_scsi_ath_intr_port_attrs[] = {
1522 &target_stat_scsi_att_intr_port_inst.attr, 1334 &target_stat_iport_attr_inst,
1523 &target_stat_scsi_att_intr_port_dev.attr, 1335 &target_stat_iport_attr_dev,
1524 &target_stat_scsi_att_intr_port_port.attr, 1336 &target_stat_iport_attr_port,
1525 &target_stat_scsi_att_intr_port_indx.attr, 1337 &target_stat_iport_attr_indx,
1526 &target_stat_scsi_att_intr_port_port_auth_indx.attr, 1338 &target_stat_iport_attr_port_auth_indx,
1527 &target_stat_scsi_att_intr_port_port_ident.attr, 1339 &target_stat_iport_attr_port_ident,
1528 NULL, 1340 NULL,
1529}; 1341};
1530 1342
1531static struct configfs_item_operations target_stat_scsi_att_intr_port_attrib_ops = {
1532 .show_attribute = target_stat_scsi_att_intr_port_attr_show,
1533 .store_attribute = target_stat_scsi_att_intr_port_attr_store,
1534};
1535
1536static struct config_item_type target_stat_scsi_att_intr_port_cit = { 1343static struct config_item_type target_stat_scsi_att_intr_port_cit = {
1537 .ct_item_ops = &target_stat_scsi_att_intr_port_attrib_ops,
1538 .ct_attrs = target_stat_scsi_ath_intr_port_attrs, 1344 .ct_attrs = target_stat_scsi_ath_intr_port_attrs,
1539 .ct_owner = THIS_MODULE, 1345 .ct_owner = THIS_MODULE,
1540}; 1346};
diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c
index aa3caca8bace..064d6dfb5b6d 100644
--- a/drivers/target/tcm_fc/tfc_cmd.c
+++ b/drivers/target/tcm_fc/tfc_cmd.c
@@ -36,7 +36,6 @@
36 36
37#include <target/target_core_base.h> 37#include <target/target_core_base.h>
38#include <target/target_core_fabric.h> 38#include <target/target_core_fabric.h>
39#include <target/configfs_macros.h>
40 39
41#include "tcm_fc.h" 40#include "tcm_fc.h"
42 41
diff --git a/drivers/target/tcm_fc/tfc_conf.c b/drivers/target/tcm_fc/tfc_conf.c
index 16670933013b..85aeaa0ad303 100644
--- a/drivers/target/tcm_fc/tfc_conf.c
+++ b/drivers/target/tcm_fc/tfc_conf.c
@@ -38,8 +38,6 @@
38 38
39#include <target/target_core_base.h> 39#include <target/target_core_base.h>
40#include <target/target_core_fabric.h> 40#include <target/target_core_fabric.h>
41#include <target/target_core_fabric_configfs.h>
42#include <target/configfs_macros.h>
43 41
44#include "tcm_fc.h" 42#include "tcm_fc.h"
45 43
@@ -131,55 +129,51 @@ static ssize_t ft_wwn_store(void *arg, const char *buf, size_t len)
131 * ACL auth ops. 129 * ACL auth ops.
132 */ 130 */
133 131
134static ssize_t ft_nacl_show_port_name( 132static ssize_t ft_nacl_port_name_show(struct config_item *item, char *page)
135 struct se_node_acl *se_nacl,
136 char *page)
137{ 133{
134 struct se_node_acl *se_nacl = acl_to_nacl(item);
138 struct ft_node_acl *acl = container_of(se_nacl, 135 struct ft_node_acl *acl = container_of(se_nacl,
139 struct ft_node_acl, se_node_acl); 136 struct ft_node_acl, se_node_acl);
140 137
141 return ft_wwn_show(&acl->node_auth.port_name, page); 138 return ft_wwn_show(&acl->node_auth.port_name, page);
142} 139}
143 140
144static ssize_t ft_nacl_store_port_name( 141static ssize_t ft_nacl_port_name_store(struct config_item *item,
145 struct se_node_acl *se_nacl, 142 const char *page, size_t count)
146 const char *page,
147 size_t count)
148{ 143{
144 struct se_node_acl *se_nacl = acl_to_nacl(item);
149 struct ft_node_acl *acl = container_of(se_nacl, 145 struct ft_node_acl *acl = container_of(se_nacl,
150 struct ft_node_acl, se_node_acl); 146 struct ft_node_acl, se_node_acl);
151 147
152 return ft_wwn_store(&acl->node_auth.port_name, page, count); 148 return ft_wwn_store(&acl->node_auth.port_name, page, count);
153} 149}
154 150
155TF_NACL_BASE_ATTR(ft, port_name, S_IRUGO | S_IWUSR); 151static ssize_t ft_nacl_node_name_show(struct config_item *item,
156 152 char *page)
157static ssize_t ft_nacl_show_node_name(
158 struct se_node_acl *se_nacl,
159 char *page)
160{ 153{
154 struct se_node_acl *se_nacl = acl_to_nacl(item);
161 struct ft_node_acl *acl = container_of(se_nacl, 155 struct ft_node_acl *acl = container_of(se_nacl,
162 struct ft_node_acl, se_node_acl); 156 struct ft_node_acl, se_node_acl);
163 157
164 return ft_wwn_show(&acl->node_auth.node_name, page); 158 return ft_wwn_show(&acl->node_auth.node_name, page);
165} 159}
166 160
167static ssize_t ft_nacl_store_node_name( 161static ssize_t ft_nacl_node_name_store(struct config_item *item,
168 struct se_node_acl *se_nacl, 162 const char *page, size_t count)
169 const char *page,
170 size_t count)
171{ 163{
164 struct se_node_acl *se_nacl = acl_to_nacl(item);
172 struct ft_node_acl *acl = container_of(se_nacl, 165 struct ft_node_acl *acl = container_of(se_nacl,
173 struct ft_node_acl, se_node_acl); 166 struct ft_node_acl, se_node_acl);
174 167
175 return ft_wwn_store(&acl->node_auth.node_name, page, count); 168 return ft_wwn_store(&acl->node_auth.node_name, page, count);
176} 169}
177 170
178TF_NACL_BASE_ATTR(ft, node_name, S_IRUGO | S_IWUSR); 171CONFIGFS_ATTR(ft_nacl_, node_name);
172CONFIGFS_ATTR(ft_nacl_, port_name);
179 173
180static struct configfs_attribute *ft_nacl_base_attrs[] = { 174static struct configfs_attribute *ft_nacl_base_attrs[] = {
181 &ft_nacl_port_name.attr, 175 &ft_nacl_attr_port_name,
182 &ft_nacl_node_name.attr, 176 &ft_nacl_attr_node_name,
183 NULL, 177 NULL,
184}; 178};
185 179
@@ -386,18 +380,16 @@ static void ft_del_wwn(struct se_wwn *wwn)
386 kfree(ft_wwn); 380 kfree(ft_wwn);
387} 381}
388 382
389static ssize_t ft_wwn_show_attr_version( 383static ssize_t ft_wwn_version_show(struct config_item *item, char *page)
390 struct target_fabric_configfs *tf,
391 char *page)
392{ 384{
393 return sprintf(page, "TCM FC " FT_VERSION " on %s/%s on " 385 return sprintf(page, "TCM FC " FT_VERSION " on %s/%s on "
394 ""UTS_RELEASE"\n", utsname()->sysname, utsname()->machine); 386 ""UTS_RELEASE"\n", utsname()->sysname, utsname()->machine);
395} 387}
396 388
397TF_WWN_ATTR_RO(ft, version); 389CONFIGFS_ATTR_RO(ft_wwn_, version);
398 390
399static struct configfs_attribute *ft_wwn_attrs[] = { 391static struct configfs_attribute *ft_wwn_attrs[] = {
400 &ft_wwn_version.attr, 392 &ft_wwn_attr_version,
401 NULL, 393 NULL,
402}; 394};
403 395
diff --git a/drivers/target/tcm_fc/tfc_io.c b/drivers/target/tcm_fc/tfc_io.c
index 4b0fedd6bd4b..847c1aa6fbf4 100644
--- a/drivers/target/tcm_fc/tfc_io.c
+++ b/drivers/target/tcm_fc/tfc_io.c
@@ -44,7 +44,6 @@
44 44
45#include <target/target_core_base.h> 45#include <target/target_core_base.h>
46#include <target/target_core_fabric.h> 46#include <target/target_core_fabric.h>
47#include <target/configfs_macros.h>
48 47
49#include "tcm_fc.h" 48#include "tcm_fc.h"
50 49
diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c
index 31a9e3fb98c5..7b934eac995d 100644
--- a/drivers/target/tcm_fc/tfc_sess.c
+++ b/drivers/target/tcm_fc/tfc_sess.c
@@ -36,7 +36,6 @@
36 36
37#include <target/target_core_base.h> 37#include <target/target_core_base.h>
38#include <target/target_core_fabric.h> 38#include <target/target_core_fabric.h>
39#include <target/configfs_macros.h>
40 39
41#include "tcm_fc.h" 40#include "tcm_fc.h"
42 41