On Sat, Jan 11, 2020 at 03:43:45PM +0100, Martin Pieuchot wrote:
> The custom semaphores used by softdep always use infinite tsleep(9).  So
> remove the `timo' argument from sema_init() and switch the implementation
> to tsleep_nsec(9) and INFSLP.
>
> ok?

OK bluhm@

> Index: ufs/ffs/ffs_softdep.c
> ===================================================================
> RCS file: /cvs/src/sys/ufs/ffs/ffs_softdep.c,v
> retrieving revision 1.146
> diff -u -p -r1.146 ffs_softdep.c
> --- ufs/ffs/ffs_softdep.c     4 Jan 2020 16:22:36 -0000       1.146
> +++ ufs/ffs/ffs_softdep.c     11 Jan 2020 14:40:55 -0000
> @@ -289,21 +289,19 @@ struct sema {
>       pid_t   holder;
>       char    *name;
>       int     prio;
> -     int     timo;
>  };
> -STATIC       void sema_init(struct sema *, char *, int, int);
> +STATIC       void sema_init(struct sema *, char *, int);
>  STATIC       int sema_get(struct sema *, struct lockit *);
>  STATIC       void sema_release(struct sema *);
>
>  STATIC void
> -sema_init(struct sema *semap, char *name, int prio, int timo)
> +sema_init(struct sema *semap, char *name, int prio)
>  {
>
>       semap->holder = -1;
>       semap->value = 0;
>       semap->name = name;
>       semap->prio = prio;
> -     semap->timo = timo;
>  }
>
>  STATIC int
> @@ -314,7 +312,7 @@ sema_get(struct sema *semap, struct lock
>       if (semap->value++ > 0) {
>               if (interlock != NULL)
>                       s = FREE_LOCK_INTERLOCKED(interlock);
> -             tsleep((caddr_t)semap, semap->prio, semap->name, semap->timo);
> +             tsleep_nsec(semap, semap->prio, semap->name, INFSLP);
>               if (interlock != NULL) {
>                       ACQUIRE_LOCK_INTERLOCKED(interlock, s);
>                       FREE_LOCK(interlock);
> @@ -1176,12 +1174,12 @@ softdep_initialize(void)
>       arc4random_buf(&softdep_hashkey, sizeof(softdep_hashkey));
>       pagedep_hashtbl = hashinit(initialvnodes / 5, M_PAGEDEP, M_WAITOK,
>           &pagedep_hash);
> -     sema_init(&pagedep_in_progress, "pagedep", PRIBIO, 0);
> +     sema_init(&pagedep_in_progress, "pagedep", PRIBIO);
>       inodedep_hashtbl = hashinit(initialvnodes, M_INODEDEP, M_WAITOK,
>           &inodedep_hash);
> -     sema_init(&inodedep_in_progress, "inodedep", PRIBIO, 0);
> +     sema_init(&inodedep_in_progress, "inodedep", PRIBIO);
>       newblk_hashtbl = hashinit(64, M_NEWBLK, M_WAITOK, &newblk_hash);
> -     sema_init(&newblk_in_progress, "newblk", PRIBIO, 0);
> +     sema_init(&newblk_in_progress, "newblk", PRIBIO);
>       timeout_set(&proc_waiting_timeout, pause_timer, NULL);
>       pool_init(&pagedep_pool, sizeof(struct pagedep), 0, IPL_NONE,
>           PR_WAITOK, "pagedep", NULL);

Reply via email to