odf bug: dget odf/sb when reading/writting sb file
authorYiannis Pericleous <yiannos@louie.fsl.cs.sunysb.edu>
Fri, 27 Apr 2007 20:08:10 +0000 (16:08 -0400)
committerRachita Kothiyal <rachita@dewey.fsl.cs.sunysb.edu>
Thu, 1 May 2008 23:02:12 +0000 (19:02 -0400)
fs/unionfs/file.c
fs/unionfs/odf.c

index 6959beaa63b4fd928cec628d0a3abf999dbfc553..c76c53757ddf366eb52c83a00010d877cdbdfd21 100644 (file)
@@ -50,7 +50,7 @@ static ssize_t unionfs_aio_read(struct kiocb *iocb, const struct iovec *iov,
        int err;
 
        err = generic_file_aio_read(iocb, iov, nr_segs, pos);
-       
+
        if (err == -EIOCBQUEUED)
                err = wait_on_sync_kiocb(iocb);
 
index 847cd0b5b98b56c9f28340be9ad76df547e9cadd..3e5938c8ad8ca372b29d4a88b7b082f5b22d064a 100644 (file)
@@ -1926,7 +1926,9 @@ int odf_write_sb_data(struct odf_sb_info* osi, struct unionfs_data *data, struct
                err = -EINVAL;
                goto out;
        }
-       else if (d_content->d_inode) {
+
+       dget(d_content);
+       if (d_content->d_inode) {
                /* truncate */
                attr.ia_size = 0;
                attr.ia_valid = ATTR_SIZE | ATTR_FORCE;
@@ -2066,7 +2068,9 @@ char *odf_read_sb_data(struct odf_sb_info *odf_sb, int **bid)
                err = -EINVAL;
                goto out_err;
        }
-       else if (!d_content->d_inode) {
+
+       dget(d_content);
+       if (!d_content->d_inode) {
                dput(d_content);
                err = -EINVAL;
                goto out_err;