mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-02 12:20:51 +00:00
pipe: use unr64
Reviewed by: kib Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D18054
This commit is contained in:
parent
435bef7a2f
commit
737037f6c0
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=340677
@ -244,7 +244,7 @@ static int pipe_zone_init(void *mem, int size, int flags);
|
||||
static void pipe_zone_fini(void *mem, int size);
|
||||
|
||||
static uma_zone_t pipe_zone;
|
||||
static struct unrhdr *pipeino_unr;
|
||||
static struct unrhdr64 pipeino_unr;
|
||||
static dev_t pipedev_ino;
|
||||
|
||||
SYSINIT(vfs, SI_SUB_VFS, SI_ORDER_ANY, pipeinit, NULL);
|
||||
@ -257,8 +257,7 @@ pipeinit(void *dummy __unused)
|
||||
pipe_zone_ctor, NULL, pipe_zone_init, pipe_zone_fini,
|
||||
UMA_ALIGN_PTR, 0);
|
||||
KASSERT(pipe_zone != NULL, ("pipe_zone not initialized"));
|
||||
pipeino_unr = new_unrhdr(1, INT32_MAX, NULL);
|
||||
KASSERT(pipeino_unr != NULL, ("pipe fake inodes not initialized"));
|
||||
new_unrhdr64(&pipeino_unr, 1);
|
||||
pipedev_ino = devfs_alloc_cdp_inode();
|
||||
KASSERT(pipedev_ino > 0, ("pipe dev inode not initialized"));
|
||||
}
|
||||
@ -390,8 +389,6 @@ pipe_dtor(struct pipe *dpipe)
|
||||
funsetown(&peer->pipe_sigio);
|
||||
pipeclose(peer);
|
||||
}
|
||||
if (ino != 0 && ino != (ino_t)-1)
|
||||
free_unr(pipeino_unr, ino);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -639,7 +636,7 @@ pipe_create(struct pipe *pipe, int backing)
|
||||
(void)pipespace_new(pipe, PIPE_SIZE);
|
||||
}
|
||||
|
||||
pipe->pipe_ino = -1;
|
||||
pipe->pipe_ino = alloc_unr64(&pipeino_unr);
|
||||
}
|
||||
|
||||
/* ARGSUSED */
|
||||
@ -1461,7 +1458,6 @@ pipe_stat(struct file *fp, struct stat *ub, struct ucred *active_cred,
|
||||
struct thread *td)
|
||||
{
|
||||
struct pipe *pipe;
|
||||
int new_unr;
|
||||
#ifdef MAC
|
||||
int error;
|
||||
#endif
|
||||
@ -1482,23 +1478,6 @@ pipe_stat(struct file *fp, struct stat *ub, struct ucred *active_cred,
|
||||
return (vnops.fo_stat(fp, ub, active_cred, td));
|
||||
}
|
||||
|
||||
/*
|
||||
* Lazily allocate an inode number for the pipe. Most pipe
|
||||
* users do not call fstat(2) on the pipe, which means that
|
||||
* postponing the inode allocation until it is must be
|
||||
* returned to userland is useful. If alloc_unr failed,
|
||||
* assign st_ino zero instead of returning an error.
|
||||
* Special pipe_ino values:
|
||||
* -1 - not yet initialized;
|
||||
* 0 - alloc_unr failed, return 0 as st_ino forever.
|
||||
*/
|
||||
if (pipe->pipe_ino == (ino_t)-1) {
|
||||
new_unr = alloc_unr(pipeino_unr);
|
||||
if (new_unr != -1)
|
||||
pipe->pipe_ino = new_unr;
|
||||
else
|
||||
pipe->pipe_ino = 0;
|
||||
}
|
||||
PIPE_UNLOCK(pipe);
|
||||
|
||||
bzero(ub, sizeof(*ub));
|
||||
|
Loading…
Reference in New Issue
Block a user