smb311: Add support for lookup with posix extensions query info
[linux-2.6-microblaze.git] / fs / aio.c
index 5f3d3d8..6483f92 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -176,6 +176,7 @@ struct fsync_iocb {
        struct file             *file;
        struct work_struct      work;
        bool                    datasync;
+       struct cred             *creds;
 };
 
 struct poll_iocb {
@@ -1589,8 +1590,11 @@ static int aio_write(struct kiocb *req, const struct iocb *iocb,
 static void aio_fsync_work(struct work_struct *work)
 {
        struct aio_kiocb *iocb = container_of(work, struct aio_kiocb, fsync.work);
+       const struct cred *old_cred = override_creds(iocb->fsync.creds);
 
        iocb->ki_res.res = vfs_fsync(iocb->fsync.file, iocb->fsync.datasync);
+       revert_creds(old_cred);
+       put_cred(iocb->fsync.creds);
        iocb_put(iocb);
 }
 
@@ -1604,6 +1608,10 @@ static int aio_fsync(struct fsync_iocb *req, const struct iocb *iocb,
        if (unlikely(!req->file->f_op->fsync))
                return -EINVAL;
 
+       req->creds = prepare_creds();
+       if (!req->creds)
+               return -ENOMEM;
+
        req->datasync = datasync;
        INIT_WORK(&req->work, aio_fsync_work);
        schedule_work(&req->work);