drm/bridge: dw_hdmi: clear ih_mute register when system resume
[firefly-linux-kernel-4.4.55.git] / fs / jfs / jfs_dtree.c
index c450fdb3d78d21575440fb73bed5bb5e0ae911e8..d88576e23fe4c419a4f9b77a9b42038e389f3254 100644 (file)
@@ -124,21 +124,21 @@ struct dtsplit {
 #define DT_PAGE(IP, MP) BT_PAGE(IP, MP, dtpage_t, i_dtroot)
 
 /* get page buffer for specified block address */
-#define DT_GETPAGE(IP, BN, MP, SIZE, P, RC)\
-{\
-       BT_GETPAGE(IP, BN, MP, dtpage_t, SIZE, P, RC, i_dtroot)\
-       if (!(RC))\
-       {\
-               if (((P)->header.nextindex > (((BN)==0)?DTROOTMAXSLOT:(P)->header.maxslot)) ||\
-                   ((BN) && ((P)->header.maxslot > DTPAGEMAXSLOT)))\
-               {\
-                       BT_PUTPAGE(MP);\
-                       jfs_error((IP)->i_sb, "DT_GETPAGE: dtree page corrupt");\
-                       MP = NULL;\
-                       RC = -EIO;\
-               }\
-       }\
-}
+#define DT_GETPAGE(IP, BN, MP, SIZE, P, RC)                            \
+do {                                                                   \
+       BT_GETPAGE(IP, BN, MP, dtpage_t, SIZE, P, RC, i_dtroot);        \
+       if (!(RC)) {                                                    \
+               if (((P)->header.nextindex >                            \
+                    (((BN) == 0) ? DTROOTMAXSLOT : (P)->header.maxslot)) || \
+                   ((BN) && ((P)->header.maxslot > DTPAGEMAXSLOT))) {  \
+                       BT_PUTPAGE(MP);                                 \
+                       jfs_error((IP)->i_sb,                           \
+                                 "DT_GETPAGE: dtree page corrupt\n");  \
+                       MP = NULL;                                      \
+                       RC = -EIO;                                      \
+               }                                                       \
+       }                                                               \
+} while (0)
 
 /* for consistency */
 #define DT_PUTPAGE(MP) BT_PUTPAGE(MP)
@@ -776,7 +776,7 @@ int dtSearch(struct inode *ip, struct component_name * key, ino_t * data,
                        /* Something's corrupted, mark filesystem dirty so
                         * chkdsk will fix it.
                         */
-                       jfs_error(sb, "stack overrun in dtSearch!");
+                       jfs_error(sb, "stack overrun!\n");
                        BT_STACK_DUMP(btstack);
                        rc = -EIO;
                        goto out;
@@ -1040,8 +1040,8 @@ static int dtSplitUp(tid_t tid,
                pxdlist.maxnpxd = 1;
                pxdlist.npxd = 0;
                pxd = &pxdlist.pxd[0];
-               PXDaddress(pxd, nxaddr)
-                   PXDlength(pxd, xlen + n);
+               PXDaddress(pxd, nxaddr);
+               PXDlength(pxd, xlen + n);
                split->pxdlist = &pxdlist;
                if ((rc = dtExtendPage(tid, ip, split, btstack))) {
                        nxaddr = addressPXD(pxd);
@@ -3002,9 +3002,9 @@ static inline struct jfs_dirent *next_jfs_dirent(struct jfs_dirent *dirent)
  * return: offset = (pn, index) of start entry
  *     of next jfs_readdir()/dtRead()
  */
-int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
+int jfs_readdir(struct file *file, struct dir_context *ctx)
 {
-       struct inode *ip = file_inode(filp);
+       struct inode *ip = file_inode(file);
        struct nls_table *codepage = JFS_SBI(ip->i_sb)->nls_tab;
        int rc = 0;
        loff_t dtpos;   /* legacy OS/2 style position */
@@ -3033,7 +3033,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
        int overflow, fix_page, page_fixed = 0;
        static int unique_pos = 2;      /* If we can't fix broken index */
 
-       if (filp->f_pos == DIREND)
+       if (ctx->pos == DIREND)
                return 0;
 
        if (DO_INDEX(ip)) {
@@ -3045,12 +3045,12 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                 */
                do_index = 1;
 
-               dir_index = (u32) filp->f_pos;
+               dir_index = (u32) ctx->pos;
 
                /*
-                * NFSv4 reserves cookies 1 and 2 for . and .. so we add
-                * the value we return to the vfs is one greater than the
-                * one we use internally.
+                * NFSv4 reserves cookies 1 and 2 for . and .. so the value
+                * we return to the vfs is one greater than the one we use
+                * internally.
                 */
                if (dir_index)
                        dir_index--;
@@ -3061,25 +3061,25 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                        if (dtEmpty(ip) ||
                            (dir_index >= JFS_IP(ip)->next_index)) {
                                /* Stale position.  Directory has shrunk */
-                               filp->f_pos = DIREND;
+                               ctx->pos = DIREND;
                                return 0;
                        }
                      repeat:
                        rc = read_index(ip, dir_index, &dirtab_slot);
                        if (rc) {
-                               filp->f_pos = DIREND;
+                               ctx->pos = DIREND;
                                return rc;
                        }
                        if (dirtab_slot.flag == DIR_INDEX_FREE) {
                                if (loop_count++ > JFS_IP(ip)->next_index) {
                                        jfs_err("jfs_readdir detected "
                                                   "infinite loop!");
-                                       filp->f_pos = DIREND;
+                                       ctx->pos = DIREND;
                                        return 0;
                                }
                                dir_index = le32_to_cpu(dirtab_slot.addr2);
                                if (dir_index == -1) {
-                                       filp->f_pos = DIREND;
+                                       ctx->pos = DIREND;
                                        return 0;
                                }
                                goto repeat;
@@ -3088,13 +3088,13 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                        index = dirtab_slot.slot;
                        DT_GETPAGE(ip, bn, mp, PSIZE, p, rc);
                        if (rc) {
-                               filp->f_pos = DIREND;
+                               ctx->pos = DIREND;
                                return 0;
                        }
                        if (p->header.flag & BT_INTERNAL) {
                                jfs_err("jfs_readdir: bad index table");
                                DT_PUTPAGE(mp);
-                               filp->f_pos = DIREND;
+                               ctx->pos = DIREND;
                                return 0;
                        }
                } else {
@@ -3102,23 +3102,22 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                                /*
                                 * self "."
                                 */
-                               filp->f_pos = 1;
-                               if (filldir(dirent, ".", 1, 0, ip->i_ino,
-                                           DT_DIR))
+                               ctx->pos = 1;
+                               if (!dir_emit(ctx, ".", 1, ip->i_ino, DT_DIR))
                                        return 0;
                        }
                        /*
                         * parent ".."
                         */
-                       filp->f_pos = 2;
-                       if (filldir(dirent, "..", 2, 1, PARENT(ip), DT_DIR))
+                       ctx->pos = 2;
+                       if (!dir_emit(ctx, "..", 2, PARENT(ip), DT_DIR))
                                return 0;
 
                        /*
                         * Find first entry of left-most leaf
                         */
                        if (dtEmpty(ip)) {
-                               filp->f_pos = DIREND;
+                               ctx->pos = DIREND;
                                return 0;
                        }
 
@@ -3136,24 +3135,20 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                 * pn > 0:              Real entries, pn=1 -> leftmost page
                 * pn = index = -1:     No more entries
                 */
-               dtpos = filp->f_pos;
+               dtpos = ctx->pos;
                if (dtpos < 2) {
                        /* build "." entry */
-
-                       filp->f_pos = 1;
-                       if (filldir(dirent, ".", 1, filp->f_pos, ip->i_ino,
-                                   DT_DIR))
+                       ctx->pos = 1;
+                       if (!dir_emit(ctx, ".", 1, ip->i_ino, DT_DIR))
                                return 0;
                        dtoffset->index = 2;
-                       filp->f_pos = dtpos;
+                       ctx->pos = dtpos;
                }
 
                if (dtoffset->pn == 0) {
                        if (dtoffset->index == 2) {
                                /* build ".." entry */
-
-                               if (filldir(dirent, "..", 2, filp->f_pos,
-                                           PARENT(ip), DT_DIR))
+                               if (!dir_emit(ctx, "..", 2, PARENT(ip), DT_DIR))
                                        return 0;
                        } else {
                                jfs_err("jfs_readdir called with "
@@ -3161,18 +3156,18 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                        }
                        dtoffset->pn = 1;
                        dtoffset->index = 0;
-                       filp->f_pos = dtpos;
+                       ctx->pos = dtpos;
                }
 
                if (dtEmpty(ip)) {
-                       filp->f_pos = DIREND;
+                       ctx->pos = DIREND;
                        return 0;
                }
 
-               if ((rc = dtReadNext(ip, &filp->f_pos, &btstack))) {
+               if ((rc = dtReadNext(ip, &ctx->pos, &btstack))) {
                        jfs_err("jfs_readdir: unexpected rc = %d "
                                "from dtReadNext", rc);
-                       filp->f_pos = DIREND;
+                       ctx->pos = DIREND;
                        return 0;
                }
                /* get start leaf page and index */
@@ -3180,7 +3175,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
 
                /* offset beyond directory eof ? */
                if (bn < 0) {
-                       filp->f_pos = DIREND;
+                       ctx->pos = DIREND;
                        return 0;
                }
        }
@@ -3189,7 +3184,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
        if (dirent_buf == 0) {
                DT_PUTPAGE(mp);
                jfs_warn("jfs_readdir: __get_free_page failed!");
-               filp->f_pos = DIREND;
+               ctx->pos = DIREND;
                return -ENOMEM;
        }
 
@@ -3267,8 +3262,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                                /* Sanity Check */
                                if (d_namleft == 0) {
                                        jfs_error(ip->i_sb,
-                                                 "JFS:Dtree error: ino = "
-                                                 "%ld, bn=%Ld, index = %d",
+                                                 "JFS:Dtree error: ino = %ld, bn=%lld, index = %d\n",
                                                  (long)ip->i_ino,
                                                  (long long)bn,
                                                  i);
@@ -3310,9 +3304,9 @@ skip_one:
 
                jfs_dirent = (struct jfs_dirent *) dirent_buf;
                while (jfs_dirents--) {
-                       filp->f_pos = jfs_dirent->position;
-                       if (filldir(dirent, jfs_dirent->name,
-                                   jfs_dirent->name_len, filp->f_pos,
+                       ctx->pos = jfs_dirent->position;
+                       if (!dir_emit(ctx, jfs_dirent->name,
+                                   jfs_dirent->name_len,
                                    jfs_dirent->ino, DT_UNKNOWN))
                                goto out;
                        jfs_dirent = next_jfs_dirent(jfs_dirent);
@@ -3324,7 +3318,7 @@ skip_one:
                }
 
                if (!overflow && (bn == 0)) {
-                       filp->f_pos = DIREND;
+                       ctx->pos = DIREND;
                        break;
                }
 
@@ -3388,7 +3382,7 @@ static int dtReadFirst(struct inode *ip, struct btstack * btstack)
                 */
                if (BT_STACK_FULL(btstack)) {
                        DT_PUTPAGE(mp);
-                       jfs_error(ip->i_sb, "dtReadFirst: btstack overrun");
+                       jfs_error(ip->i_sb, "btstack overrun\n");
                        BT_STACK_DUMP(btstack);
                        return -EIO;
                }