On Thu, 7 Mar 2019 13:47+0100, Hans Ottevanger wrote:

> On 3/7/19 8:29 AM, Trond Endrestøl wrote:
> > 
> > It's good to see I'm not the only one experiencing this issue. It
> > looks like r339941 was never merged to stable/12.
> 
> FWIW, the same happens in stable/11 (r344876).

For the "eager beavers" of you, try the attached patch.
Later, you might want to run "svn up --accept=theirs-full".

-- 
Trond.
Index: sbin/fsck_ffs/dir.c
===================================================================
--- sbin/fsck_ffs/dir.c (revision 339940)
+++ sbin/fsck_ffs/dir.c (revision 339941)
@@ -323,7 +323,7 @@
                if (preen || reply("ADJUST") == 1) {
                        if (bkgrdflag == 0) {
                                DIP_SET(dp, di_nlink, DIP(dp, di_nlink) - lcnt);
-                               inodirty();
+                               inodirty(dp);
                        } else {
                                cmd.value = idesc->id_number;
                                cmd.size = -lcnt;
@@ -449,7 +449,7 @@
                        pfatal("SORRY. CANNOT CREATE lost+found DIRECTORY\n\n");
                        return (0);
                }
-               inodirty();
+               inodirty(dp);
                idesc.id_type = ADDR;
                idesc.id_func = pass4check;
                idesc.id_number = oldlfdir;
@@ -474,7 +474,7 @@
                        (void)makeentry(orphan, lfdir, "..");
                dp = ginode(lfdir);
                DIP_SET(dp, di_nlink, DIP(dp, di_nlink) + 1);
-               inodirty();
+               inodirty(dp);
                inoinfo(lfdir)->ino_linkcnt++;
                pwarn("DIR I=%lu CONNECTED. ", (u_long)orphan);
                if (parentdir != (ino_t)-1) {
@@ -535,7 +535,7 @@
        dp = ginode(parent);
        if (DIP(dp, di_size) % DIRBLKSIZ) {
                DIP_SET(dp, di_size, roundup(DIP(dp, di_size), DIRBLKSIZ));
-               inodirty();
+               inodirty(dp);
        }
        if ((ckinode(dp, &idesc) & ALTERED) != 0)
                return (1);
@@ -591,7 +591,7 @@
        else if (reply("EXPAND") == 0)
                goto bad;
        dirty(bp);
-       inodirty();
+       inodirty(dp);
        return (1);
 bad:
        DIP_SET(dp, di_db[lastbn], DIP(dp, di_db[lastbn + 1]));
@@ -632,7 +632,7 @@
                memmove(cp, &emptydir, sizeof emptydir);
        dirty(bp);
        DIP_SET(dp, di_nlink, 2);
-       inodirty();
+       inodirty(dp);
        if (ino == UFS_ROOTINO) {
                inoinfo(ino)->ino_linkcnt = DIP(dp, di_nlink);
                cacheino(dp, ino);
@@ -653,7 +653,7 @@
        }
        dp = ginode(parent);
        DIP_SET(dp, di_nlink, DIP(dp, di_nlink) + 1);
-       inodirty();
+       inodirty(dp);
        return (ino);
 }
 
@@ -668,7 +668,7 @@
        if (ino != parent) {
                dp = ginode(parent);
                DIP_SET(dp, di_nlink, DIP(dp, di_nlink) - 1);
-               inodirty();
+               inodirty(dp);
        }
        freeino(ino);
 }
Index: sbin/fsck_ffs/fsck.h
===================================================================
--- sbin/fsck_ffs/fsck.h        (revision 339940)
+++ sbin/fsck_ffs/fsck.h        (revision 339941)
@@ -448,7 +448,7 @@
 void           infohandler(int sig);
 void           alarmhandler(int sig);
 void           inocleanup(void);
-void           inodirty(void);
+void           inodirty(union dinode *);
 struct inostat *inoinfo(ino_t inum);
 void           IOstats(char *what);
 int            linkup(ino_t orphan, ino_t parentdir, char *name);
Index: sbin/fsck_ffs/inode.c
===================================================================
--- sbin/fsck_ffs/inode.c       (revision 339940)
+++ sbin/fsck_ffs/inode.c       (revision 339941)
@@ -102,7 +102,7 @@
                                        printf(
                                            "YOU MUST RERUN FSCK AFTERWARDS\n");
                                        rerun = 1;
-                                       inodirty();
+                                       inodirty(dp);
 
                                }
                        }
@@ -142,7 +142,7 @@
                                        printf(
                                            "YOU MUST RERUN FSCK AFTERWARDS\n");
                                        rerun = 1;
-                                       inodirty();
+                                       inodirty(dp);
                                        break;
                                }
                        }
@@ -221,7 +221,7 @@
                                        printf(
                                            "YOU MUST RERUN FSCK AFTERWARDS\n");
                                        rerun = 1;
-                                       inodirty();
+                                       inodirty(dp);
                                        bp->b_flags &= ~B_INUSE;
                                        return(STOP);
                                }
@@ -519,7 +519,7 @@
 }
 
 void
-inodirty(void)
+inodirty(union dinode *dp)
 {
 
        dirty(pbp);
@@ -544,7 +544,7 @@
                        (void)ckinode(dp, idesc);
                        inoinfo(idesc->id_number)->ino_state = USTATE;
                        clearinode(dp);
-                       inodirty();
+                       inodirty(dp);
                } else {
                        cmd.value = idesc->id_number;
                        cmd.size = -DIP(dp, di_nlink);
@@ -711,7 +711,7 @@
        DIP_SET(dp, di_size, sblock.fs_fsize);
        DIP_SET(dp, di_blocks, btodb(sblock.fs_fsize));
        n_files++;
-       inodirty();
+       inodirty(dp);
        inoinfo(ino)->ino_type = IFTODT(type);
        return (ino);
 }
@@ -732,7 +732,7 @@
        dp = ginode(ino);
        (void)ckinode(dp, &idesc);
        clearinode(dp);
-       inodirty();
+       inodirty(dp);
        inoinfo(ino)->ino_state = USTATE;
        n_files--;
 }
Index: sbin/fsck_ffs/pass1.c
===================================================================
--- sbin/fsck_ffs/pass1.c       (revision 339940)
+++ sbin/fsck_ffs/pass1.c       (revision 339941)
@@ -270,7 +270,7 @@
                        if (reply("CLEAR") == 1) {
                                dp = ginode(inumber);
                                clearinode(dp);
-                               inodirty();
+                               inodirty(dp);
                        }
                }
                inoinfo(inumber)->ino_state = USTATE;
@@ -293,7 +293,7 @@
                dp = ginode(inumber);
                DIP_SET(dp, di_size, sblock.fs_fsize);
                DIP_SET(dp, di_mode, IFREG|0600);
-               inodirty();
+               inodirty(dp);
        }
        if ((mode == IFBLK || mode == IFCHR || mode == IFIFO ||
             mode == IFSOCK) && DIP(dp, di_size) != 0) {
@@ -410,7 +410,7 @@
                if (bkgrdflag == 0) {
                        dp = ginode(inumber);
                        DIP_SET(dp, di_blocks, idesc->id_entryno);
-                       inodirty();
+                       inodirty(dp);
                } else {
                        cmd.value = idesc->id_number;
                        cmd.size = idesc->id_entryno - DIP(dp, di_blocks);
@@ -430,7 +430,7 @@
                inoinfo(inumber)->ino_state = USTATE;
                dp = ginode(inumber);
                clearinode(dp);
-               inodirty();
+               inodirty(dp);
        }
        return (1);
 }
Index: sbin/fsck_ffs/pass2.c
===================================================================
--- sbin/fsck_ffs/pass2.c       (revision 339940)
+++ sbin/fsck_ffs/pass2.c       (revision 339941)
@@ -114,7 +114,7 @@
                dp = ginode(UFS_ROOTINO);
                DIP_SET(dp, di_mode, DIP(dp, di_mode) & ~IFMT);
                DIP_SET(dp, di_mode, DIP(dp, di_mode) | IFDIR);
-               inodirty();
+               inodirty(dp);
                break;
 
        case DSTATE:
@@ -160,7 +160,7 @@
                        if (reply("FIX") == 1) {
                                dp = ginode(inp->i_number);
                                DIP_SET(dp, di_size, inp->i_isize);
-                               inodirty();
+                               inodirty(dp);
                        }
                } else if ((inp->i_isize & (DIRBLKSIZ - 1)) != 0) {
                        getpathname(pathbuf, inp->i_number, inp->i_number);
@@ -179,7 +179,7 @@
                                dp = ginode(inp->i_number);
                                DIP_SET(dp, di_size,
                                    roundup(inp->i_isize, DIRBLKSIZ));
-                               inodirty();
+                               inodirty(dp);
                        }
                }
                dp = &dino;
Index: sbin/fsdb/fsdb.c
===================================================================
--- sbin/fsdb/fsdb.c    (revision 339940)
+++ sbin/fsdb/fsdb.c    (revision 339941)
@@ -340,7 +340,7 @@
     GETINUM(1,inum);
     dp = ginode(inum);
     clearinode(dp);
-    inodirty();
+    inodirty(dp);
     if (curinode)                      /* re-set after potential change */
        curinode = ginode(curinum);
     return 0;
@@ -370,7 +370,7 @@
     DIP_SET(curinode, di_nlink, DIP(curinode, di_nlink) + 1);
     printf("inode %ju link count now %d\n",
        (uintmax_t)curinum, DIP(curinode, di_nlink));
-    inodirty();
+    inodirty(curinode);
     return 0;
 }
 
@@ -381,7 +381,7 @@
     DIP_SET(curinode, di_nlink, DIP(curinode, di_nlink) - 1);
     printf("inode %ju link count now %d\n",
        (uintmax_t)curinum, DIP(curinode, di_nlink));
-    inodirty();
+    inodirty(curinode);
     return 0;
 }
 
@@ -919,7 +919,7 @@
     }
     DIP_SET(curinode, di_mode, DIP(curinode, di_mode) & ~IFMT);
     DIP_SET(curinode, di_mode, DIP(curinode, di_mode) | type);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return 0;
 }
@@ -940,7 +940,7 @@
     }
     
     DIP_SET(curinode, di_size, len);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return rval;
 }
@@ -962,7 +962,7 @@
     
     DIP_SET(curinode, di_mode, DIP(curinode, di_mode) & ~07777);
     DIP_SET(curinode, di_mode, DIP(curinode, di_mode) | modebits);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return rval;
 }
@@ -987,7 +987,7 @@
        return(1);
     }
     DIP_SET(curinode, di_flags, flags);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return rval;
 }
@@ -1012,7 +1012,7 @@
        return(1);
     }
     DIP_SET(curinode, di_gen, gen);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return rval;
 }
@@ -1037,7 +1037,7 @@
     }
     
     DIP_SET(curinode, di_nlink, lcnt);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return rval;
 }
@@ -1064,7 +1064,7 @@
     }
     
     DIP_SET(curinode, di_uid, uid);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return rval;
 }
@@ -1090,7 +1090,7 @@
     }
     
     DIP_SET(curinode, di_gid, gid);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return rval;
 }
@@ -1159,7 +1159,7 @@
        return 1;
     curinode->dp2.di_birthtime = _time_to_time64(secs);
     curinode->dp2.di_birthnsec = nsecs;
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return 0;
 }
@@ -1176,7 +1176,7 @@
     else
        curinode->dp2.di_mtime = _time_to_time64(secs);
     DIP_SET(curinode, di_mtimensec, nsecs);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return 0;
 }
@@ -1193,7 +1193,7 @@
     else
        curinode->dp2.di_atime = _time_to_time64(secs);
     DIP_SET(curinode, di_atimensec, nsecs);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return 0;
 }
@@ -1210,7 +1210,7 @@
     else
        curinode->dp2.di_ctime = _time_to_time64(secs);
     DIP_SET(curinode, di_ctimensec, nsecs);
-    inodirty();
+    inodirty(curinode);
     printactive(0);
     return 0;
 }
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[email protected]"

Reply via email to