From nobody Tue Jan 24 22:12:11 2023 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4P1h632hPYz3bftN; Tue, 24 Jan 2023 22:12:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4P1h631stvz4Qkl; Tue, 24 Jan 2023 22:12:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1674598331; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=W3AKTXwHUANbzzypBobioteliQpbzKyUR9O+pqRIVRY=; b=nUSp3X5D6UgVeb9aQJq5qQbhhR7Nw6iqpm18za3OK36LT7qM69uBUdeYBY/UMWYp8wniX6 T9MHJ6g7BMwMBUZUC/Kpl6Y/FUOqDFcKP21VNTbzfLO5GO0YLcv+ObOCSHKXWxzEx5c7C8 rAjCI+wDWsEtK133Zvt1l6g5mc412VE01D6WEpAxGpyV+CMRlgX0IXb5NZNmLAfycE10Jp 8YN0OFIS27C1urnMUJ7gHaT7QWVRXzIQ8t0Htk1B45KC1lom3a9vjmyr3S7qo/+DisRziH /srGDjm8G8226YaSB1PjKU7WNxsXcAdaqzOFuaS/52FDzS4Nvb+PNIu0GU7UYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1674598331; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=W3AKTXwHUANbzzypBobioteliQpbzKyUR9O+pqRIVRY=; b=HuVydLpSLB40nHzPg+BK3zmbt7AorvH8qdm4B4Sc4M+uRS00uVc8OE9kba+/VJsjJtCNUA +7oRAdkGnv44htS01RhTiYygXVe/ILUFuRePcZYaBBSD/+8XsMRVULPEEpEBVIbyb7YPLe V++877R6oTFCmQXu7v+mm3/TH6nVq8U14Y/g+zQWTf0Fxqud7Ez7hsb4LtgOMfpD224siR +moFZSMDwBgLuM+7tcpPGpq7SPXhCMTTXrnygzIWhvZJCjwwsG4PmPKjzyf6aes4RGq/CL fODC2wWgKwFX7p63iL46Qfg4q5NfU8DQzdBDAaTlxrug247tja7L+JhIJTg/VA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1674598331; a=rsa-sha256; cv=none; b=YY32IrxRG/nR5Yjjo3Mj4ZSNyUz5jpYGDQkYbo1em/jgkKqLHljlVtBpB6ww/+ZRfMqGLt PsHWjCHuBo8odF3htmwZHNGPSDXwiPJqcZ0aG0KftP2GrSmE6c2uKaAzvX5K6gdZLTIhiV pksr8KlxHtIqxrunzw832tdEXZ8NIja8xQw1Aqgoc4PYE5TmRnlOwZaJaTxAR2AfO7V25b +H4ckDPtn584VmW/zWoEkXJm5u3fCzHobH6aGoo5jdCl16InktWq0FwvOcLgOGl/QjVARJ TsWQBTsunqPzjaTffGRWwTYBJuKhACyDuQVteewM6ie18wThjwRD8NbY2IXhYA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4P1h630kTgzQf7; Tue, 24 Jan 2023 22:12:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 30OMCBWT086672; Tue, 24 Jan 2023 22:12:11 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 30OMCBkE086671; Tue, 24 Jan 2023 22:12:11 GMT (envelope-from git) Date: Tue, 24 Jan 2023 22:12:11 GMT Message-Id: <202301242212.30OMCBkE086671@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Warner Losh Subject: git: 03c44354fc9e - stable/13 - loader: zfs reader should only store devdesc in f_devdata List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 03c44354fc9e82f89d6e323d5f20ab953854812d Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=03c44354fc9e82f89d6e323d5f20ab953854812d commit 03c44354fc9e82f89d6e323d5f20ab953854812d Author: Toomas Soome AuthorDate: 2022-08-14 21:49:50 +0000 Commit: Warner Losh CommitDate: 2023-01-24 21:49:32 +0000 loader: zfs reader should only store devdesc in f_devdata Use d_opendata for device specific data. PR: 265825 Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D36202 (cherry picked from commit d98de7440507aea1648c8f4bc302bf88c0eb9458) --- stand/libsa/zfs/zfs.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/stand/libsa/zfs/zfs.c b/stand/libsa/zfs/zfs.c index b525858ffc3c..bee243352f78 100644 --- a/stand/libsa/zfs/zfs.c +++ b/stand/libsa/zfs/zfs.c @@ -108,7 +108,8 @@ struct zfs_be_entry { static int zfs_open(const char *upath, struct open_file *f) { - struct zfsmount *mount = (struct zfsmount *)f->f_devdata; + struct devdesc *dev = f->f_devdata; + struct zfsmount *mount = dev->d_opendata; struct file *fp; int rc; @@ -149,7 +150,8 @@ zfs_close(struct open_file *f) static int zfs_read(struct open_file *f, void *start, size_t size, size_t *resid /* out */) { - const spa_t *spa = ((struct zfsmount *)f->f_devdata)->spa; + struct devdesc *dev = f->f_devdata; + const spa_t *spa = ((struct zfsmount *)dev->d_opendata)->spa; struct file *fp = (struct file *)f->f_fsdata; struct stat sb; size_t n; @@ -213,7 +215,8 @@ zfs_seek(struct open_file *f, off_t offset, int where) static int zfs_stat(struct open_file *f, struct stat *sb) { - const spa_t *spa = ((struct zfsmount *)f->f_devdata)->spa; + struct devdesc *dev = f->f_devdata; + const spa_t *spa = ((struct zfsmount *)dev->d_opendata)->spa; struct file *fp = (struct file *)f->f_fsdata; return (zfs_dnode_stat(spa, &fp->f_dnode, sb)); @@ -222,7 +225,8 @@ zfs_stat(struct open_file *f, struct stat *sb) static int zfs_readdir(struct open_file *f, struct dirent *d) { - const spa_t *spa = ((struct zfsmount *)f->f_devdata)->spa; + struct devdesc *dev = f->f_devdata; + const spa_t *spa = ((struct zfsmount *)dev->d_opendata)->spa; struct file *fp = (struct file *)f->f_fsdata; mzap_ent_phys_t mze; struct stat sb; @@ -1586,8 +1590,7 @@ zfs_dev_open(struct open_file *f, ...) rv = zfs_mount(devformat(&dev->dd), NULL, (void **)&mount); if (rv == 0) { - f->f_devdata = mount; - free(dev); + dev->dd.d_opendata = mount; } return (rv); } @@ -1595,25 +1598,18 @@ zfs_dev_open(struct open_file *f, ...) static int zfs_dev_close(struct open_file *f) { + struct devdesc *dev; struct zfsmount *mnt, *mount; - mnt = f->f_devdata; + dev = f->f_devdata; + mnt = dev->d_opendata; STAILQ_FOREACH(mount, &zfsmount, next) { if (mnt->spa->spa_guid == mount->spa->spa_guid) break; } - /* - * devclose() will free f->f_devdata, but since we do have - * pointer to zfsmount structure in f->f_devdata, and - * zfs_unmount() will also free the zfsmount structure, - * we will get double free. To prevent double free, - * we must set f_devdata to NULL there. - */ - if (mount != NULL) - f->f_devdata = NULL; - + /* XXX */ return (0); }