aix vnode hold simplification
[openafs.git] / src / afs / afs_pioctl.c
index 9b60700..b0d690f 100644 (file)
@@ -781,7 +781,7 @@ afs_xioctl(afs_proc_t *p, register struct ioctl_args *uap, register_t *retval)
     return (code);
 }
 #elif defined(AFS_XBSD_ENV)
-# if !defined(AFS_FBSD50_ENV)
+# if defined(AFS_FBSD50_ENV)
 #  define arg data
 int
 afs_xioctl(struct thread *td, register struct ioctl_args *uap,
@@ -802,6 +802,7 @@ afs_xioctl(afs_proc_t *p, register struct ioctl_args *uap, register_t *retval)
     register struct filedesc *fdp;
     register struct vcache *tvc;
     register int ioctlDone = 0, code = 0;
+    struct file *fd;
 
     AFS_STATCNT(afs_xioctl);
     fdp = p->p_fd;
@@ -1834,14 +1835,15 @@ DECL_PIOCTL(PSetTokens)
        afs_uint32 pag;
 #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
 # if defined(AFS_DARWIN_ENV)
-       afs_proc_t *p = current_proc(); /* XXX */
+       afs_proc_t *p = current_proc(); /* XXX */
+       char procname[256];
+       proc_selfname(procname, 256);
 # else
        afs_proc_t *p = curproc;        /* XXX */
+       char *procname = p->p_comm;
 # endif
-# ifndef AFS_DARWIN80_ENV
-       uprintf("Process %d (%s) tried to change pags in PSetTokens\n",
-               p->p_pid, p->p_comm);
-# endif
+       afs_warnuser("Process %d (%s) tried to change pags in PSetTokens\n",
+                    MyPidxx2Pid(MyPidxx), procname);
        if (!setpag(p, acred, -1, &pag, 1)) {
 #else
        if (!setpag(acred, -1, &pag, 1)) {
@@ -2625,7 +2627,7 @@ Prefetch(uparmtype apath, struct afs_ioctl *adata, int afollow,
        return EWOULDBLOCK;     /* pretty close */
     }
     afs_BQueue(BOP_PATH, (struct vcache *)0, 0, 0, acred, (afs_size_t) 0,
-              (afs_size_t) 0, tp);
+              (afs_size_t) 0, tp, (void *)0, (void *)0);
     return 0;
 }
 
@@ -3401,11 +3403,13 @@ DECL_PIOCTL(PFlushVolumeData)
                    goto loop;
                }
 #ifdef AFS_DARWIN80_ENV
-               if (tvc->f.states & CDeadVnode) {
+           if (tvc->f.states & CDeadVnode) {
+               if (!(tvc->f.states & CBulkFetching)) {
                    ReleaseReadLock(&afs_xvcache);
                    afs_osi_Sleep(&tvc->f.states);
                    goto loop;
                }
+           }
 #endif
 #if    defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV)  || defined(AFS_HPUX_ENV) || defined(AFS_LINUX20_ENV)
                VN_HOLD(AFSTOV(tvc));
@@ -3419,10 +3423,13 @@ DECL_PIOCTL(PFlushVolumeData)
                    AFS_GLOCK();
                    continue;
                }
-#elif defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
-               osi_vnhold(tvc, 0);
+               if (tvc->f.states & (CBulkFetching|CDeadVnode)) {
+                   AFS_GUNLOCK();
+                   vnode_recycle(AFSTOV(tvc));
+                   AFS_GLOCK();
+               }
 #else
-               VREFCOUNT_INC(tvc); /* AIX, apparently */
+               AFS_FAST_HOLD(tvc);
 #endif
                ReleaseReadLock(&afs_xvcache);
 #ifdef AFS_BOZONLOCK_ENV
@@ -3837,7 +3844,7 @@ afs_setsprefs(struct spref *sp, unsigned int num, unsigned int vlonly)
     touchedSize = 0;
     for (k = 0; k < num; sp++, k++) {
        if (debugsetsp) {
-           printf("sp host=%x, rank=%d\n", sp->host.s_addr, sp->rank);
+           afs_warn("sp host=%x, rank=%d\n", sp->host.s_addr, sp->rank);
        }
        matches = 0;
        ObtainReadLock(&afs_xserver);
@@ -3857,7 +3864,7 @@ afs_setsprefs(struct spref *sp, unsigned int num, unsigned int vlonly)
 
        if (sa && matches) {    /* found one! */
            if (debugsetsp) {
-               printf("sa ip=%x, ip_rank=%d\n", sa->sa_ip, sa->sa_iprank);
+               afs_warn("sa ip=%x, ip_rank=%d\n", sa->sa_ip, sa->sa_iprank);
            }
            sa->sa_iprank = sp->rank + afs_randomMod15();
            afs_SortOneServer(sa->server);
@@ -5004,8 +5011,8 @@ DECL_PIOCTL(PSetCachingThreshold)
     }
        
     /* Return the current size threshold */
-    if (getting) {
-       return afs_pd_putInt32(aout, cache_bypass_threshold);
+    if (getting)
+       return afs_pd_putInt(aout, cache_bypass_threshold);
 
     return(0);
 }
@@ -5151,7 +5158,7 @@ DECL_PIOCTL(PDiscon)
            afs_in_sync = 0;
 
            if (code && !force) {
-               printf("Files not synchronized properly, still in discon state. \n"
+               afs_warnuser("Files not synchronized properly, still in discon state. \n"
                       "Please retry or use \"force\".\n");
                mode = 0;
            } else {
@@ -5161,7 +5168,7 @@ DECL_PIOCTL(PDiscon)
                afs_ClearAllStatdFlag();
                afs_is_disconnected = 0;
                afs_is_discon_rw = 0;
-               printf("\nSync succeeded. You are back online.\n");
+               afs_warnuser("\nSync succeeded. You are back online.\n");
            }
 
            ReleaseWriteLock(&afs_discon_lock);