]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: target: Simplify target_lu_gp_members_show()
authorBart Van Assche <bvanassche@acm.org>
Mon, 27 Oct 2025 18:46:39 +0000 (11:46 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 3 Nov 2025 02:47:29 +0000 (21:47 -0500)
Remove the stack buffer 'buf'. This patch does not modify the output
produced by target_lu_gp_members_show().

An example of the output that is produced with this patch applied:

$ cat /sys/kernel/config/target/core/alua/lu_gps/default_lu_gp/members
fileio_0/vdev0
fileio_1/vdev1
iblock_0/vdev2
$ od -c /sys/kernel/config/target/core/alua/lu_gps/default_lu_gp/members
0000000   f   i   l   e   i   o   _   0   /   v   d   e   v   0  \n   f
0000020   i   l   e   i   o   _   1   /   v   d   e   v   1  \n   i   b
0000040   l   o   c   k   _   0   /   v   d   e   v   2  \n
0000055

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://patch.msgid.link/20251027184639.3501254-3-bvanassche@acm.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_configfs.c

index 7e63bc71b3555709e1385bf9a5b5c7233988daee..77da1fc82b8d61fdf1cad5fbe236a4116389e74a 100644 (file)
@@ -2773,32 +2773,24 @@ static ssize_t target_lu_gp_lu_gp_id_store(struct config_item *item,
 static ssize_t target_lu_gp_members_show(struct config_item *item, char *page)
 {
        struct t10_alua_lu_gp *lu_gp = to_lu_gp(item);
-       struct se_device *dev;
-       struct se_hba *hba;
        struct t10_alua_lu_gp_member *lu_gp_mem;
-       ssize_t len = 0, cur_len;
-       unsigned char buf[LU_GROUP_NAME_BUF] = { };
+       const char *const end = page + PAGE_SIZE;
+       char *cur = page;
 
        spin_lock(&lu_gp->lu_gp_lock);
        list_for_each_entry(lu_gp_mem, &lu_gp->lu_gp_mem_list, lu_gp_mem_list) {
-               dev = lu_gp_mem->lu_gp_mem_dev;
-               hba = dev->se_hba;
+               struct se_device *dev = lu_gp_mem->lu_gp_mem_dev;
+               struct se_hba *hba = dev->se_hba;
 
-               cur_len = snprintf(buf, LU_GROUP_NAME_BUF, "%s/%s\n",
+               cur += scnprintf(cur, end - cur, "%s/%s\n",
                        config_item_name(&hba->hba_group.cg_item),
                        config_item_name(&dev->dev_group.cg_item));
-
-               if ((cur_len + len) > PAGE_SIZE || cur_len > LU_GROUP_NAME_BUF) {
-                       pr_warn("Ran out of lu_gp_show_attr"
-                               "_members buffer\n");
+               if (WARN_ON_ONCE(cur >= end))
                        break;
-               }
-               memcpy(page+len, buf, cur_len);
-               len += cur_len;
        }
        spin_unlock(&lu_gp->lu_gp_lock);
 
-       return len;
+       return cur - page;
 }
 
 CONFIGFS_ATTR(target_lu_gp_, lu_gp_id);