]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 17 Dec 2012 16:27:59 +0000 (08:27 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 17 Dec 2012 16:27:59 +0000 (08:27 -0800)
Pull ext3, udf, quota fixes from Jan Kara:
 "Some ext3 & quota cleanups and couple of udf fixes"

* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
  quota: Use the pre-processor to compile out quotactl_cmd_write when !CONFIG_BLOCK
  ext3: drop if around WARN_ON
  ext3: get rid of the duplicate code on ext3_fill_super
  udf: remove un-needed variable from inode_getblk
  udf: don't increment lenExtents while writing to a hole
  udf: fix memory leak while allocating blocks during write

fs/ext3/inode.c
fs/ext3/super.c
fs/quota/quota.c
fs/udf/inode.c

index 7e87e37a372ab0c0bda9f1bc35bcd05c21eb575d..b176d425354428043ef92c4e680353d90a28c760 100644 (file)
@@ -1071,8 +1071,7 @@ struct buffer_head *ext3_getblk(handle_t *handle, struct inode *inode,
         * mapped. 0 in case of a HOLE.
         */
        if (err > 0) {
-               if (err > 1)
-                       WARN_ON(1);
+               WARN_ON(err > 1);
                err = 0;
        }
        *errp = err;
index 5366393528dfbd622120549729cf22a891026f44..6e50223b3299fcc8628115a6984bc6c9d6160f13 100644 (file)
@@ -1661,9 +1661,6 @@ static int ext3_fill_super (struct super_block *sb, void *data, int silent)
                return -ENOMEM;
        }
        sb->s_fs_info = sbi;
-       sbi->s_mount_opt = 0;
-       sbi->s_resuid = make_kuid(&init_user_ns, EXT3_DEF_RESUID);
-       sbi->s_resgid = make_kgid(&init_user_ns, EXT3_DEF_RESGID);
        sbi->s_sb_block = sb_block;
 
        blocksize = sb_min_blocksize(sb, EXT3_MIN_BLOCK_SIZE);
index af1661f7a54f1700faa9a129ec76dad81e7e0961..c7314f1771f5824be95fffb4cd27695494c767ff 100644 (file)
@@ -307,6 +307,8 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
        }
 }
 
+#ifdef CONFIG_BLOCK
+
 /* Return 1 if 'cmd' will block on frozen filesystem */
 static int quotactl_cmd_write(int cmd)
 {
@@ -322,6 +324,8 @@ static int quotactl_cmd_write(int cmd)
        return 1;
 }
 
+#endif /* CONFIG_BLOCK */
+
 /*
  * look up a superblock on which quota ops will be performed
  * - use the name of a block device to find the superblock thereon
index df88b957ccf04f39751686d3ff85f8f69ed8cdd2..cbae1ed0b7c17dcb966f7d43ca823fa0dcb357bf 100644 (file)
@@ -587,7 +587,6 @@ out:
 static sector_t inode_getblk(struct inode *inode, sector_t block,
                             int *err, int *new)
 {
-       static sector_t last_block;
        struct kernel_long_ad laarr[EXTENT_MERGE_SIZE];
        struct extent_position prev_epos, cur_epos, next_epos;
        int count = 0, startnum = 0, endnum = 0;
@@ -601,6 +600,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
        struct udf_inode_info *iinfo = UDF_I(inode);
        int goal = 0, pgoal = iinfo->i_location.logicalBlockNum;
        int lastblock = 0;
+       bool isBeyondEOF;
 
        *err = 0;
        *new = 0;
@@ -676,11 +676,10 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
                return newblock;
        }
 
-       last_block = block;
        /* Are we beyond EOF? */
        if (etype == -1) {
                int ret;
-
+               isBeyondEOF = 1;
                if (count) {
                        if (c)
                                laarr[0] = laarr[1];
@@ -718,11 +717,11 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
                        memset(&laarr[c].extLocation, 0x00,
                                sizeof(struct kernel_lb_addr));
                        count++;
-                       endnum++;
                }
                endnum = c + 1;
                lastblock = 1;
        } else {
+               isBeyondEOF = 0;
                endnum = startnum = ((count > 2) ? 2 : count);
 
                /* if the current extent is in position 0,
@@ -765,10 +764,13 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
                                goal, err);
                if (!newblocknum) {
                        brelse(prev_epos.bh);
+                       brelse(cur_epos.bh);
+                       brelse(next_epos.bh);
                        *err = -ENOSPC;
                        return 0;
                }
-               iinfo->i_lenExtents += inode->i_sb->s_blocksize;
+               if (isBeyondEOF)
+                       iinfo->i_lenExtents += inode->i_sb->s_blocksize;
        }
 
        /* if the extent the requsted block is located in contains multiple
@@ -795,6 +797,8 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
        udf_update_extents(inode, laarr, startnum, endnum, &prev_epos);
 
        brelse(prev_epos.bh);
+       brelse(cur_epos.bh);
+       brelse(next_epos.bh);
 
        newblock = udf_get_pblock(inode->i_sb, newblocknum,
                                iinfo->i_location.partitionReferenceNum, 0);