From: "Darrick J. Wong" <djwong@kernel.org>
To: djwong@kernel.org
Cc: allison.henderson@oracle.com, linux-xfs@vger.kernel.org
Subject: [PATCH 4/7] libfrog: return positive errno in pptrs.c
Date: Thu, 16 Mar 2023 12:29:48 -0700 [thread overview]
Message-ID: <167899416122.16628.10916393155125095333.stgit@frogsfrogsfrogs> (raw)
In-Reply-To: <167899416068.16628.8907331389138892555.stgit@frogsfrogsfrogs>
From: Darrick J. Wong <djwong@kernel.org>
Make all the functions in here return 0 for success or positive errno.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
io/parent.c | 12 +++-----
libfrog/paths.c | 11 +++++--
libfrog/pptrs.c | 81 +++++++++++++++++++++++++++++++++----------------------
libfrog/pptrs.h | 6 +---
4 files changed, 62 insertions(+), 48 deletions(-)
diff --git a/io/parent.c b/io/parent.c
index f5ebb40e4..6c0d81c12 100644
--- a/io/parent.c
+++ b/io/parent.c
@@ -68,7 +68,7 @@ print_parents(
else
ret = fd_walk_pptrs(file->fd, pptr_print, args);
if (ret)
- perror(file->name);
+ fprintf(stderr, "%s: %s\n", file->name, strerror(ret));
return 0;
}
@@ -106,14 +106,12 @@ path_print(
}
ret = snprintf(buf, len, "%s", mntpt);
- if (ret != strlen(mntpt)) {
- errno = ENOMEM;
- return -1;
- }
+ if (ret != strlen(mntpt))
+ return ENAMETOOLONG;
ret = path_list_to_string(path, buf + ret, len - ret);
if (ret < 0)
- return ret;
+ return ENAMETOOLONG;
printf("%s\n", buf);
return 0;
@@ -132,7 +130,7 @@ print_paths(
else
ret = fd_walk_ppaths(file->fd, path_print, args);
if (ret)
- perror(file->name);
+ fprintf(stderr, "%s: %s\n", file->name, strerror(ret));
return 0;
}
diff --git a/libfrog/paths.c b/libfrog/paths.c
index e541e2007..cc43b02c4 100644
--- a/libfrog/paths.c
+++ b/libfrog/paths.c
@@ -608,7 +608,7 @@ path_component_free(
free(pc);
}
-/* Change a path component's filename. */
+/* Change a path component's filename or returns positive errno. */
int
path_component_change(
struct path_component *pc,
@@ -620,7 +620,7 @@ path_component_change(
p = realloc(pc->pc_fname, namelen + 1);
if (!p)
- return -1;
+ return errno;
pc->pc_fname = p;
memcpy(pc->pc_fname, name, namelen);
pc->pc_fname[namelen] = 0;
@@ -628,7 +628,7 @@ path_component_change(
return 0;
}
-/* Initialize a pathname. */
+/* Initialize a pathname or returns positive errno. */
struct path_list *
path_list_init(void)
{
@@ -683,7 +683,10 @@ path_list_del_component(
list_del_init(&pc->pc_list);
}
-/* Convert a pathname into a string. */
+/*
+ * Convert a pathname into a string or returns -1 if the buffer isn't long
+ * enough.
+ */
ssize_t
path_list_to_string(
struct path_list *path,
diff --git a/libfrog/pptrs.c b/libfrog/pptrs.c
index 6a4f60cf6..ac7fcea28 100644
--- a/libfrog/pptrs.c
+++ b/libfrog/pptrs.c
@@ -25,7 +25,10 @@ alloc_pptr_buf(
return pi;
}
-/* Walk all parents of the given file handle. */
+/*
+ * Walk all parents of the given file handle. Returns 0 on success or positive
+ * errno.
+ */
static int
handle_walk_parents(
int fd,
@@ -40,7 +43,7 @@ handle_walk_parents(
pi = alloc_pptr_buf(XFS_XATTR_LIST_MAX);
if (!pi)
- return -1;
+ return errno;
if (handle) {
memcpy(&pi->pi_handle, handle, sizeof(struct xfs_handle));
@@ -51,7 +54,7 @@ handle_walk_parents(
while (!ret) {
if (pi->pi_flags & XFS_PPTR_OFLAG_ROOT) {
ret = fn(pi, NULL, arg);
- break;
+ goto out_pi;
}
for (i = 0; i < pi->pi_count; i++) {
@@ -66,13 +69,15 @@ handle_walk_parents(
ret = ioctl(fd, XFS_IOC_GETPARENTS, pi);
}
+ if (ret)
+ ret = errno;
out_pi:
free(pi);
return ret;
}
-/* Walk all parent pointers of this handle. */
+/* Walk all parent pointers of this handle. Returns 0 or positive errno. */
int
handle_walk_pptrs(
void *hanp,
@@ -83,19 +88,17 @@ handle_walk_pptrs(
char *mntpt;
int fd;
- if (hlen != sizeof(struct xfs_handle)) {
- errno = EINVAL;
- return -1;
- }
+ if (hlen != sizeof(struct xfs_handle))
+ return EINVAL;
fd = handle_to_fsfd(hanp, &mntpt);
if (fd < 0)
- return -1;
+ return errno;
return handle_walk_parents(fd, hanp, fn, arg);
}
-/* Walk all parent pointers of this fd. */
+/* Walk all parent pointers of this fd. Returns 0 or positive errno. */
int
fd_walk_pptrs(
int fd,
@@ -157,6 +160,7 @@ handle_walk_parent_path_ptr(
/*
* Recursively walk all parents of the given file handle; if we hit the
* fs root then we call the associated function with the constructed path.
+ * Returns 0 for success or positive errno.
*/
static int
handle_walk_parent_paths(
@@ -168,11 +172,12 @@ handle_walk_parent_paths(
wpli = malloc(sizeof(struct walk_ppath_level_info));
if (!wpli)
- return -1;
+ return errno;
wpli->pc = path_component_init("", 0);
if (!wpli->pc) {
+ ret = errno;
free(wpli);
- return -1;
+ return ret;
}
wpli->wpi = wpi;
memcpy(&wpli->newhandle, handle, sizeof(struct xfs_handle));
@@ -187,7 +192,7 @@ handle_walk_parent_paths(
/*
* Call the given function on all known paths from the vfs root to the inode
- * described in the handle.
+ * described in the handle. Returns 0 for success or positive errno.
*/
int
handle_walk_ppaths(
@@ -199,17 +204,15 @@ handle_walk_ppaths(
struct walk_ppaths_info wpi;
ssize_t ret;
- if (hlen != sizeof(struct xfs_handle)) {
- errno = EINVAL;
- return -1;
- }
+ if (hlen != sizeof(struct xfs_handle))
+ return EINVAL;
wpi.fd = handle_to_fsfd(hanp, &wpi.mntpt);
if (wpi.fd < 0)
- return -1;
+ return errno;
wpi.path = path_list_init();
if (!wpi.path)
- return -1;
+ return errno;
wpi.fn = fn;
wpi.arg = arg;
@@ -221,7 +224,7 @@ handle_walk_ppaths(
/*
* Call the given function on all known paths from the vfs root to the inode
- * referred to by the file description.
+ * referred to by the file description. Returns 0 or positive errno.
*/
int
fd_walk_ppaths(
@@ -237,15 +240,15 @@ fd_walk_ppaths(
ret = fd_to_handle(fd, &hanp, &hlen);
if (ret)
- return ret;
+ return errno;
fsfd = handle_to_fsfd(hanp, &wpi.mntpt);
if (fsfd < 0)
- return -1;
+ return errno;
wpi.fd = fd;
wpi.path = path_list_init();
if (!wpi.path)
- return -1;
+ return errno;
wpi.fn = fn;
wpi.arg = arg;
@@ -271,19 +274,20 @@ handle_to_path_walk(
int ret;
ret = snprintf(pwi->buf, pwi->len, "%s", mntpt);
- if (ret != strlen(mntpt)) {
- errno = ENOMEM;
- return -1;
- }
+ if (ret != strlen(mntpt))
+ return ENAMETOOLONG;
ret = path_list_to_string(path, pwi->buf + ret, pwi->len - ret);
if (ret < 0)
- return ret;
+ return ENAMETOOLONG;
- return WALK_PPATHS_ABORT;
+ return ECANCELED;
}
-/* Return any eligible path to this file handle. */
+/*
+ * Return any eligible path to this file handle. Returns 0 for success or
+ * positive errno.
+ */
int
handle_to_path(
void *hanp,
@@ -292,13 +296,20 @@ handle_to_path(
size_t pathlen)
{
struct path_walk_info pwi;
+ int ret;
pwi.buf = path;
pwi.len = pathlen;
- return handle_walk_ppaths(hanp, hlen, handle_to_path_walk, &pwi);
+ ret = handle_walk_ppaths(hanp, hlen, handle_to_path_walk, &pwi);
+ if (ret == ECANCELED)
+ return 0;
+ return ret;
}
-/* Return any eligible path to this file description. */
+/*
+ * Return any eligible path to this file description. Returns 0 for success
+ * or positive errno.
+ */
int
fd_to_path(
int fd,
@@ -306,8 +317,12 @@ fd_to_path(
size_t pathlen)
{
struct path_walk_info pwi;
+ int ret;
pwi.buf = path;
pwi.len = pathlen;
- return fd_walk_ppaths(fd, handle_to_path_walk, &pwi);
+ ret = fd_walk_ppaths(fd, handle_to_path_walk, &pwi);
+ if (ret == ECANCELED)
+ return 0;
+ return ret;
}
diff --git a/libfrog/pptrs.h b/libfrog/pptrs.h
index d174aa2a5..1666de060 100644
--- a/libfrog/pptrs.h
+++ b/libfrog/pptrs.h
@@ -8,16 +8,14 @@
struct path_list;
-typedef int (*walk_pptr_fn)(struct xfs_pptr_info *pi, struct xfs_parent_ptr *pptr,
- void *arg);
+typedef int (*walk_pptr_fn)(struct xfs_pptr_info *pi,
+ struct xfs_parent_ptr *pptr, void *arg);
typedef int (*walk_ppath_fn)(const char *mntpt, struct path_list *path,
void *arg);
-#define WALK_PPTRS_ABORT 1
int fd_walk_pptrs(int fd, walk_pptr_fn fn, void *arg);
int handle_walk_pptrs(void *hanp, size_t hanlen, walk_pptr_fn fn, void *arg);
-#define WALK_PPATHS_ABORT 1
int fd_walk_ppaths(int fd, walk_ppath_fn fn, void *arg);
int handle_walk_ppaths(void *hanp, size_t hanlen, walk_ppath_fn fn, void *arg);
next prev parent reply other threads:[~2023-03-16 19:30 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-16 18:54 [RFC DELUGE v10r1d2] xfs: Parent Pointers Darrick J. Wong
2023-03-16 19:17 ` [PATCHSET v10r1d2 0/7] xfs: bug fixes for parent pointers Darrick J. Wong
2023-03-16 19:19 ` [PATCH 1/7] xfs: validate parent pointer xattrs in getparent Darrick J. Wong
2023-03-16 19:20 ` [PATCH 2/7] xfs: rename xfs_pptr_info to xfs_getparents Darrick J. Wong
2023-03-16 19:20 ` [PATCH 3/7] xfs: rename xfs_parent_ptr Darrick J. Wong
2023-03-16 19:20 ` [PATCH 4/7] xfs: fix GETPARENTS ioctl Darrick J. Wong
2023-03-16 19:20 ` [PATCH 5/7] xfs: add tracing to the " Darrick J. Wong
2023-03-16 19:21 ` [PATCH 6/7] xfs: shorten parent pointer function names Darrick J. Wong
2023-03-16 19:21 ` [PATCH 7/7] xfs: rearrange bits of the parent pointer apis for fsck Darrick J. Wong
2023-03-16 19:17 ` [PATCHSET v10r1d2 00/17] xfs: encode parent pointer name in xattr key Darrick J. Wong
2023-03-16 19:21 ` [PATCH 01/17] xfs: document the ri_total validation in xlog_recover_attri_commit_pass2 Darrick J. Wong
2023-03-16 19:22 ` [PATCH 02/17] xfs: make xfs_attr_set require XFS_DA_OP_REMOVE Darrick J. Wong
2023-03-16 19:22 ` [PATCH 03/17] xfs: allow xattr matching on value for local/sf attrs Darrick J. Wong
2023-03-16 19:22 ` [PATCH 04/17] xfs: preserve VLOOKUP in xfs_attr_set Darrick J. Wong
2023-03-16 19:22 ` [PATCH 05/17] xfs: restructure xfs_attr_complete_op a bit Darrick J. Wong
2023-03-16 19:23 ` [PATCH 06/17] xfs: use helpers to extract xattr op from opflags Darrick J. Wong
2023-03-16 19:23 ` [PATCH 07/17] xfs: validate recovered name buffers when recovering xattr items Darrick J. Wong
2023-03-16 19:23 ` [PATCH 08/17] xfs: always set args->value in xfs_attri_item_recover Darrick J. Wong
2023-03-16 19:23 ` [PATCH 09/17] xfs: flip nvreplace detection in xfs_attr_complete_op Darrick J. Wong
2023-03-16 19:24 ` [PATCH 10/17] xfs: log VLOOKUP xattr removal operations Darrick J. Wong
2023-03-16 19:24 ` [PATCH 11/17] xfs: log VLOOKUP xattr setting operations Darrick J. Wong
2023-03-16 19:24 ` [PATCH 12/17] xfs: overlay alfi_nname_len atop alfi_name_len for NVREPLACE Darrick J. Wong
2023-03-16 19:24 ` [PATCH 13/17] xfs: refactor value length in xlog_recover_attri_commit_pass2 Darrick J. Wong
2023-03-16 19:25 ` [PATCH 14/17] xfs: rename nname to newname Darrick J. Wong
2023-03-16 19:25 ` [PATCH 15/17] xfs: log VLOOKUP xattr nvreplace operations Darrick J. Wong
2023-03-16 19:25 ` [PATCH 16/17] xfs: log new xattr values for NVREPLACEXXX operations Darrick J. Wong
2023-03-16 19:25 ` [PATCH 17/17] xfs: replace parent pointer diroffset with full dirent name Darrick J. Wong
2023-03-24 17:10 ` [PATCHSET v10r1d2 00/17] xfs: encode parent pointer name in xattr key Allison Henderson
2023-03-25 7:59 ` Amir Goldstein
2023-03-25 17:01 ` Darrick J. Wong
2023-03-26 3:21 ` Amir Goldstein
2023-03-28 1:29 ` Darrick J. Wong
2023-03-28 7:21 ` Amir Goldstein
2023-03-28 22:29 ` Dave Chinner
2023-03-28 23:54 ` Darrick J. Wong
2023-03-29 0:19 ` Dave Chinner
2023-03-29 0:46 ` Darrick J. Wong
2023-03-30 1:56 ` Darrick J. Wong
2023-03-25 17:03 ` Darrick J. Wong
2023-03-16 19:17 ` [PATCHSET v10r1d2 0/9] xfsprogs: tool fixes for parent pointers Darrick J. Wong
2023-03-16 19:26 ` [PATCH 1/9] libxfs: initialize the slab cache for parent defer items Darrick J. Wong
2023-03-16 19:26 ` [PATCH 2/9] mkfs: fix libxfs api misuse Darrick J. Wong
2023-03-16 19:26 ` [PATCH 3/9] libxfs: create new files with attr forks if necessary Darrick J. Wong
2023-03-16 19:26 ` [PATCH 4/9] mkfs: fix subdir parent pointer creation Darrick J. Wong
2023-03-16 19:27 ` [PATCH 5/9] xfs_db: report parent pointer keys Darrick J. Wong
2023-03-16 19:27 ` [PATCH 6/9] xfs_db: obfuscate dirent and pptr names consistently Darrick J. Wong
2023-03-16 19:27 ` [PATCH 7/9] xfs_io: print path in path_print Darrick J. Wong
2023-03-16 19:27 ` [PATCH 8/9] xfs_io: parent command is not experts-only Darrick J. Wong
2023-03-16 19:28 ` [PATCH 9/9] xfs_repair: fix incorrect dabtree hashval comparison Darrick J. Wong
2023-03-16 19:18 ` [PATCHSET v10r1d2 0/2] xfsprogs: actually use getparent ioctl Darrick J. Wong
2023-03-16 19:28 ` [PATCH 1/2] xfs_scrub: revert unnecessary code from "implement the upper half of parent pointers" Darrick J. Wong
2023-03-16 19:28 ` [PATCH 2/2] xfs_scrub: use parent pointers when possible to report file operations Darrick J. Wong
2023-03-16 19:18 ` [PATCHSET v10r1d2 0/7] libfrog: fix parent pointer library code Darrick J. Wong
2023-03-16 19:29 ` [PATCH 1/7] xfs_io: move parent pointer filtering and formatting flags out of libhandle Darrick J. Wong
2023-03-16 19:29 ` [PATCH 2/7] libfrog: remove all the parent pointer code from libhandle Darrick J. Wong
2023-03-16 19:29 ` [PATCH 3/7] libfrog: fix indenting errors in xfss_pptr_alloc Darrick J. Wong
2023-03-16 19:29 ` Darrick J. Wong [this message]
2023-03-16 19:30 ` [PATCH 5/7] libfrog: only walk one parent pointer at a time in handle_walk_parent_path_ptr Darrick J. Wong
2023-03-16 19:30 ` [PATCH 6/7] libfrog: trim trailing slashes when printing pptr paths Darrick J. Wong
2023-03-16 19:30 ` [PATCH 7/7] libfrog: fix a buffer overrun in path_list_to_string Darrick J. Wong
2023-03-16 19:18 ` [PATCHSET v10r1d2 0/5] xfsprogs: bug fixes for parent pointers Darrick J. Wong
2023-03-16 19:30 ` [PATCH 1/5] xfs: rename xfs_pptr_info to xfs_getparents Darrick J. Wong
2023-03-16 19:31 ` [PATCH 2/5] xfs: rename xfs_parent_ptr Darrick J. Wong
2023-03-16 19:31 ` [PATCH 3/5] xfs: fix GETPARENTS ioctl Darrick J. Wong
2023-03-16 19:31 ` [PATCH 4/5] xfs: shorten parent pointer function names Darrick J. Wong
2023-03-16 19:31 ` [PATCH 5/5] xfs: rearrange bits of the parent pointer apis for fsck Darrick J. Wong
2023-03-16 19:18 ` [PATCHSET v10r1d2 0/4] xfs_logprint: clean up attri/pptr dumping Darrick J. Wong
2023-03-16 19:32 ` [PATCH 1/4] xfs: revert "xfsprogs: Print pptrs in ATTRI items" Darrick J. Wong
2023-03-16 19:32 ` [PATCH 2/4] xfs_logprint: print missing attri header fields Darrick J. Wong
2023-03-16 19:32 ` [PATCH 3/4] xfs: make logprint note attr names and newnames consistently Darrick J. Wong
2023-03-16 19:32 ` [PATCH 4/4] xfs_logprint: decode parent pointers fully Darrick J. Wong
2023-03-16 19:19 ` [PATCHSET v10r1d2 00/14] fstests: adjust tests for xfs parent pointers Darrick J. Wong
2023-03-16 19:33 ` [PATCH 01/14] xfs/122: update for " Darrick J. Wong
2023-03-16 19:33 ` [PATCH 02/14] populate: create hardlinks " Darrick J. Wong
2023-03-16 19:33 ` [PATCH 03/14] xfs/021: adapt golden output files " Darrick J. Wong
2023-03-16 19:33 ` [PATCH 04/14] generic/050: adapt " Darrick J. Wong
2023-03-16 19:34 ` [PATCH 05/14] xfs/018: disable parent pointers for this test Darrick J. Wong
2023-03-16 19:34 ` [PATCH 06/14] xfs/306: fix formatting failures with parent pointers Darrick J. Wong
2023-03-16 19:34 ` [PATCH 07/14] common: add helpers for parent pointer tests Darrick J. Wong
2023-03-16 19:35 ` [PATCH 08/14] xfs: add parent pointer test Darrick J. Wong
2023-03-16 19:35 ` [PATCH 09/14] xfs: add multi link " Darrick J. Wong
2023-03-16 19:35 ` [PATCH 10/14] xfs: add parent pointer inject test Darrick J. Wong
2023-03-16 19:35 ` [PATCH 11/14] common/parent: add license and copyright Darrick J. Wong
2023-03-16 19:36 ` [PATCH 12/14] common/parent: don't _fail on missing parent pointer components Darrick J. Wong
2023-03-16 19:36 ` [PATCH 13/14] common/parent: check xfs_io parent command paths Darrick J. Wong
2023-03-16 19:36 ` [PATCH 14/14] xfs/851: test xfs_io parent -p too Darrick J. Wong
2023-03-16 19:19 ` [PATCHSET v10r1d2 0/1] xfs: bug fixes for parent pointers Darrick J. Wong
2023-03-16 19:36 ` [PATCH 1/1] xfs/122: fix parent pointer ioctl structure sizes Darrick J. Wong
2023-03-16 19:19 ` [PATCHSET v10r1d2 0/1] fstests: encode parent pointer name in xattr key Darrick J. Wong
2023-03-16 19:37 ` [PATCH 1/1] xfs/{021,122}: adjust parent pointer encoding format Darrick J. Wong
2023-03-17 19:06 ` [RFC DELUGE v10r1d2] xfs: Parent Pointers Allison Henderson
2023-03-17 23:45 ` Darrick J. Wong
2023-03-21 21:14 ` Allison Henderson
2023-03-25 17:02 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=167899416122.16628.10916393155125095333.stgit@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=allison.henderson@oracle.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).